【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(二)

时间:2021-07-19 10:29:36

全系列Index:

  1. 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一)
  2. 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(二)
  3. 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(三)
  4. 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(四)

 

本文将分析贪食蛇游戏的基本结构。

 

根据上一篇文章的分析,我们需要确定以下几个点:

  • 什么是贪食蛇游戏的输入?如何获取贪食蛇的输入?
  • 我们如何表示贪食蛇的地图以及贪食蛇的食物?
  • 最为关键的,我们如何表示贪食蛇?
  • 游戏如何得分?
  • 游戏如何结束?

 一、什么是贪食蛇的输入?如何获取贪食蛇的输入?

最基本的应该有四个输入,分别控制贪食蛇向上、下、左、右四个方向运动。

输入自然就是来自键盘。具体哪个键,就取决于你如何定义了。

注意:我们需要侦测键盘被按下的事件,进而判断输入的字符是否是我们定义的按键。

在windows平台下,conio.h头文件中,有一个kbhit()函数,功能是检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。我们可以用来配合getch()来获取用户的输入并加以判断。

 

二、我们如何表示贪食蛇的地图以及贪食蛇的食物?

我们可以用一个填满空格的char型二维数组来表示贪食蛇的地图,用一个你喜欢的字符来表示食物,比如'#'。注意:食物有他的坐标,需要一个结构体来承担。

 

三、我们如何表示贪食蛇?

首先,我们选择用'*'号来表示蛇的身体。

我们只需要两个元素,就可以定位一个贪食蛇。一个是贪食蛇的蛇头,我们用来控制贪食蛇的运动方向,而判断贪食蛇是否触壁死亡、触身死亡 、吃到食物,凭借贪食蛇蛇头和当前坐标内储存的字符就足够了。

其次是贪食蛇的蛇尾,我们只需要维护一个蛇尾,正确的跟随蛇头变化,就可以做出贪食蛇的移动,同时仅凭蛇尾,我们就能做出蛇吃到东西变大的效果

 

具体代码

 1 struct SnakeTail
 2 {
 3        int x;
 4        int y;
 5 };
 6 struct SnakeHead
 7 {
 8        int x;
 9        int y;
10        int dis;
11 };
12 struct Food
13 {
14        int x;
15        int y;
16 };

 

 四、游戏如何得分?

吃到食物,然后给食物一个新的随机坐标

 

五、游戏如何结束?

贪食蛇死亡为止。

碰到地图边缘、碰到自己身体。

 

(待续)