如何用Python写一个贪吃蛇?
作者:Hawstein
http://hawstein.com/2013/04/15/snake-ai/
前言
语言选择
最初版本
1
2
在一个矩形中,每一时刻有一个食物,贪吃蛇要在不撞到自己的条件下,
找到一条路(未必要最优),然后沿着这条路运行,去享用它的美食
BFS
DFS
A*
BFS+Wander
1
2
3
4
5
while 没有按下ESC键:
if 蛇与食物间有路径:
走起,吃食物去
else:
Wander一段时间
高瞻远瞩版本
蛇和食物间有路径直接就去吃,不可取。那该怎么办?
如果蛇去吃食物后,布局是安全的,是否就直接去吃?(这样最优吗?)
怎样定义布局是否安全?
蛇和食物之间如果没有路径,怎么办?
最短路径是否最优?(这个明显不是了)
那么,如果布局安全的情况下,最短路径是否最优?
除了最短路径,我们还可以怎么走?S形?最长?
怎么应对蛇身越来越长这个问题?
食物是随机出现的,有没可能出现无解的布局?
暴力法(brute force)能否得到最优序列?(让贪吃蛇尽可能地多吃食物)
1
2
3
4
5
6
7
# # # # # # #
# 0 1 2 3 4 #
# 1 2 3 # 5 #
# 2 3 4 - 6 #
# 3 + * * 7 #
# 4 5 6 7 8 #
# # # # # # #
1
2
1. 目标是食物时,走最短路径
2. 目标是蛇尾时,走最长路径
1
2
3
4
5
6
7
# # # # # # #
# * * * * * #
# * * - 0 * #
# * * # + * #
# * * * * * #
# * * * * * #
# # # # # # #
1
2
3
4
5
6
7
# # # # # # #
# * * * * * #
# * * - + * #
# * * # * * #
# * * * * * #
# * * * * * #
# # # # # # #
1
convert output.gif -fuzz 10% -layers Optimize optimised.gif
Last but not least
推荐阅读 关于 Python 3.9,那些你不知道的事
总结了 90 条写 Python 程序的建议
关注「Python 知识大全」,做全栈开发工程师 岁月有你 惜惜相处
评论