基于easyx实现的小蓝鲸跑酷游戏

happybirthday

发布日期: 2018-11-05 18:00:09 浏览量: 1831
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1 游戏介绍

本程序是一款以“小蓝鲸”为主角的跑酷游戏。本游戏通过操作 “w”、“s” 或方向键 “↑”、“↓” 控制小蓝鲸上浮下潜以躲避海底障碍物,在水面上时按“空格键”可以让小蓝鲸跳跃以越过岛屿,游戏过程中小蓝鲸存活时间越久得分越高。与此同时,小蓝鲸吃到鱼可以获得加分或者无敌。难度方面共设计了四个难度,难度乘以时间决定最终的总分。除了游戏部分之外,玩家还可以查看规则及团队介绍。

本程序设计灵感来源于《flappy bird》,但实际上程序设计思路完全是团队原创。玩家在游戏中还能发现许多亮点,如千奇百怪的障碍物、奖励设置、跳跃操作、小蓝鲸吐槽等,界面精美,可玩性高,是一款操作简易娱乐性强的游戏。

2 数据结构

本程序主要使用了Whale、Rect、Bonus结构体和wImg、wImgx数组,没有明显数据结构。

3 模块功能介绍

4 程序框架图

5 主要功能实现

  • 透明贴图:因为物体绘制时需要去掉背景,所以如何实现透明贴图成了一大难题,最初是想通过导入Png实现,发现easyx不支持Png且只支持Bmp与Jpg格式。之后又从网上下载easyx第三方Png支持库,结果安装失败。最后通过绘制补码图和原图实现了透明贴图

  • 随机障碍:一开始打算通过人工导入地图的方式来绘制地图,但发现数据不好处理,因此采用了随机算法每个一段时间生成障碍。在最初的Demo版本里,出现了随机物体组合导致小蓝鲸无法通过的情况,因为是纯随机生成,所以通过检测随机数以防出现通不过的障碍组合避免了该问题。

  • 操作捕捉:小蓝鲸移动过程中会出现“先动一下,再缓缓移动”的情况,也就是动作不流畅的问题。这一问题是由于使用getch()来捕捉按键导致的,getch()获取输入存在系统给定的0.5毫秒的间隔。之后我们实现了用GetAsyncKeystate解决了该问题,实现了平滑移动。与此同时还有一个问题是,玩家按住某一个键小蓝鲸会一直移动下去,灵敏度很高,之后我们设置了“按下并弹起”的条件,这样小蓝鲸的动作更加易于控制

  • 移动问题:物体移动是游戏的一大难题,在最初物体移动是通过坐标自增减实现的,但物体的速度是通过Sleep控制的并且不稳定不直观。之后我们通过获取系统时间来测量间隔时间,据此计算出物体坐标,实现了物体更精确的移动

  • 碰撞判定:物体碰撞需要知道坐标、长、宽三个量,而这和图片大小密切相关。我们游戏图片都是矩形,碰撞检测也以矩形为判定,如果物体的轮廓不接近矩形就会有很奇怪的碰撞判定,于是芮雨琛同学把物体做的更像矩形,缓解了该问题

  • 界面切换:图形移动过程中前一刻图像未擦除导致重复出现,在循环移动过程中不断覆盖背景图片以营造擦除效果;界面切换时鼠标不断获取信息进行判断,造成界面2的信息放到了界面1使用判断条件下,导致判断错误,界面切换乱套,在程序中放入多个goto结构使得信息去往正确的位置

  • 跳跃功能:在实现跳跃功能时直接使用岳翔在物体移动中的相关函数会出现一些逻辑性和变量重复的问题,通过编写新的专用于跳跃判定的函数解决了这个问题。其他没有遇到问题

6 总结

最初的希望就是——努力制作出一款真正由我们设计和实现的高水准游戏。

即使它是一款只有一千行代码的小游戏,但是我们一直用玩家视角不断审视,比如鼠标移到按钮上的效果、跳跃和下落时的重力加速度等,我们将一开始天马行空的想象逐步落实到每一个细节。

为了这个目标,几乎每一个成员在前期都为了这款游戏熬夜到两三点甚至更晚:背景、角色、障碍物,都是亲自设计和制作,用PS、VS反复调试效果;为了更流畅更真实,碰撞判定、操作捕捉、物体移动,一次次讨论、修改。但是,当看到它一点点成长时,其中的喜悦溢于言表。

它小巧精致,倾注了我们所有的努力,而这些,都没有白费。

从理论上说,一个完整的程序设计的开头应该将整个程序的整体结构和具体功能确定,但是由于对C语言的理解还不够,我们在早期的一些设定在后期被陆续推翻、修改、重建,当然主体框架得以保留;同时还有很多新的功能和想法在具体编写过程中出现。

在这个过程中我们得到了类似于对游戏进行更新的体验,我从中认识到了一个良好的程序的框架的重要性:一个好的框架能够很好的适应修改和更新,对于维护也更加方便;而当程序现有框架不能很好的满足程序功能上的需求的时候应该果断重写框架,这样能够大大的提高效率。

同时我还认识到了团队合作完成工程项目中沟通交流的重要性:在编写jump()函数的时候,因为我们是将同学的代码作为主体框架,在上面加以修改,而不同的代码编写习惯导致我直接阅读同学的代码时非常困难。在将jump()函数整合到主题代码中时,程序整体逻辑出现了很多问题,而后我加强了和同学之间的沟通和交流,后面的功能整合就基本没有遇到什么问题了。同时我也得到了一个启发:在编写团队合作的项目时最好确定一套统一的书写规范,同时多打注释多交流,这样能够很好的提高工作效率。

7 游戏演示

游戏初始界面

游戏介绍

游戏难度选择

游戏画面1

游戏画面2

游戏结束

上传的附件 cloud_download 基于easyx实现的小蓝鲸跑酷游戏.7z ( 7.79mb, 88次下载 )
error_outline 下载需要7点积分

发送私信

都说你眼中开倾世桃花,却如何一夕桃花雨下

6
文章数
11
评论数
最近文章
eject