自己玩贪吃蛇真的是累
为什么不写个自动的蛇呢?
1. 构思
如何让贪吃蛇自己寻路呢?
第一反应肯定是让蛇自己找最近的路
于是就有了个决定方向的伪代码
Hx,Hy: 头的位置
Fx,Fy:食物的位置
function whereGoNext(Hx,Hy,Fx,Fy) {
用数组movable[3]={“a”,”d”,”w”,”s”} 记录可走的方向
用数组distance[3]={0,0,0,0} 记录离食物的距离
分别计算蛇头周边四个位置到食物的距离。H头的位置,F食物位置
例如:假设输入”a” 则distance[0] = |Fx – (Hx-1)| + |Fy – Hy|
如果 Hx-1,Hy 位置不是Blank,则 distance[0] = 9999
选择distance中存最小距离的下标p,注意最小距离不能是9999
返回 movable[p]
}
但是这样蛇就只会一直找最短路
很容易把自己坑死
2. 改进
我们要避免贪吃蛇自己绕死
所以要判断现在的情况是不是“安全”的
什么情况是安全的呢?
可以理解为
蛇头有路径到蛇尾
那如果是不安全的情况怎么办
这个时候蛇头和蛇尾在两个隔开的空间里
我们就要在蛇头判断一个走的最深的路径
一直走直到再次安全
输出字符矩阵
WHILE not 游戏结束 DO
wait(time)
IF safe() THEN
ch=whereGoNext(Hx,Hy,Fx,Fy)
ELSE THEN
ch=mostdeep()
CASE ch DO
‘A’:左前进一步,break
‘D’:右前进一步,break
‘W’:上前进一步,break
‘S’:下前进一步,break
END CASE
输出字符矩阵
END WHILE
输出 Game Over!!!
这样子就会改进很多
蛇也可以走更多步了
3. What else
其实
如果地图规模不是奇数*奇数的话
可以写一个s型的“智障蛇”
一定可以铺满地图哦
当然
最终的目标是做成这样的
当然我还做不到。。。