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

时间:2021-08-04 10:30:15

全系列Index:

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

 

本文将确定贪食蛇的具体实现方案,如下几点:

  • 如何根据贪食蛇的表现实现贪食蛇的移动?
  • 如何实现贪食蛇吃到东西后边长?

 

一、如何根据贪食蛇的表现实现贪食蛇的移动?

这里是仅用二维数组和结构体实现贪食蛇的【关键】。我们分头和尾巴两点来看。

头:

输入改变头中的dis变量,头根据当前的dis,决定下一个前进店的坐标,并更新当前头坐标为下一个前进点的坐标,同时把下一个前进点的空格改为'*'。

 

尾:(关键)

将当前尾巴坐标的内容更改为空格,同时更新尾巴坐标为前一段蛇身的坐标。

但是我们这里没有链表,如何寻找前一段蛇身?

 

最初的想法,是检测尾巴当前坐标周围上下左右四个格子,哪个格子是蛇的身体,说明是前一段蛇身。但这明显忽略了'N'这种情况,这种情况下,有两个格子甚至更多都是蛇身,尾巴坐标的更新将会出现错误。

 

那该如何解决?我的办法是:

0、将地图本身也变成结构体,除了char以外,加一个int,记录蛇头进入该坐标的世界,初始化为0。

1、维护一个全局变量count,蛇头每经过一个坐标就把该坐标的int值改变为count,同时count ++。

2、蛇尾如何确定周围的格子哪个是前端蛇身呢?这就简单了,看哪个int小嘛。小的那个int,就是蛇头最早访问的格子,而最早访问的格子肯定就是前一段蛇身。

3、记得更新尾巴坐标时,要把该坐标的int设为初始值哦。

 

二、如何实现贪食蛇吃到东西后边长?

这个就简单了。仅仅【不要更新尾巴坐标】就可以了。

 

全部源代码将在最后一篇博文放出