2013年,某gif图在百度贴吧和微博引起了疯传。
好吧,就是下面这张。。
观察这个gif,你会发现这个智能蛇,真的很智能,不像我们写的蛇那么地智障。。
我这篇博文,就是来介绍如何才能写出不那么智障的贪吃蛇。
经过这几天的学习,通过学习网上的资料和同学的博客代码(大神就在身边),真的学到了很多东西,在我的粗略划分下,智能贪吃蛇大致可以分为三个流派。
- BFS派
- A*派
- Hamiton派
这三大派,可谓是八仙过海,各显神通,下面我将来介绍这三大门派的特点
1. BFS
首先先来介绍一下BFS派,BFS确实这种寻路问题的好方法,但是贪吃蛇最棘手的问题并不能用最朴素的BFS解决,就是蛇被蛇身或边界困住,这里我们用一点小小的trick。
首先定义四种状态。
第一种,能吃食物,吃完食物后,有路到蛇尾。
第二种,能吃食物,吃完食物后,没有路到蛇尾
第四种,不能吃食物,有路到蛇尾
第三种,不能吃食物,没有路到蛇尾
对于每种状态,都有相应的决策,第一种,直接去吃,第二种,找蛇尾,第三种,找蛇尾,第四种,随便走,虽然没法严格证明,但却能感性的感觉到这些决策都是比较好的。
遵循上面的决策,我们就能吃到很多很多money啦。
2.A*
A*派的关键就在与估价函数上,其实曼哈顿距离也是一种估价方式,当然还有其他估价方式,但最后还是回避不了还是要有一点小trick,才能表现得更好,类似上面的