这个案例给出了14级同学大一时实现的贪吃蛇小游戏,分步骤代码、游戏素材可以从百度云盘下载:http://pan.baidu.com/s/1c1lYKQ
首先可以打开Exe_final目录下的Exe_final.dsw工程文件,编译运行,以下为对应的游戏动图效果:
主要实现内容包括:贪吃蛇移动 、道具判定、加速减速、生命条处理、分数处理、暂停处理、键盘或鼠标操控。
代码中Loop函数主要控制贪吃蛇的移动及每一帧的必须要完成的指令,其中小蛇的移动和转弯是贪吃蛇游戏实现的难点。
假设小蛇初始状态为:
上图左侧是对应游戏数据的二维数组存储状态,右侧为小蛇显示效果,蛇头为1,蛇身依次加1。
要让小蛇移动,首先遍历二维数组所有元素,元素为正 则加1:
对全局变量dir进行判断,比如dir==1 表示方向向右,则在元素2的右方设置为1,并且把最大元素归零:
以上就实现了小蛇向右的移动,向其他方向的移动实现类似。
双人游戏比较简单,在二维数组中实现即可:
Loop函数中除了贪吃蛇的移动,还实现了:减速包的随机出现、加速包的随机出现、血包的随机出现、障碍物的随机出现、苹果的随机出现、小爬虫的移动、无敌,加速,减速的判定。
Game函数是核心判定单元。根据贪吃蛇的移动方向dir的1 2 3 4, 分别对蛇头的右左上下方的元素进行判定:
是-1则吃了苹果,蛇身增长 并加分;
是-2则撞墙了,归零g1 游戏结束;
是-3则吃了葡萄, 蛇身增长 如果(wudi==0)也就是 并非无敌状态 g2减少;
是-4则吃了爱心, g2增加 wudi赋值为wuditime
,使贪吃蛇进入无敌状态 。
吃果子后贪吃蛇的增长,和贪吃蛇的移动差不多,唯一的区别是增长不需要把最大元素归零。
Show函数:
Start函数:
各个参数的初始化、二维数组a的元素初始化、对图片树的输出、分数显示、生命值显示的初始化、生命条的显示、倒计时画面
Interact函数:有两种操作模式 但本质一样都是对方向dir的修改
第一种 键盘 :根据wasd 把dir修改为1(d右)2(a左)3(w上)4(s下)、按p键暂停
第二种 鼠标
:在Loop函数中会计算出蛇头元素的下标it,jt、根据鼠标点击的横坐标m.x 纵坐标m.y修改dir
hello函数
:显示封面及游戏操作 道具使用说明
bye函数
:显示封底及最终分数
fs函数(记分记血系统):对贪吃蛇生命状态的判定和死亡提示
ryj函数
:获取包括鼠标左键在内的任意键
同学实现的代码不是很规范,大家可以先自己尝试实现,再参考网盘上的分步骤代码。