介绍
使用C语言如何实现一个贪吃蛇小游戏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强> 1,控制台窗口强>
控制台窗口每一个位置都有它的坐标,且坐标系如下图所示(随箭头方向坐标逐渐增大),
<强> 2,通过代码将光标移动到控制台指定位置强>
这里用到了C语言windows编程中句柄的概念,不知道的可以百度。实在不会也没关系,可以当做一个函数模板来使用,无需做太多了解。
# include & lt; stdio.h> # include & lt; Windows.h> ,//将光标移动到控制台的(x, y)坐标点处 void gotoxy (int x,, int y) { ,COORD coord;=,coord.X x; y=, coord.Y ; ,SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE), coord); } , int main () { 15,gotoxy(50);//将光标移动到控制台的(50,15)处 ,printf (“Hello 世界\ n"); ,系统(“pause"); ,return 0; }
从运行结果可以看的到,程序在指定位置输出了待输出的内容。
<强>三,程序框架强>
1,定义相关头文件
2,定义函数结构以及相关属性
3,完成各代码块
<强>四,具体操作强>
1,定义相关头文件
本程序所用到的头文件如下所示
# include & lt; stdio.h> # include & lt; stdlib.h> # include & lt; Windows.h>//windows编程头文件 # include & lt; time.h> # include & lt; conio.h>//控制台输入输出头文件
2,定义函数结构以及相关属性
首先需要确定游戏的边框大小
# define SNAKESIZE 100//蛇的身体最大节数 # define MAPWIDTH 118年,//宽度 29 # define MAPHEIGHT //高度
其次要定义食物的坐标,以及蛇自身的相关属性
//食物的坐标 struct { ,int x; ,int y; }食物; ,//蛇的相关属性 struct { ,int 速度;//蛇移动的速度 ,int len;//蛇的长度 ,int x [SNAKESIZE];//组成蛇身的每一个小方块中x的坐标 ,int y (SNAKESIZE);//组成蛇身的每一个小方块中y的坐标 , }蛇;
这里蛇的身体由一节一节的小方块■组成,将蛇的身体每一节的小方块所在的位置用一个数组来存储起来,方便以后操作。
确定游戏所用到的几个函数块。
//绘制游戏边框 void drawMap ();//随机生成食物 void createFood ();//按键操作 void keyDown ();//蛇的状态 bool snakeStatus ();//从控制台移动光标 void gotoxy (int x,, int y);
最后定义几个全局变量
int key =, 72;//表示蛇移动的方向,72为按下“↑”所代表的数字 ,//用来判断蛇是否吃掉了食物,这一步很重要,涉及到是否会有蛇身移动的效果以及蛇身增长的效果 int changeFlag =, 0; , int sorce =, 0;//记录玩家的得分
<强>五,完成各代码块强>
1,实现将光标移到指定位置的操作
//将控制台光标移到(x, y)处 void gotoxy (int x,, int y) { ,COORD coord;=,coord.X x; y=, coord.Y ; ,SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE), coord); }
2,打印游戏边框以及游戏初始画面
一个小方块字符■在x方向上占用两个位置,在y方向上占用一个位置。每一节蛇身由一个小方块构成。
void drawMap () { ,//打印上下边框 ,for (int 小姐:=,0;,小姐:& lt;=, MAPWIDTH;,小姐:+=,2)//i +=2是因为横向占用的是两个位置 ,{ ,//将光标移动依次到(0)我处打印上边框 ,gotoxy(我,,0); ,printf (“■“); ,//将光标移动依次到(我MAPHEIGHT)处打印下边框 ,gotoxy(我,MAPHEIGHT); ,printf (“■“); ,} , ,//打印左右边框 ,for (int 小姐:=,1;,小姐:& lt;, MAPHEIGHT;,我+ +) ,{ ,//将光标移动依次到(0,1)处打印左边框 ,gotoxy(0,,我); ,printf (“■“); ,//将光标移动依次到(MAPWIDTH, i)处打印左边框 ,gotoxy (MAPWIDTH,,我); ,printf (“■“); ,} , ,//随机生成初试食物 ,while (1) ,{ ,将srand ((unsigned int)时间(NULL));=,,food.x  rand (), %, (MAPWIDTH 安康;4),+,2;=,,food.y  rand (), %, (MAPHEIGHT 安康;2),+,1; ,//生成的食物横坐标的奇偶必须和初试时蛇头所在坐标的奇偶一致,因为一个字符占两个字节位置,若不一致 ,//会导致吃食物的时候只吃到一半 %,if (food.x 2,==, 0) ,打破; ,} ,//将光标移到食物的坐标处打印食物 ,gotoxy (food.x, food.y); ,printf (“★”); , ,//初始化蛇的属性=,snake.len 3;=,snake.speed 200; , ,//在屏幕中间生成蛇的头 ,snake.x [0],=, MAPWIDTH /, 2, +, 1;//x坐标为偶数 ,snake.y [0],=, MAPHEIGHT /, 2; ,//打印蛇的头 ,gotoxy (snake.x [0],, snake.y [0]); ,printf (“■“); , ,//生成初试的蛇身 ,for (int 小姐:=,1;,小姐:& lt;, snake.len;,我+ +) ,{ ,//蛇身的打印,纵坐标不变,横坐标为上一节蛇身的坐标值+ 2 ,snake.x[我],=,snake.x[小姐,安康;1],+,2; ,snake.y[我],=,snake.y[小姐,安康;1]; ,gotoxy (snake.x[我],snake.y[我]); ,printf (“■“); ,} ,//打印完蛇身后将光标移到屏幕最上方,避免光标在蛇身处一直闪烁 ,gotoxy (MAPWIDTH 作用;2,0); ,返回; }使用C语言如何实现一个贪吃蛇小游戏