相关文件
关注小编,私信小编可以领取源码哟~~
当然别忘了一键三连哟!!!
开发工具
Python版本:3.6.4
相关模块:
pygame模块;
以及一些python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
原理介绍
贪吃蛇小游戏的代码实现参见:
参照上期贪吃蛇文章:
贪吃蛇基础版本
这里我们主要讲如何设计算法来自动玩贪吃蛇小游戏。先来简单介绍一下哈密顿环的定义(引自维基百科):
哈密顿图是一个无向图,由哈密顿爵士提出, 由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。 在图论中是指含有哈密顿回路的图,
闭合的哈密顿路径称作哈密顿回路(Hamiltonian cycle), 含有图中所有顶点的路径称作哈密顿路径 (英语:Hamiltonian
path,或Traceable path)。 哈密尔顿图的定义:G=(V,E)是一个图, 若G中一条通路通过且仅通过每一个顶点一次,
称这条通路为哈密尔顿通路。 若G中一个圈通过且仅通过每一个顶点一次,称这个圈为哈密尔顿圈。 若一个图存在哈密尔顿圈,就称为哈密尔顿图。
举个例子,有一个4*4的地图:

那么哈密顿环就可以是(不唯一):

通过构造哈密顿环,我们就可以很轻松地保证蛇在运动的过程中不会因为撞到自己而死掉。举个例子,假设格子0,1,2是我们的贪吃蛇,其中2为蛇头,0为蛇尾,其余为蛇身,则我们可以通过以下算法来构造哈密顿环(图源参考文献[1]):

注意,该算法并不是用来找哈密顿环的通用算法,因此存在找不到哈密顿环的情况(为了提高算法找到哈密顿环的概率,我们把原版游戏地图里的4025个方格改成了2020个方格)。
具体而言,该算法的代码实现如下:
'''check boundary'''
def checkboundary(self, pos):
if pos[0] < 0 or pos[1] < 0 or pos[0] >= self.num_cols or pos[1] >= self.num_rows:
return False
return True
'''the shortest'''
def shortest(self, wall, head, food):
wait = OrderedDict()
node, pre = head, (-1, -1)
wait[node] = pre
path = {
}
while wait:
node, pre = wait.popitem(last=False)
path[node] = pre
if node == food:
break
if pre in path:
prepre = path[pre]
direction = (pre[0]-prepre[0], pre[1]-prepre[1])
if (direction in self.directions) and (direction != self.directions[0]):
self.directions.remove(direction)
self.directions

本文介绍了使用Python和哈密顿环算法实现自动玩贪吃蛇游戏的方法。通过构建哈密顿环确保蛇不会自我碰撞,并优化路径找到食物。文章提供相关代码资源,展示了自动贪吃蛇的游戏效果。
最低0.47元/天 解锁文章
2441





