【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(三)
全系列Index:
- 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一)
- 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(二)
- 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(三)
- 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(四)
本文将确定贪食蛇的具体实现方案,如下几点:
- 如何根据贪食蛇的表现实现贪食蛇的移动?
- 如何实现贪食蛇吃到东西后边长?
一、如何根据贪食蛇的表现实现贪食蛇的移动?
这里是仅用二维数组和结构体实现贪食蛇的【关键】。我们分头和尾巴两点来看。
头:
输入改变头中的dis变量,头根据当前的dis,决定下一个前进店的坐标,并更新当前头坐标为下一个前进点的坐标,同时把下一个前进点的空格改为'*'。
尾:(关键)
将当前尾巴坐标的内容更改为空格,同时更新尾巴坐标为前一段蛇身的坐标。
但是我们这里没有链表,如何寻找前一段蛇身?
最初的想法,是检测尾巴当前坐标周围上下左右四个格子,哪个格子是蛇的身体,说明是前一段蛇身。但这明显忽略了'N'这种情况,这种情况下,有两个格子甚至更多都是蛇身,尾巴坐标的更新将会出现错误。
那该如何解决?我的办法是:
0、将地图本身也变成结构体,除了char以外,加一个int,记录蛇头进入该坐标的世界,初始化为0。
1、维护一个全局变量count,蛇头每经过一个坐标就把该坐标的int值改变为count,同时count ++。
2、蛇尾如何确定周围的格子哪个是前端蛇身呢?这就简单了,看哪个int小嘛。小的那个int,就是蛇头最早访问的格子,而最早访问的格子肯定就是前一段蛇身。
3、记得更新尾巴坐标时,要把该坐标的int设为初始值哦。
二、如何实现贪食蛇吃到东西后边长?
这个就简单了。仅仅【不要更新尾巴坐标】就可以了。
全部源代码将在最后一篇博文放出
posted on 2014-10-17 15:40 shadowmydx'sLab 阅读(515) 评论(0) 编辑 收藏 举报