(六)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 ]
]

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

后续

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

相关推荐
微尘83 分钟前
C语言存储类型 auto,register,static,extern
服务器·c语言·开发语言·c++·后端
金博客22 分钟前
Qt 模型视图(二):模型类QAbstractItemModel
c++·qt6.7.2
五味香40 分钟前
C++学习,动态内存
java·c语言·开发语言·jvm·c++·学习·算法
无名之逆41 分钟前
计算机专业的就业方向
java·开发语言·c++·人工智能·git·考研·面试
Beauty.5681 小时前
P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
数据结构·c++·算法
孟章豪1 小时前
SQL Server Data Tools (SSDT)入门教程
visual studio
jimmy.hua1 小时前
C++刷怪笼(5)内存管理
开发语言·数据结构·c++
xiaobai12 31 小时前
二叉树的遍历【C++】
开发语言·c++·算法
DieSnowK1 小时前
[项目][WebServer][Makefile & Shell]详细讲解
开发语言·c++·http·makefile·shell·项目·webserver
dc爱傲雪和技术2 小时前
在 VS Code 中调试 C++ 项目
开发语言·c++