写在前面

作为初学者,这学期学完了 C 语言,有必要写一款实用的软件,给自己一个交代——而不只是书上 hello world 之类的简单程序。写游戏是一个不错的选择,可以较为综合地运用所学知识,实践是把知识联系起来的最好方式。不喜欢玩游戏,可是写游戏还是很想试一试。

贪吃蛇作为经典游戏,简单好做,是初学者值得尝试的一种游戏。本游戏调用了一些库函数,不熟悉的同学可以自行查阅资料。

本文分为四个部分:游戏分析、程序功能分析、代码实现、总结。

第一部分:游戏分析

贪吃蛇:玩家控制一条每隔一定时间移动一格的蛇,去吃到食物,使蛇增长并得到分数,目标是尽可能获得更多分数。

第二部分:程序功能分析

  1. 蛇能自动移动,玩家可操作移动方向。
  2. 食物随机出现在游戏区域的某一位置。
  3. 打印出字符方块(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 函数

游戏截图

总结

写程序可以增加所学知识的连贯程度,提高使用熟练度。

写在后面:能力有限,本程序还有很多不足,代码也不够好看。这是第一次写技术类日志,很多地方模模糊糊,望谅解。

其他分享阅读