C语言结构数组实现贪吃蛇小游戏

  

<强>一、设计思路

  

蛇身本质上就是个结构数组,数组里存储了坐标x, y的值,再通过一个循环把它打印出来,蛇的移动则是不断地刷新重新打印,所以撞墙,咬到自己只是数组x, y值的简单比较。

  

<强>二,用上的知识点

  

结构数组Windows API函数

  

<强>三,具体实现

  

先来实现静态页面,把地图,初始蛇身,食物搞定。

  

这里需要用到Windows API的知识,也就是对控制台上坐标的修改

     //这段代码来自参考1   空白Pos (int x, int y)   {   COORD pos;   处理hOutput;   pos.X=x;   pos.Y=y;   hOutput=GetStdHandle (STD_OUTPUT_HANDLE);   SetConsoleCursorPosition (hOutput pos);   }      之前      

COORD是Windows API中定义的一种结构,表示在控制台上的坐标

        typedef struct _COORD {   短X;//水平坐标   短Y;//垂直坐标   }COORD;      

而代码中第七行则是获得屏幕缓冲区的句柄,第八行是直接修改光标位置的函数。

  

1。地图。

  

有了Pos()函数,打印一个框就不是问题了。假如我们用“-”作为上下边框,把“|”作为左右边框,这看起来没什么不妥,但其实我们已经掉进了坑里,直接上代码及实际效果图吧。

     //长==60//宽度==30   空白CreateMap ()   {   int我;   (i=0; i<长;我+ +)//上下两行   {   Pos(我,1);   printf (“-”);   Pos(我、宽度);   printf (“-”);   }   (我=2;i<宽度;我+ +)//左右两列   {   Pos (0, 1);   printf (“|”);   Pos(长1,);   printf (“|”);   }   }         之前      

 C语言结构数组实现贪吃蛇小游戏

  

发现了问题吗?这是一条正常的蛇,那为什么看起来不正常呢?我们把边框都换成“#”来看看…

  

 C语言结构数组实现贪吃蛇小游戏

  

这就清楚多了啊,要知道我们上下边框可是各有60个“#”的,长60宽30的长方形输出之后竟然成了个正方形。

  

原因在这

  

 C语言结构数组实现贪吃蛇小游戏

  

控制台上每个字符的长宽比例(像素点)是不同的,所以才会出现上图这种蛋疼的情况。

  

解决方法其实也很简单,我们需要引入一些特殊符号,比如“●”“■”“⊙”等,这些字符的特点是它占据两个普通字符的位置

  

所以上下边框就有60/2=30个符号,要让它仍然是个正方形的话,左右也可以设为30(28 + 2)个符号。

  

代码及效果图如下

        空白CreateMap ()   {   int我;   (i=0; i<长;我+=2)   {   Pos (0);   printf (“■”);   Pos(我、宽度);   printf (“■”);   }   (i=1; i<宽度;我+ +)   {   Pos (0, 1);   printf (“■”);   Pos(长2,我);   printf (“■”);   }   }      之前      

 C语言结构数组实现贪吃蛇小游戏

  

这样看就舒服多了,不过也让复杂度提升了一些,上边框每个符号的坐标分别是(0,0)(2,0)(4 0)…(2 * 2,0)这个在蛇的移动及食物的模块再提。

  

<强> 2。初始化一条蛇
  

  

因为蛇以及食物本质上都是一个坐标,所以我们可以定义一个新的数据类型节点,每一个节点都是一个存储了两个变量(x, y)的结构体,再通过节点来定义蛇和食物。

        typedef结构节点{   int x;   int y;   }节点;         节点蛇[60];   之前      

好了,我们现在定义了一条叫蛇的蛇。为了这条蛇肥胖适中长宽比例一致,我们用“⊙”代表蛇的每一节。刚开始我们令蛇出现在地图中间位置,蛇头在右,共3个节点,所以我们需要求得每个节点的坐标。

        空白InitializeSnake ()   {   int我;   (i=0; i<3,我+ +)   {   蛇[我]。x=(长/2 i * 2);//(30日15)(28日15)(26日15)   蛇[我]。y=宽/2;   Pos(蛇[我]。x,蛇[我].y);   printf (“⊙”);   }   }   

C语言结构数组实现贪吃蛇小游戏