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

植物大战僵尸游戏开发教程专栏地址icon-default.png?t=N7T8http://t.csdnimg.cn/xjvbb 


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

关卡数据文件位置

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

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

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

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

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

数据解释

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

 "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代码文件中。

/* 僵尸类型 */
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 ]

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

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 ]
    ]

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

后续

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619802.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows远程桌面连接虚拟机Linux

Windows远程桌面连接虚拟机Linux 需要先打开虚拟机的启用VNC连接使用VNC客户端进行连接 yum install -y tigervnc-server #安装tigervnc-server vncserver #启动一个vnc进程 #第一次启动会要求设置密码 #如果需要更改密码可以使用vncpasswd进行更改密码 vncserver -list #查看…

【算法练习】30:快速排序学习笔记

一、快速排序的算法思想 原理:快速排序基于分治策略。它的基本思想是选择一个元素作为“基准”,将待排序序列划分为两个子序列,使得左边的子序列中的所有元素都小于基准,右边的子序列中的所有元素都大于基准。这个划分操作被称为分…

在k8s 中部署有状态服务MongoDB高可用集群详解(附带镜像)

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、k8s简介 2、MongoDB介绍 3、为什么要…

新手开抖店不出单?三种方法解决“没曝光,没流量”难题!

哈喽~我是电商月月 新手开抖店经常会这样做:开通后选品上架。然后傻傻的等待流量进来,然后每天就是刷新再刷新?最后还是没流量! 我敢说这样做你两个月也出不了单,方法错误,再好的产品也卖不出去&#xff…

C++内存管理和模板

一、内存管理 关键字:new delete 我们知道,在C语言中内存的开辟和修改,要用到函数malloc/calloc等,而且要直自己判断内存开辟是否正确,所以在C中,提供了两函数:new/delete 由于malloc无法很…

【我的代码生成器】生成React页面类

有了数据表的结构信息,就能生成React 的页面类,快捷方便。 生成界面如下: 生成的React FrmUser.js页面如下: 只需再写里面的操作逻辑代码。

婴儿专用洗衣机有必要买吗?四大宝藏婴儿测评对比

幼龄时期的宝宝的衣物,是比较需要注意的时候。可能一不注意宝宝穿在身上就会有不适宜症状发生。所以宝妈们真的要随时观察,然后在宝宝洗衣服的这上面多下点功夫,不要让宝宝受到这种无谓的伤害。小婴儿的抵抗力比我们差很多。有些细菌、病毒可…

探索未来:智能客服产品架构的演进与创新

随着科技的迅猛发展和人工智能技术的不断成熟,智能客服已经成为了现代企业提供客户服务的重要方式。而智能客服产品的架构设计则直接影响着其在实际运营中的效果和用户体验。本文将探讨智能客服产品架构的演进历程以及未来的创新趋势。 1. 传统客服架构的局限性 传…

数据结构__顺序表

概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改 需要用到数组:数组的绝对优势:下标的随机访问(因为物理空间连续) a[i]等…

Linux下使用C语言实现线程池---代码及分析

线程池 相关文章 协议 Socket编程 高并发服务器实现 线程池 如果一个客户端建立连接使用创建一个线程用于处理这一个线程, 处理结束的时候把这一个线程删除, 这个时候会导致线程的创建以及销毁会消耗大量的时间 这时候可以一次性创建多个线程, 这几个线程统称线程池, 如果客户…

spark实验三-spark进阶编程

1.Spark编程统计各地区租房人数 实验目标: (1) 掌握在IntelliJ IDEA 中操作spark程序开发 (2) 打包程序提交集群运行 实验说明: 现有一份某省份各地区租房信息文件 house.txt,文件中共有8个数据字段,字段说明…

更改ip地址的几种方式有哪些

在数字化时代,IP地址作为网络设备的标识,对于我们在网络世界中的活动至关重要。然而,出于多种原因,如保护隐私、访问特定网站或进行网络测试,我们可能需要更改IP地址。虎观代理将详细介绍IP地址的更改方法与步骤&#…