something关于智能蛇

之前已经写了贪吃蛇,今天的作业是智能蛇。
认真说起来其实两者差不多,只不过智能蛇更聪明一点,可以自己找到路线罢了。
两者的主要不同,也是智能蛇的主要难点在于以下两点

1 每秒钟清屏并且 printf
2 蛇自动寻找路线,能吃到食物并且不会与蛇身相撞

第一点其实也不难
system ( “cls” ); 就能做到清屏;
而unistd.h 头文件下有一个叫做sleep的函数sleep();可以使系统按照你想要的定时地打印
值得注意的地方是括号里面的单位是毫秒。
比如说
sleep(1000);
prinitf(“hello , c”);
每秒钟系统就会打印一次 hello , c。
而蛇怎么自动找食物并且避免与蛇身相撞呢?

第二点就有些复杂了
关于怎样使得智能蛇自己寻找合适的路线这一点其实有很多种算法,也有在不同情况选择不同走法的精妙方案,本人比较小白,所以在网上查了些资料,大致的想法其实就是
1 根据食物位置确定总体方向。
2 依据算法决定最短路线

而路线的决定其实是最复杂的地方
我们可以先分析贪吃蛇游戏进行过程中会遇到一些怎么的情况:
蛇头能直接无障碍地找到食物
蛇头不能直接无障碍地找到食物,但能无障碍地找到蛇尾
蛇头不能找到蛇尾也不能找到食物

伪代码大概就是这样子
// 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值