写在前面
作为初学者,这学期学完了 C 语言,有必要写一款实用的软件,给自己一个交代——而不只是书上 hello world 之类的简单程序。写游戏是一个不错的选择,可以较为综合地运用所学知识,实践是把知识联系起来的最好方式。不喜欢玩游戏,可是写游戏还是很想试一试。
贪吃蛇作为经典游戏,简单好做,是初学者值得尝试的一种游戏。本游戏调用了一些库函数,不熟悉的同学可以自行查阅资料。
本文分为四个部分:游戏分析、程序功能分析、代码实现、总结。
第一部分:游戏分析
贪吃蛇:玩家控制一条每隔一定时间移动一格的蛇,去吃到食物,使蛇增长并得到分数,目标是尽可能获得更多分数。
第二部分:程序功能分析
- 蛇能自动移动,玩家可操作移动方向。
- 食物随机出现在游戏区域的某一位置。
- 打印出字符方块(2×1)作为蛇的一节。
解决方案:
- 调用 Windows API 控制光标移动到指定位置(头文件
windows.h)。 - 随机函数用
rand等函数实现(头文件time.h)。 - 用数组储存蛇每一节的坐标,每刷新一次擦除原来的蛇,然后打印出新的蛇。
第三部分:代码实现
自定义函数一览
头文件与变量声明
蛇结构体声明
main 函数
_xy(int, int) 函数
调用函数 _xy(int, int),可以实现将光标移到指定位置。
game_welcome 函数
game_welcome 函数用于确定游戏初始界面(PS:蛇的图案来自搜狗字画符)。
game_welcome 函数中的循环控制玩家选择开始或者退出。
效果图
game_format 函数
game_format 函数负责游戏数据初始化。
game_control 函数
进入主控函数 game_control()。
在没有输入的情况下,变量 ii 作为标记变量:由于每次主循环的时间为 10 毫秒(通过 Sleep(10) 实现),每次循环 ii 自加 10。当 ii 大于速度变量 speed 后,就打印出自动前进的蛇,ii 初始化为 10。如果主循环不设置间隔时间,CPU 会一直处于高占用状态,游戏速度也无法控制,会局限于每台电脑的配置。
pri_snake 函数
pri_snake 函数的逻辑:先消除原来的蛇,再进行坐标变换,最后输出新的蛇。
坐标变换的情况比较多,这里只举例一种。
pri_food 函数
游戏截图
总结
写程序可以增加所学知识的连贯程度,提高使用熟练度。
写在后面:能力有限,本程序还有很多不足,代码也不够好看。这是第一次写技术类日志,很多地方模模糊糊,望谅解。
其他分享阅读
- 控制台的坦克大战:https://www.oschina.net/code/snippet_1391394_33835
- C++ 版本简易 Flappy Bird:https://www.oschina.net/code/snippet_1391394_34466