(六)C++自制植物大战僵尸游戏关卡数据讲解

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/xjvbb


游戏关卡数据文件定义了游戏中每一个关卡的数据,包括游戏类型、关卡通关奖励的金币数量、僵尸出现的波数、每一波出现僵尸数量、每一波僵尸出现的类型等。根据不同的游戏类型,定义了不同的通关要求,例如最多使用小车的数量、不可种植的位置、最多使用的植物数量等。

关卡数据文件位置

关卡数据文件在资源文件的Text文件夹中。位置如下图所示。

GAMEWORLD_1DATAS.reanim.compiled 简单模式的关卡数据已加密文件

GAMEWORLD_1DATAS.reanim1.compiled 简单模式的关卡数据未加密文件

GAMEWORLD_1DATAS_DIF.reanim.compiled 困难模式的关卡数据已加密文件

GAMEWORLD_1DATAS_DIF.reanim1.compiled 困难模式的关卡数据已加密文件

文件有已加密和未加密两个版本,游戏中可以选择加载不同的版本,关于加载代码请看上一篇教程有详细讲解。

数据解释

打开未加密的关卡数据文件如下图所示。文件是一个json格式文件,定义了关卡中的相关数据。

javascript 复制代码
 "Level_1": {
    "IsEncryption": false,
    "UserLose": 430,
    "CoinNumbers": 50,
    "Frequency": 5,
    "ZombiesType": [ 1 ],
    "MunchZombiesFrequency": [],
    "FirstFrequencyTime": 18,
    "GameType": [ 3 ],
    "CarNumbers": 5,
    "UserPlantsNumbers": 10,
    "ZombiesNumbers": [ 1, 3, 3, 3, 10 ],
    "ZombiesTypeProbability": [
      [ 100, 0, 0 ],
      [ 100, 0, 0 ],
      [ 100, 0, 0 ],
      [ 100, 0, 0 ],
      [ 100, 0, 0 ]
    ]
  },

"IsEncryption": false

表示是否加密,该字段在游戏未使用,可以忽略。

"UserLose": 430

表示当僵尸在地图上向左移动小于430像素的位置就表示玩家失败。

"CoinNumbers": 50

表示玩家成功通关后金币奖励的基数。关卡金币奖励数量不是定值,奖励金币数量会根据该基数值进行计算。

"Frequency": 5

表示这一关卡总的僵尸波数。这里表示这一关会有5波僵尸出现。

"ZombiesType": [ 1 ]

表示僵尸类型,它是一个数组。僵尸的类型定义在Zombies.h代码文件中。

cpp 复制代码
/* 僵尸类型 */
enum class ZombiesType
{
	None = 0,
	CommonZombies,
	ConeZombies,
	BucketZombies,
	CommonDoorZombies,
	ConeDoorZombies,
	BucketDoorZombies,
	LmpZombies,
	CommonFlagZombies,
	ConeFlagZombies,
	BucketFlagZombies,
	CommonDoorFlagZombies,
	ConeDoorFlagZombies,
	BucketDoorFlagZombies,
	SnowZombies
};

"MunchZombiesFrequency": []

表示大波僵尸的波数,它是一个数组,可以为空,如果值定义为 **[1,5]**就表示在第1波和第5波会出现大量僵尸,定义后会在关卡的进度条上显示一个小旗子。

"FirstFrequencyTime": 18

表示从进入关卡开始到僵尸第一波出现的时间,单位为秒。时间到达就会刷新第一波僵尸,并播放僵尸出现音效。

"ZombiesNumbers": [ 1, 3, 3, 3, 10 ]

表示每一波僵尸的数量,它是一个数组,数组里面的数量与**"Frequency"**定义的值是对应的。

**"ZombiesTypeProbability": [

100, 0, 0 \], \[ 100, 0, 0 \], \[ 100, 0, 0 \], \[ 100, 0, 0 \], \[ 100, 0, 0

]**

表示每一波种每一类僵尸出现的概率。它是一个二维数组。

"GameType": [ 3 ]

表示定义的游戏类型。它是一个数组。定义不同的游戏类型需要额外的数据信息。数组中的值类型定义如下。

cpp 复制代码
enum class GameTypes
{
	None = -1,
	CreateWall,
	AtLeastSunNumbers,
	FlowerPosition,
	CarNumbers,
	UserPlantsNumbers,
	ZombiesInvisible,
	SmallZombies,
	BigZombies,
	NoPlants,
	UserLose
};

"CarNumbers": 5

这是游戏类型的一种,表示游戏通关结束,需要至少保留的小车数量。

"UserPlantsNumbers": 10

这是游戏类型的一种,表示这一关卡最多使用的植物数量。

"FlowerPosition": 5

表示花坛的位置,数值表示所在列。游戏类型的一种。

"AtLeastSunNumbers":1000

表示在通关结束之前至少产生的阳光数量。游戏类型的一种。

**"NoPlants": [

4, 2 \], \[ 4, 3 \], \[ 2, 4 \], \[ 0, 2 \], \[ 0, 3 \], \[ 1, 1 \], \[ 2, 0 \], \[ 3, 1

]**

表示不可种植区域,是一个二维数组,存放多个位置坐标。游戏类型的一种。

后续

下一篇将讲解读取关卡数据的详细代码细节。

相关推荐
青瓦梦滋25 分钟前
【语法】C++的多态
开发语言·c++
白露秋4826 分钟前
C——五子棋小游戏
c语言·游戏
Darkwanderor4 小时前
一般枚举题目合集
c++·算法
源远流长jerry4 小时前
右值引用和移动语义
c++
吃个糖糖4 小时前
MFC 调用海康相机进行软触发
c++·数码相机·mfc
@我漫长的孤独流浪4 小时前
最短路与拓扑(2)
数据结构·c++·算法
٩( 'ω' )و2604 小时前
哈希表的实现01
数据结构·c++·哈希算法·散列表
靡樊5 小时前
网络基础概念
linux·服务器·网络·c++·学习
君鼎5 小时前
TCP/IP-——C++编程详解
网络·c++·tcp/ip
whoarethenext5 小时前
c/c++爬虫总结
c语言·c++·爬虫