字符游戏-智能蛇

顾名思义,智能蛇是一条可以自己思考、判断并作出决定的蛇。

首先看看智能蛇的程序框架:
输出字符矩阵
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
输出 Game Over!!!

接着是决定蛇行走的方向函数的伪代码:
// 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]
}

对地图做修改,用‘0’代表障碍物
这里写图片描述

增加的函数
char move(int Hx, int Hy, int Fx, int Fy) {
char movable[4] = { ‘w’,’a’,’s’,’d’ };
int distance[4] = { 0 };
int i, min = 0;
if (map[Hx-1][Hy] != WALL_CELL && map[Hx-1][Hy] != SNAKE_BODY && map[Hx-1][Hy] != ‘0’)
distance[0] = abs(Fx - (Hx-1)) + abs(Fy - Hy);
else
distance[0] = 9999;
if (map[Hx][Hy-1]!=WALL_CELL && map[Hx][Hy-1] != SNAKE_BODY&&map[Hx][Hy-1] != ‘0’)
distance[1] = abs(Fx - Hx) + abs(Fy - (Hy-1));
else
distance[1] = 9999;
if (map[Hx+1][Hy]!=WALL_CELL && map[Hx+1][Hy] != SNAKE_BODY && map[Hx+1][Hy] != ‘0’)
distance[2] = abs(Fx - (Hx+1)) + abs(Fy - Hy);
else
distance[2] = 9999;
if (map[Hx][Hy+1] !=WALL_CELL && map[Hx][Hy+1] != SNAKE_BODY && map[Hx][Hy+1] != ‘0’)
distance[3] = abs(Fx - Hx) + abs(Fy - (Hy+1));
else
distance[3] = 9999;
for (i = 0; i < 4; i++)
if (distance[i] < distance[min]&&distance[i]!=9999)
min = i;
return movable[min];
}

运行
这里写图片描述

虽说是智能蛇,但还是会做出一些“智障”的决定。所以,还需要学习更先进的算法,来让智能蛇在这个游戏中做到完美。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值