去年的算法课设题目,做一个自动寻路的贪吃蛇,要求如下:
- 地图是15*15的矩阵
- 运行时间1min
- 刷新间隔0.01s
- 随机生成食物
- 结束时蛇身长度>=100则满分
自认为做的还不错,现在课也早就结了,就把源码发出来留个纪念,寻路算法用的是A*
算法,GUI库用的是PyQt5
。
因为是很久以前的代码了,那时候我还完全不懂git的美妙之处,版本管理都是徒手用文件系统完成的,所以总共有五个文件:
贪吃蛇_A_Star.py
: 最早写出来的,算法几乎没有完成,经常出现自己走入死路的情况贪吃蛇_A_Star_Plus_loop_bug.py
: 算法基本完成,但仍存在跑着跑着突然只能顺着一条回路不断循环下去的bug,另外发现不知是不是PyQt5
自身问题,运行时严重卡顿,实际上达不到0.01s
刷新一次的速率。贪吃蛇_A_Star_Plus.py
: 解决了循环bug,但卡顿问题仍然存在,并且发现这种“染黑一个格子就算是蛇身”的方法在蛇身变得较长时会导致黑压压一片看不出来哪格跟哪格连着的。贪吃蛇_A_Star_Plus_Beautiful.py
: 为了解决显示问题,改成不论空白背景、蛇身还是食物都用图片来显示;另外,这么做之后,奇迹般地,刷新速度也变快了。这也是我最后打包提交的版本。贪吃蛇_A_Star_Plus_Beautiful_Infinity.py
: 想必大家都见过那个经典的吃满整个屏幕的贪吃蛇动图,我想要测试自己的算法的极限能否达到那个水准,因此有了这个版本。在这个版本中,我取消了时间限制,结果是确实有极高的概率能吃满屏幕,而就算运气不好不能吃满屏的情况,也至少是只剩最后三两个吃不到而已。