(三)C++自制植物大战僵尸游戏项目结构说明

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


一、项目结构

打开项目后,在解决方案管理器中有五个项目,分别是libbox2dlibcocos2dlibrecastlibSpinePlantsVsZombies五个项目,除PlantsVsZombies外,其他四个是所用到的一些库文件,不需要深入探究。

例如:libbox2d是一个物理引擎库,libcocos2dCocos2d-x游戏开发框架,libSpine是一个骨骼动画库等。

PlantsVsZombies是我们自己开发的游戏项目,该项目依赖于上述的某些库文件。所以启动游戏时需要将PlantsVsZombies项目设置为启动项。

鼠标左键点击三角图案,打开项目结构目录。如下图所示。

其对应的项目文件夹目标如下图所示 。

二、Class文件夹结构 

Class文件夹里面的代码就是开发该游戏所编写的所有代码。Class文件里面包含四个文件夹,分别是BasedPlantsScenesZombies,以及以PlantsVsZombies命名的C++头文件和源文件。


每个文件夹中所包含的代码文件所表示的内容如下表所示。

文件夹内容
Based存放游戏中使用到的一些基础代码文件
Plants存放所有植物类的代码文件
Scenes存放游戏中场景的代码文件
Zombies存放所有僵尸类的代码文件
PlantsVsZombies.h/.cpp游戏main函数文件,Windows版本启动游戏入口

三、Based文件夹

Based文件夹主要包含一些在游戏中常用到的一些类文件。比如对话框类音乐播放类全局变量类用户信息类关卡信息类等一些重要的文件。

四、Plants文件夹结构

Plants文件夹中存放所有植物相关代码文件。根据植物的不同特性,将其分为三类。分别是EmissionPlantsDefensePlantsBattlePlants。本文只介绍项目结构,植物的继承关系以及代码实现细节将在后续的教程中讲解。

1. EmissionPlants

EmissionPlants表示可以发射攻击的植物,例如豌豆射手卷心菜投手等植物,这类植物可以发射子弹,使用子弹进行攻击。所以在这个文件夹下还有一个Bullet文件夹,主要存放不同植物所发射的子弹。

2. DefensePlants

DefensePlants主要存放保护类植物,该类植物不直接产生攻击伤害,但是可以辅助其他植物,例如向日葵火炬树桩坚果墙等

3. BattlePlants 

BattlePlants主要存放攻击伤害较高的植物,此类植物一次攻击伤害高,攻击时间间隔较长或者只攻击一次。例如樱桃炸弹土豆雷火爆辣椒等植物。

4. 其他 

Plants.h/cpp文件是植物类的基类,所有植物都继承此类。这个类主要定义一些植物所共有的属性和方法。


Plants-files.h文件主要是用于引入植物类的头文件,当有类需要引入多个植物类时,只需要引入这个头文件即可。

五、Zombies文件夹结构 

 Zombies文件夹存放所有的僵尸类。

六、Scenes文件夹结构 

Scenes文件夹用于存放游戏场景相关的代码文件。在Cocos2d-x游戏框架中,游戏是有多个场景构成的,多个场景可以相互切换。每个场景包含许多Layer(层),每个层又可以包含多个Sprite(精灵)。游戏场景中的所有植物、僵尸、子弹等都可以看作为精灵。

游戏中包含多个场景,例如游戏的加载场景、主菜单场景、植物选择场景、游戏场景等等。在每一个场景中都包含了大量的代码文件。本文只介绍结构,后续会详细介绍相关是代码。

  1.  EasterEggsScene表示菜单场景;
  2.  GameScene表示游戏场景;
  3.  HelpScene表示帮助场景;
  4.  LoadingScene表示游戏资源加载场景;
  5.  MainMenuScene表示主菜单场景;
  6.  SelectPlantsScene表示植物选择场景;
  7.  WorldScene表示世界选择场景;

1.GameScene 

GameScene表示游戏场景,这个场景也是整个项目中最复杂的部分之一。里面包含了多个层,如动画层,主要用于显示动画。背景层用于显示背景。控制层主要定义了整个游戏的运行逻辑以及玩家游戏操作逻辑等。除此之外还有游戏结束层、信息层、按钮层等。这里就不一一介绍了,后会详细接收。

2.MainMenuScene 

...

七、后续 

下一篇会详细讲解游戏的启动流程,后续将会详细讲解某些重要代码文件中的实现细节。

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

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

相关文章

python爬取京东商品信息与可视化

项目介绍:使用python爬取京东电商拿到价格、店铺、链接、销量并做可视化 ........................................................................................................................................................... 项目介绍效果展示全部…

Project Euler_Problem 193_Few Repeated Digits_欧拉筛+容斥公式

解题思路&#xff1a;暴力搜索 代码&#xff1a; void solve() {ll i, j,k,x,y,z,p,q,u,v,l,l1;N 999966663333, NN 1024;//N 1000;double a, b, c,d;M.NT.get_prime_Euler(1000000);l M.NT.pcnt;for (i 1; i < l; i) {u M.NT.prime[i];v M.NT.prime[i 1];x u * …

消息队列RabbitMQ入门学习

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.收发消息 2.1.1.交换机 2.1.2.队列 2.1.3.绑定关系 2.1.4.发送消息 3.SpringAMQP 3.1WorkQueues模型 3.1.1消息接收 3.1.2测试 3.1.3.能者多劳 3.1.3.总结 3.2.交换机类型 3.3.Fanout交…

在linux上面安装xxl-job2.4.0

问题 由于预算有限&#xff0c;用不起lambda去跑定时任务&#xff0c;现在只能在EC2上面自己安装一个单机版的xxl-job了。 步骤 下载压缩包 在这个页面下载压缩包&#xff0c;并本地解压。 https://github.com/xuxueli/xxl-job/releases mysql准备 找到它默认身数据库初始…

JavaScript-2.对话框、函数、数组、Date、DOM

对话框 window对象封装了三个对话框用于与用户交互 提示框&#xff1a;alert(title);确认框&#xff1a;confirm(title);输入框&#xff1a;prompt(title); 确认框 包含两个按钮“确认”/“取消”&#xff0c;点击确定时&#xff0c;返回值为true // 确认框 var bool con…

C语言单链表详解

链表和顺序表的区别 顺序表的底层存储空间是连续的&#xff0c;链表的底层存储空间是不连续的&#xff0c;链表的每个节点需要额外的指针来指向下一个节点&#xff0c;占用更多的存储空间。 顺序表的随机访问性能好&#xff0c;时间复杂度为O(1)&#xff0c;链表的随机访问性能…

Linux系统搭建FastDFS文件服务结合内网穿透实现公网访问本地文件

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

在个人电脑上,本地部署llama2-7b大模型

文章目录 前言原理效果实现 前言 我想也许很多人都想有一个本地的ai大语言模型,当然如果能够摆脱比如openai,goole,baidu设定的语言规则,可以打破交流界限,自由交谈隐私之类的,突破规则,同时因为部署在本地也不担心被其他人知道,那最好不过了 那究竟有没有这样的模型呢? llam…

Oracle 数据库 count的优化-避免全表扫描

Oracle 数据库 count的优化-避免全表扫描 select count(*) from t1; 这句话比较简单&#xff0c;但很有玄机&#xff01;对这句话运行的理解&#xff0c;反映了你对数据库的理解深度&#xff01; 建立实验的大表他t1 SQL> conn scott/tiger 已连接。 SQL> drop table …

树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

解决动态规划问题

文章目录 动态规划的定义动态规划的核心思想青蛙跳阶问题解法一&#xff1a;暴力递归解法二&#xff1a;带备忘录的递归解法&#xff08;自顶向下&#xff09;解法三&#xff1a;动态规划&#xff08;自底向上&#xff09; 动态规划的解题套路什么样的问题考虑使用动态规划&…

OR36 链表的回文结构

描述 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度小于等于900。 测试样例&#xff1a; 1->…

【C++成长记】C++入门 | 类和对象(中) |类的6个默认成员函数、构造函数、析构函数

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;C❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、类的6个默认成员函数 二、构造函数 1、概念 2、特性 三、析构函数 1、概念 2、特性 一、…

R语言 多组堆砌图

目录 数据格式 普通绘图 添加比例 R语言 堆砌图_r语言堆砌图-CSDN博客 关键点在于数据转换步骤和数据比例计算步骤&#xff0c;然后个性化调整图。 ①data <- melt(dat, id.vars c("ID"))##根据分组变为长数据 ②#计算百分比## data2 <- ddply(data, …

【数据结构】第三节:单链表

前言 本篇要求掌握的C语言基础知识&#xff1a;指针、结构体 目录 前言 单链表 概念 对比链表和顺序表 创建链表 实现单链表 准备工作 打印链表 创建节点并初始化 尾插 二级指针的调用 尾插代码 头插 尾删 头删 查找&#xff08;返回节点&#xff09; 在指定位…

Vue笔记 2

数据代理 数据代理&#xff1a;通过一个对象代理对另一个对象中属性的操作&#xff08;读/写&#xff09; let obj{x:100} let obj2{y:200} Object.defineProperty(obj2,x,{get(){return obj.x},set(value){obj.x value} })Vue中的数据代理 Vue中的数据代理&#xff1a; 通…

Java集合(一)--Map(2)

ConcurrentHashMap与HashTable 底层实现 在JDK1.7时&#xff0c;底层采用的是分段数组&#xff0b;链表的形式&#xff0c;在JDK1.8之后&#xff0c;采用的是与HashMap相同的形式&#xff0c;数组链表/红黑树。而HashTable采用的是数组链表的形式。 如何实现线程安全 Concu…

OpenCV4.9图像金字塔

目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 pyrUp()和 pyrDown()对给定图像进行下采样或上采样。 理论 注意 下面的解释属于 Bradski 和 Kaehler 的 Learning OpenCV 一书。 通常&#xff0c;我们需要将图像转换为与原始图像不同的大小。为此…

spring boot 集成rocketMq + 基本使用

1. RocketMq基本概念 1. NameServer 每个NameServer结点之间是相互独立&#xff0c;彼此没有任何信息交互 启动NameServer。NameServer启动后监听端口&#xff0c;等待Broker、Producer、Consumer连接&#xff0c; 相当于一个路由控制中心。主要是用来保存topic路由信息&#…

Blender表面细分的操作

在使用Blender的过程中,刚开始创建的模型,都会比较少面,这样操作起来比较流畅,减少电脑的计算量,当设计快要完成时,就会增加表面细分,这样更加圆滑,看起来更加顺眼。 比如创建一个猴头,它会默认显示如下: 从上图可以看到,有一些表面会比较大,棱角很多。 这时候你…