问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于EasyX图形库开发的小游戏——Plants VS Zombies

创作时间:
作者:
@小白创作中心

基于EasyX图形库开发的小游戏——Plants VS Zombies

引用
CSDN
1.
https://m.blog.csdn.net/UndefinedM/article/details/141274469

《植物大战僵尸》是一款经典的塔防类游戏,因其独特的策略性和趣味性深受玩家喜爱。为了提升自己的C语言编程能力,同时学习游戏开发的基础知识,作者决定使用EasyX图形库制作一个简化版的《植物大战僵尸》小游戏。在B站程序员Rock的零基础教学的学习下完成了此项目开发,而且在教程基础上增加了火爆辣椒,寒冰豌豆射手,三重豌豆射手等植物,以及游戏结束判断,游戏音效等功能。

项目背景与目标

《植物大战僵尸》是一款经典的塔防类游戏,因其独特的策略性和趣味性深受玩家喜爱。为了提升自己的C语言编程能力,同时学习游戏开发的基础知识,作者决定使用EasyX图形库制作一个简化版的《植物大战僵尸》小游戏。在B站程序员Rock的零基础教学的学习下完成了此项目开发,而且在教程基础上增加了火爆辣椒,寒冰豌豆射手,三重豌豆射手等植物,以及游戏结束判断,游戏音效等功能。

技术栈与主要特性

  • 编程语言:C语言
  • 图形库:EasyX(用于处理图形渲染和简单的用户输入)
  • 开发工具:Visual Studio 2022

主要特性

  • 植物种类:包括多种豌豆射手、向日葵和火爆辣椒等。
  • 僵尸种类:普通僵尸、铁桶僵尸、路障僵尸、旗子僵尸等。

开发过程概述

游戏的开发架构主要由5个核心模块构成:游戏主循环、游戏图形渲染、游戏初始化、游戏状态更新以及人机交互。

游戏主循环

游戏主循环是整个游戏的核心,负责处理用户交互、控制游戏帧率、调用渲染和更新函数。主循环代码结构清晰,主要包括以下几个核心部分:

  • 图像加载与初始化:使用了IMAGE类型的变量和数组来存储游戏所需的图片资源。
  • 结构体数组的定义与初始化:用于管理游戏中的植物、僵尸、子弹和阳光球等元素。
  • 主游戏循环:循环负责处理用户交互、控制游戏帧率、调用渲染和更新函数。

游戏初始化模块

游戏初始化模块包括了游戏窗口的创建、图片资源的加载、游戏数据的初始化和字体设置等功能。以下是代码的整体结构和功能的逐步解释:

  1. 游戏初始化函数:主要用于初始化游戏窗口、加载资源、初始化数据、设置字体和随机种子。
  2. 图片加载函数:用于加载游戏中的所有图片资源。包括地图背景、植物栏、僵尸、阳光球和子弹等。
  3. 数据初始化函数:负责初始化游戏中的各种数据结构,包括僵尸、植物、子弹、阳光球等的初始状态。
  4. 字体设置函数:用于设置阳光值显示的字体和颜色。
  5. 文件存在性判断函数:判断指定路径的文件是否存在。

游戏状态更新模块

游戏状态更新模块组织清晰,功能分布合理,涵盖了各种游戏元素的更新逻辑,如植物状态、阳光球、各种僵尸、子弹等。

图形渲染模块

图形渲染模块非常详细,涵盖了多种不同的渲染场景和对象,从僵尸的渲染到植物和子弹的渲染,以及初始界面的绘制。

人机交互模块

人机交互模块包含了用户交互的主要逻辑。首先调用startUI显示游戏开局界面,之后调用UserClick来处理植物的选中和放置,以及阳光的收集。

遇到的挑战与解决方案

性能优化

在开发过程中,由于游戏对象的数量逐渐增多,导致帧率下降。通过减少不必要的图形重绘,优化了渲染循环,并使用双缓冲技术来提高游戏的整体性能。

图形和动画处理

处理动画帧时遇到了同步问题,例如僵尸和植物的动画不一致。通过将动画帧与游戏主循环的时间步长进行绑定,解决了这一问题。以及游戏渲染时出现的闪屏问题,通过双缓冲函数得以很好的解决。

逻辑错误

在早期开发中,植物攻击僵尸的逻辑存在缺陷,导致有些僵尸无法被消灭。通过详细的调试和日志记录,发现问题出在碰撞检测的边界条件上,并成功修复了这个Bug。

测试与调优

使用了多种测试方法,包括手动测试和自动化单元测试,确保各个功能模块的正确性和稳定性。特别是在关卡设计上,通过反复调整难度,确保游戏具有挑战性但不至于过于困难。

在朋友中进行了一次小范围测试,收集了大量反馈。根据反馈,对游戏的操作体验、关卡难度、植物和僵尸的平衡性等方面进行了多次迭代。

最终效果展示



参考文献

[1] 程序员Rock.【程序员Rock】C语言项目:完整版植物大战僵尸!可能是B站最好的植物大战僵尸教程了!零基础手把手游戏开发[EB/0L].(2023-0207)

[2] 绿駬. EasyX基础入门——这一篇就够啦[EB/0L].(2023-08-28)

[3] beijing_txr. 贝塞尔曲线(Bezier Curve)原理、公式推导及matlab代码实现[EB/0L].(2021-10-22)

[4] 岁月失语唯石能言. C语言如何生成随机数以及设置随机数的范围。(超详细)[EB/0L].(2023-12-09)

[6] @梅哲仁.. C语言图形库EasyX安装及基本使用[EB/0L].(2023-06-03)

GitHub链接(源码获取)https://github.com/Undefined-M/Plants-VS-Zombies/tree/master

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号