贪吃蛇AI

用pygame实现的贪吃蛇AI,代码在这里

屏幕快照 2019-07-15 下午11.26.42

使用

1
2
pip3 install requirements.txt
python3 main-bfs2.py

思路

主要是参考这篇 实现贪吃蛇AI,原实现在这里,主要的思路是下面这个图

主要的思路是派出一条假蛇去探路,假蛇吃完食物还能活着,真蛇才会去吃(假蛇吃完食物怎么样算能活,这个比较难判断,我的改动也主要在这里,后面会说)

改动

只是做了一些微小的修改

  1. 把curses改为pygame,界面好看多了
  2. 加了没有什么卵用的类
  3. 假蛇吃到食物之后,怎么算和尾巴之间有通路?
    1. 头和尾相邻算没有通路(原方法),比较保守,走到最后经常会循环起来,不敢吃食
    2. 如果头尾相邻算成有通路,容易在前期就把自己撞死
    3. 没有解决这个问题,加了个判断,蛇默认是保守的,但如果长时间没有吃到食物,就变激进。从测试结果看解决了原有的问题,虽然不优雅

待改进

  1. 这个算法调起来像无底洞,我应该不会再改进这个了,感觉要加逻辑判断的地方很多,应该会有更优雅的实现
  2. 当最后蛇很长的时候,蛇走和食物的最短路径是不合理的,因为走最短路径留下的空隙很可能会被填上食物,还需要绕一大圈才能吃到。应该是到最后,蛇直接一排一排地扫,反而是最快的