在写完一条普通的贪吃蛇之后,我们的老师有增大了学习难度,要写出一条“有脑子的”蛇,通过算法,让小蛇具有 “感知 - 决策 - 行动” 的能力。其实,这也是锻炼我们自顶向下分析能力的很好机会。
这一条小蛇可以绕过类似枪一样的障碍物,变得“聪明”,这样子,就能实现一条智能蛇与人力蛇争抢食物,这将又会是人工智能与人的一次大比拼。
首先,利用自顶向下的思想,大致写出这个程序主要部分的伪代码,也就是决定蛇行走的方向函数的伪代码:
// 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]
}
然后是智能蛇的程序框架:
输出字符矩阵
WHILE not 游戏结束 DO
wait(time)
ch=whereGoNext(Hx,Hy,Fx,Fy)
CASE ch DO
‘A’:左前进一步,break
‘D’:右前进一步,break
‘W’:上前进一步,break
‘S’:下前进一步,break
END CASE
输出字符矩阵
END WHILE
输出 The game is over!
最后,再结合之前写的贪吃蛇代码,就能弄出一条智能蛇啦