
许多同学玩过《植物大战僵尸》. 最近,PopCap带来了新版本的新闻. 这次对Xbox用户来说是一个快乐的转折. 最近,PopCap发布了XBLA版本的“植物大战僵尸”屏幕截图,此版本的“植物大战僵尸”引入了合作和对抗模式. 看着图片,您会发现它更加有趣和刺激.

有关详细信息,请参见游戏说明,
游戏视频
因此,由于好奇心和好奇心,我编写了一个简单的两人游戏版本. 开发环境为VC6.0,开发语言为C语言.
最终游戏完成C语言植物大战僵尸
第一章需求分析
设计植物和僵尸之间的两人战斗,两个人在计算机上玩.
植物侧使用鼠标控制,与原始控制方法基本相同. 植物一方的获胜条件是杀死僵尸尽头的五个墓碑中的三个.
僵尸方使用键盘控制,W控制僵尸选择光标向上移动,S控制僵尸选择光标向下移动,ENTER是僵尸选择确认,箭头键控制僵尸的放置以及空格条控制僵尸. 僵尸派对的获胜条件是要像原来一样去戴夫家.
第2章外形设计
首先,根据我的设计,我将游戏分为几个元素: 地图网格元素,卡片元素,僵尸元素,购物车元素,僵尸墓碑目标元素,植物元素和效果播放元素.
第二,游戏分为几个过程: 遇到僵尸,僵尸遇到植物,手推车遇到僵尸,遇到墓碑目标等. 在每个过程之后,立即连接播放效果.
第三章详细设计
3.1加载GIF图片
plant元素和zombie元素都是动态的,因此我考虑加载GIF. 搜索信息后,我发现了在VC6.0中用GDI +加载GIF的方法.
有关更多信息,请参见使用GIF数据的VC6.0
材料和示例程序地址VC6.0加载GIF方法,示例程序
程序的结果如图所示

这是因为,当数据量很大时,绘图可能要花费几秒钟甚至更长的时间,有时会出现闪烁. 要解决这些问题,可以使用双缓冲技术进行绘制.

双重缓冲是在内存中创建一个与屏幕绘制区域一致的对象. 首先将图形绘制到内存中的该对象,然后立即将该对象上的图形复制到屏幕,这可以大大加快绘制速度. 双重缓冲的实现过程如下:
1. 在与画布一致的内存中创建一个缓冲区
2. 绘制缓冲区
3. 将缓冲区位图复制到当前画布
4. 可用内存缓冲区
添加双缓冲示例程序地址双缓冲加载GIF
程序结果如图所示

3.2游戏元素
3.2.1地图网格元素
“植物大战僵尸”地图中的草是一格一格的,因此您可以创建一个二维数组结构来表示地图上当前的网格状态.
typedef结构
{
char cName; //网格中植物的名称,如果没有植物,则为0
int iLife; //网格中植物的生命价值
char cSun; //网格中是否有阳光
char cChomper; //是否是食人症
char cSquash; //是否是蜜瓜
char cBomb; //是
char cCherryBomb; //是
POINT ptSite; //网格的坐标位置

char cBeat; //网格中的植物是否受到攻击
} __地图;
__ MAPNATURE _MAP [5] [9]; //植物植物
__ MAPNATURE _MAPZOM [5] [3]; //僵尸的网格
3.2.2卡元素
植物和僵尸可以选择卡片,如图所示

植物有植物卡,僵尸有植物卡. 每张卡具有不同的属性并创建结构.
typedef struct {
char cCanFlg; //可以选择
int iCount; //冷静下来的时间
POINT ptSite; //卡的位置
char pTime [8]; //冷却时间
int iColor; //隐藏的颜色
int iMoney; //花在卡上的钱
} __ CARDNATURE;
__ CARDNATURE _CARD [8]; //植物卡
__ CARDNATURE _CARDZOM [7]; //僵尸卡
3.2.3僵尸元素
每个僵尸都是一个独立的单位,包括其生存和位置. 我使用结构数组,实际上可以使用循环队列.
typedef struct {

char clive; //是否还活着
char cName; //僵尸的名字
int iLife; //僵尸的生命价值
char cPole; //极僵尸的极是否存在
int iSpeed; //僵尸的行走速度
POINT ptSite; //僵尸的位置
char cBeat; //僵尸是否被击中
字符攻击; //僵尸是否在吃植物
char cPass; //僵尸可以行走,但无法通过植物
char cProtect; //是否有保护僵尸,免受报纸,铁桶僵尸的攻击
char cPoleVaulting; //极地僵尸是否正在跳跃
} __ ZOMBIENATURE;
__ ZOMBIENATURE _ZOMBIE [ZOMMAX]; //僵尸数组
3.2.4其他元素
这里的其他元素是购物车元素,僵尸侧的墓碑目标元素和植物的元素. 同样,它们也有自己的特征.
//购物车
typedef struct {
char cActive; //购物车激活标志. 僵尸遇到激活
char clive; //购物车用完了,到了最右边,还没活着
POINT ptSite; //花盆位置
} __ LAWNMOVERNATURE;

//僵尸目标
typedef struct {
int iLife; //僵尸目标的健康状况
POINT ptSite; //目标位置
char cBeat; //目标是否受到攻击
} __目标;
//豌豆
typedef结构
{
char clive; //激活标志,发射频率多高
char cOpen; //可以激活
POINT ptSite; //的旧位置
POINT ptNew; //的新位置
} __公告;
3.3游戏处理
3.3.1用处理僵尸
是结构的阵列,而僵尸也是结构的阵列. 用两个for循环扫描两个阵列. 当的坐标与僵尸的坐标相遇时,激活标记被清除,即消失,而僵尸的生命值降低一. 在清除僵尸之前,僵尸会死去.
3.3.2僵尸遭遇植物治疗
对于循环扫描每个僵尸,并根据其位置判断地图上与僵尸相对应的前一个网格. 从当前网格的状态来看,接下来会发生什么. 例如: 网格中没有植物,僵尸就过去了;僵尸碰到了豌豆射手,坚果墙,向日葵就停止了进食. 同时植物大战僵尸gif素材,网格的健康值持续降低,直到植物被吃掉并向前走为止,因为一根杆子僵尸有一根杆子,遇到它们时必须跳过它们;僵尸在播放效果时遇到,巢和食人鱼时会被吃掉或炸掉.
3.3.3处理推车遇到的僵尸
用于遍历每个僵尸. 当僵尸走到最左边时,购物车符号被激活,购物车向右移动. 当推车在这条路上撞到僵尸时,僵尸将死亡. 当手推车到达最右边时,手推车将死亡.
每天晚上20:00,我都会偶尔进行直播,以分享C / C ++游戏编程的学习知识和方法. 我将不时更新最新的教程和学习方法. 每个人都在学习C / C ++,Trans或大学生以及想要提高工作能力的前端方,如果您是学习C / C ++的小伙伴植物大战僵尸gif素材,则可以参加研究. 最后,我希望所有程序员都能达到人生的顶峰,让代码将梦想变为现实,非常适合新手学习,您可以随时问我有没有问题,希望您在不熟悉的时候可以解决难题忙. 您可以观看我的主页视频以首先学习它.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-195417-1.html
5
这下麻烦了
允许有言论自由