Python自动版的贪吃蛇这不就来了嘛?借助哈密顿环实现效果

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

相关文件

关注小编,私信小编可以领取源码哟~~
当然别忘了一键三连哟!!!

开发工具

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
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值