B.A.K.A. 智能贪吃蛇

B.A.K.A. Automatic Kinetic AI

能不能让电脑自主游玩贪吃蛇?答案是肯定的。

为此,我在上一篇博客里所构建的贪吃蛇框架上,外置了一个AI。这个AI可以让蛇自动运动,所以我将它命名为B.A.K.A. AI。

算法思想

一个稳赚不陪的思想是绕圈。绕圈听上去简单,但事实上是有学问的。每个格子的遍历实际上是一个求哈密顿圈的问题,然而这个问题是NP的。不过,在这里的特殊情况下我们可以提炼出一套遍历的方法。

对于两条边长度都是偶数的图,我们总能可以按照如下方式绕圈:

具体而言,用伪代码可以提炼如下:

IF (蛇头在第一行)
  IF (蛇头在最后一列)
    向下走一步
  ELSE
    向右走一步
  ENDIF
ELSE
  IF (蛇头在第一列)
    向上走一步
  ELSE IF (蛇头在奇数列)
    IF (蛇头在第二行)
      向左走一步
    ELSE
      向上走一步
    ENDIF
  ELSE
    IF (蛇头在最后一行)
      向左走一步
    ELSE
      向下走一步
    ENDIF
  ENDIF
ENDIF

这样就可以达到遍历全图的效果。

对于有一条边是奇数的图,我们还可以这样遍历:

但是,如果两条边都是奇数,则不可能遍历。

例如如下的5x5方格图,我们可以对其如下染色:

在黑色格子上只能走到白色格子;在白色格子上只能走到黑色格子。

假如我们一开始在黑色格子上,那么走一步就会在白色格子上;走两步黑色格子;走三步白色……归纳可以得到走了25步后,它应该在白色的格子上。

但是另一方面,走了25步后应当把全部格子全部走遍回到初始格子,初始格子是黑色的。这样就导致了矛盾。

这还能算得上是AI吗?!

这个算法是可以优化的。比如说,在开始的一段时间内我们完全没有必要还绕圈,可以直接走向食物。然而目前我还没有实现。

有朝一日如果实现了,我一定要将它命名为"supa-B.A.K.A. AI"

(完?)



CC-BY-SA 3.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值