贪吃蛇(C语言)
关于游戏
我在实现这个游戏时将其分为了三个部分
1.gameBegin(游戏开始):包括准备界面prepareUI()函数,设置光标不可见invisibleCursor函数,设置游戏界面gameUI函数,初始化蛇intialSnake函数,初始化食物initalFood函数 。2.gameProcess(游戏进行):包括创建身体结点createSnakeBody
函数,创建食物createFood函数,蛇身体移动moveSnake函数,打印蛇、食物以及界面showSnake函数,判断游戏是否结束judgGame函数,记录分数recordScore函数。3.gameEnd(游戏结束):包括游戏结束更新排行榜updateRanking函数,游戏结束界面endUI函数。
结构体设置
我在实现游戏时用到了三个结构体,分别来表示蛇,食物和排行榜 。蛇的结构体我使用了链表结构,在实现游戏的同时我也对链表的操作进行了练习。
typedef struct {
char bodylook; //蛇身样式
int x; //蛇身结点的x坐标
int y; //蛇身结点的y坐标
int motionNum; //蛇身结点的当前运动方向
struct SnakeBody *next; //指向下一蛇身结点
struct SnakeBody *pre; //指向前驱结点
}SnakeBody;
typedef struct {
int x; //食物的x坐标
int y; //食物的y坐标
}Food;
typedef struct {
int score; //分数
char *name; //姓名
}RankList;
游戏难点
总的来说贪吃蛇这个游戏比较简单,我在实现这个游戏时主要用到了控制台光标的控制,设置光标信息来打印蛇,用system(“cls”)清屏来实现动画效果。
这个游戏唯一的难点在于蛇的移动,控制和打印
移动:蛇的移动每单位时间整体向前移动一个单位,用蛇头的motionNum来控制蛇的移动方向。每单位时间从蛇尾结点开始遍历蛇身,当前结点的x、y值等于前一个蛇身结点的x、y值,最后蛇头结点按照运动方向向前移动一个单位控制:如果单一使用getch()函数来对蛇进行控制,在你不按下按钮的时候程序无法向下执行。所以可以使用_kbhit()函数来实现蛇的控制。
if (_kbhit()) { ch = _getch(); }
按下按钮_kbhit()返回值为1,然后对ch进行赋值。
打印:我在这里使用了控制台光标的相关知识,不了解的朋友可以参考一下我的上一篇分享http://blog.csdn.net/Caramelsa/article/details/78507475
总的来说就是设置光标的位置,然后打印。
游戏截图
写在最后:这个游戏大体上来说完成了整个游戏过程,但在细节上还存在许多小瑕疵。博主也是刚开始自学编程,不足的地方希望大家能够提出,大家共同进步。
游戏的源码大概400多行,比较多,就不在这里放出了,(>人<;)恬不知耻的贴出自己的GitHub地址,这个游戏的源码就在上面(逃
https://github.com/Joezeo/CodesRepositoryII/blob/master/C_snake/C_snake/C_snake.c