python游戏程序编码_python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)...

最近研究了下迷宫的生成算法,然后做了个简单的在线迷宫游戏。游戏地址和对应的开源项目地址可以通过上面的链接找到。开源项目中没有包含服务端的代码,因为服务端的代码实在太简单了。下面将简单的介绍下随机迷宫的生成算法。一旦理解后你会发现这个算法到底有多简单。

1.将迷宫地图分成多个房间,每个房间都有四面墙。

2.让“人”从地图任意一点A出发,开始在迷宫里游荡。从A房间的1/2/3/4个方向中的任选一个方向前进。在从A房间走到B房间的过程中,推倒A/B房间之间的墙。

3.如果方向x对面的房间已经走过,则选择其他方向。如果所有方向的房间都已经走过,则退回上一个房间看是否还有可选道路。

4.走到真正无路可走时,说明已经走过了所有房间,迷宫也生成好了。

下面是该算法的python实现(核心部分)

def gen_map(self,max_x=10,max_y=10):

""" 生成迷宫 """

self.max_x,self.max_y = max_x,max_y # 设置地图大小

self.mmap = [[None for j in range(self.max_y)] for i in range(self.max_x)] # 生成原始地图

self.solution = [] # 迷宫解法

block_stack = [Block(self,0)] # 从0,0开始生成迷宫(同时将这点作为起点),将起点放到栈里

while block_stack:

block = block_stack.pop() #取出当前所在的房间

next_block = block.get_next_block() # 获取下一个要去的房间

if next_block: # 如果成功获取下一走发,将走过的房间放回到栈里

block_stack.append(block)

block_stack.append(next_block)

if next_block.x == self.max_x - 1 and next_block.y == self.max_y - 1: # 走到终点了,栈里的路径就是解法

for o in block_stack:

self.solution.append((o.x,o.y))

def get_next_block_pos(self,direction):

""" 获取指定方向的房间号 """

x = self.x

y = self.y

if direction == 0: # Top

y -= 1

elif direction == 1: # Right

x += 1

if direction == 2: # Bottom

y += 1

if direction == 3: # Left

x -= 1

return x,y

def get_next_block(self):

""" 获取下一要去的房间 """

directions = list(range(4))

random.shuffle(directions) # 随机获取一个要去的方向

for direction in directions:

x,y = self.get_next_block_pos(direction)

if x >= self.mmap.max_x or x < 0 or y >= self.mmap.max_y or y < 0: # 房间号在许可范围内

continue

if self.mmap.mmap[x][y]: # 如果已经走过

continue

self.walls[direction] = False

return Block(self.mmap,x,y,direction)

return None # 没找到有可用的房间

注: 由于采用该方法生成的迷宫道路的分支数量并不是太多,coffeescript版在生成迷宫的过程中增加了随机处理,对应算法也稍微复杂一点点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cesium等高线_Cesium专栏-气象站点色斑图、等值线图(不提供源码)

Cesium 是一款面向三维地球和地图的&#xff0c;世界级的JavaScript开源产品。它提供了基于JavaScript语言的开发包&#xff0c;方便用户快速搭建一款零插件的虚拟地球Web应用&#xff0c;并在性能&#xff0c;精度&#xff0c;渲染质量以及多平台&#xff0c;易用性上都有高质…

为什么OC语言很难

作为一个Objective-C的coder&#xff0c;我总能听到一部分人在这门语言上抱怨有很多问题。他们总在想快速学习这门语言来写一个App出来&#xff0c;但他们也总是联想到Objective-C看上去实在太难了或者在想这些语法符号都是神马玩意&#xff1f;不错&#xff0c;他们问得非常好…

小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法

最新版2.6.7版下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 很多会员在上传小程序前端时经常出现首页无法打开的情况&#xff0c;错误提示无法打开该页面&#xff0c;不支持打开&#xff0c;这种问题其实就是权限问题&#xff0c;页面是通过调用web-v…

http status 404 – 未找到_从零开始搭建自己的网站004添加404处理页面

在将web-war上传到服务器并重启tomcat后&#xff0c;发现找不到login页面目录结构&#xff1a;add exception do wth page2.添加页面内容&#xff1b;到w404.jsp异常处理&#xff0c;404首页 Home (current) Link Dropdown Action Another action Disabled Search 百度百科&am…

dw怎么打开html模板,Dreamweaver中如何使用模板

随着Internet的普及&#xff0c;很多人已经不满足于仅仅上网冲浪&#xff0c;而希望深入地参与其中。现在&#xff0c;拥有自己的Web网站已经成为一种潮流。虽然制作一个简单的网页并不困难&#xff0c;但是制作出超凡脱俗的网站就不那么容易了。下面是小编为大家带来的关于Dre…

云计算的认识和看法_云存储已经成为存储的未来,你的存储跟上节奏了吗?

云计算是目前业界最关注的话题&#xff0c;其实云计算让很多人云里雾里。而云存储则是存储的未来。云存储这个概念的出现&#xff0c;在一定程度上改变了我们对于传统存储模式的看法。但是云存储想必让很多人迷惑&#xff0c;今天我们就来聊聊云存储的那些事儿。对于一些计算机…

coco2dx c++ HTTP实现

coco2dx c HTTP实现 达到的结果如下面的 iPhone截图 android 日志截图 流程图例如以下 功能主要通过CURL c pthread 实现 我实现的不是多线程断点&#xff08;假设要实现能够依据我这个进行加入任务序列&#xff0c;可參考 cocos2d-x 中AssetsManager的实现&#xff0c;事实上…

计算机动画 应用,计算机动画与应用.PDF

计算机动画与应用.PDF三维计算机动画金小刚Email: jin浙江大学CAD&CG 国家重点实验室紫金港校区蒙民伟楼512Course web: /home/jin/animation.htmXiaogang Jin 1 2/28/2017ModelingRenderingAnimation计算机图形 User Interface虚拟世界Xiaogang Jin 2 2/28/2017Pixar片头X…

idea怎么使用断点调试js_idea怎么使用断点调试js

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":10,"count":10}]},"card":[{"des":"刷脸门禁通行系统前端接入人脸AI赋能的人脸…

常量池在堆还是方法区_第九章_方法区

方法区栈、堆、方法区的交互关系这次所讲述的是运行时数据区的最后一个部分——方法区从线程共享与否的角度来看ThreadLocal&#xff1a;如何保证多个线程在并发环境下的安全性&#xff1f;典型应用就是数据库连接管理&#xff0c;以及会话管理栈、堆、方法区的交互关系下面就涉…

html5表单密码验证及提示,HTML5表单及其验证(示例代码)

1.输入型控件Input type用途说明email电子邮件地址文本框url网页URL文本框number数值的输入域属性 值 描述max number 规定允许的最大值min number 规定允许的最小值step number 规定合法的数字间隔(如果 step"3"&#xff0c;则合法的数是 -3,0,3,6 等)value number …

3.6.4python下载安装教程_python 3.6.4安装教程

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

CTabCtrl控件标签的相关设置

原文链接: http://blog.csdn.net/happyhell/article/details/6012177 1、 获得CTabCtrl标签高度&#xff1a;CRect rc; CTabCtrl *pTabCtrl GetTabControl(); pTabCtrl->GetItemRect(&rc); int nHeight rc.Height(); 2、修改CTabCtrl标签上的文字&#xff1a; // In t…

python人工智能原理及其应用_人工智能原理与实践:基于Python语言和TensorFlow

基 础 篇 第1章 绪论 1 1&#xff0e;1 人工智能简介 1 1&#xff0e;1&#xff0e;1 人工智能的概念 1 1&#xff0e;1&#xff0e;2 现代人工智能的兴起 5 1&#xff0e;1&#xff0e;3 人工智能的学术流派 5 1&#xff0e;2 人工智能的发展历史 8 1&#xff0…

html a 点击防止刷新,a标签点击跳转页面不刷新的问题

作为一位前端新手,刚接触移动端开发不久,遇到的问题真的是一个接着一个...前面写好了几个页面,今天试着将各个页面的链接打通,然后问题就来了...(╯︵╰)这里看一下原来想要实现的两个页面跳转的效果--点击图一标注的栏目可以跳转到一个新的页面图二...按照之前写a标签的跳转链…

不显示表头_技术干货 | 基于数模混合型SoC实现的两线制高精度无源表头方案

摘要&#xff1a;针对传统的两线制表头在高低温环境下测量精度差、温漂大的特点&#xff0c;现提出一种可满足高低温环境使用需求的两线制高精度数显表头设计方案&#xff0c;此方案在高低温环境下测量精度高、工作稳定、抗干扰能力强。引言随着仪表技术和低功耗技术的发展&…

python gui开发_python 开发GUI应用之Dabo

这几天在研究用python开发GUI应用程序&#xff0c;首先选择了wxpython&#xff0c;英文书籍wxpython in action是不错的&#xff0c;网上也有中文版。 在win7下安装python2.7&#xff0c;wxpython2.8.12.1,来个HelloWorld&#xff0c;照着教程一点不成问题。 我为了能够快速开发…

maven2-snapshot快照库和release发布库的应用

在项目中应用snapshot和release库&#xff0c;应用snapshot和release库达到不同环境下发布不同的版本的目的&#xff0c;首先看一个pom文件的定义&#xff1a; <project><modelVersion>4.0.0</modelVersion><groupId>cc.mzone</groupId><arti…

计算机网络安装系统怎么办,电脑没有网络如何重装系统

大家应该在线重装系统的时候安装下载到一半会提示您没有网络了&#xff0c;需要用户怎么解决呢&#xff1f;无法联网可以重装系统吗&#xff1f;下面让小编带您了解一下无网环境下重装系统的教程操作哦&#xff01;1&#xff0c;在其他可联网的电脑上&#xff0c;使用小白一键重…

python的return语句求两数之和_程序题(python解)

PyCharm整理代码&#xff1a;CtrlAltl list行数&#xff1a;len(list) list列数&#xff1a;len(list[1])笔试常使用到的功能&#xff1a; 1、单独取出一长串字符中每个单独的字符&#xff1a;输入‘abcd’&#xff0c;输出‘a’bcddef zifu(value):return list(map(str,str(va…