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

]**

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

后续

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

相关推荐
宋恩淇要努力29 分钟前
C++继承
开发语言·c++
江公望2 小时前
Qt qmlRegisterSingletonType()函数浅谈
c++·qt
逆小舟4 小时前
【C/C++】指针
c语言·c++·笔记·学习
江公望4 小时前
Qt QtConcurrent使用入门浅解
c++·qt·qml
我是华为OD~HR~栗栗呀4 小时前
23届考研-Java面经(华为OD)
java·c++·python·华为od·华为·面试
爱吃喵的鲤鱼4 小时前
仿mudou——Connection模块(连接管理)
linux·运维·服务器·开发语言·网络·c++
郝学胜-神的一滴5 小时前
使用Linux的read和write系统函数操作文件
linux·服务器·开发语言·数据库·c++·程序人生·软件工程
2301_803554525 小时前
C++联合体(Union)详解:与结构体的区别、联系与深度解析
java·c++·算法
pu_taoc5 小时前
深入剖析:基于epoll与主从Reactor模型的高性能服务器设计与实现
服务器·c语言·c++·vscode
初圣魔门首席弟子6 小时前
c++ bug 函数定义和声明不一致导致出bug
开发语言·c++·bug