做游戏,学编程(C语言) 9 贪吃蛇

做游戏,学编程(C语言) 9 贪吃蛇

这个案例给出了14级同学大一时实现的贪吃蛇小游戏,分步骤代码、游戏素材可以从百度云盘下载: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函数 :获取包括鼠标左键在内的任意键




同学实现的代码不是很规范,大家可以先自己尝试实现,再参考网盘上的分步骤代码。

编辑于 2017-02-04

文章被以下专栏收录

    面向C语言初学者,和大家一起step by step地开发出酷炫的2D游戏。培养对C语言的兴趣,实现大代码量的编程,在实践中理解C语言的语法知识。 每次教程前会写上所需的基础语法知识,给出多个步骤的实现目标、相应的参考代码。大家可以先在前一个步骤代码的基础上,自己尝试实现下一个步骤的要求;如果有困难的话,再参考我们给出的代码。