Python 制作迷宫游戏(一)——地图

作为一个迷宫类的游戏,其最重要的是什么?当然是它的地图啦♪(*)
那么我们又该如何制作一张迷宫地图呢⊙(・◇・)?
很显然,我们不可能一张张自己画吧
网络上常见的迷宫算法有三种 深度优先 随机prim 和递归分割
在我看来,prime算法是最适合制作迷宫地图的算法,由它制作出来的地图,相对而言更加自然,
也不会有未利用的大块空闲面积。这里推荐两位大佬的博客
三大迷宫算法
随机迷宫生成算法
都是比较容易理解的

prime算法

相信这个算法的原理大家在上面两篇博客中已经有了了解
那么接下来就是对它的python实现了

由于边界的问题,我将上面第二篇博客中的实现改写成了python (博主勿怪φ(>ω<*) )

def create_maze(self):maze=[[0]*self.WID for i in range(self.LEN)]for i in range(self.LEN):maze[i][0]=1maze[0][i]=1maze[self.LEN-1][i]=1maze[i][self.LEN-1]=1X=list()Y=list()X.append(2)Y.append(2)while len(X)>0:r=random.randint(0,len(X))%len(X)x=X[r]y=Y[r]count=0for i in range(x-1,x+2):for k in range(y-1,y+2):if abs(x-i)+abs(y-k)==1 and maze[i][k]>0:count+=1 if count<=1:maze[x][y]=1for i in range(x-1,x+2):for j in range(y-1,y+2):if abs(x-i)+abs(y-j)==1 and maze[i][j]==0:X.append(i)Y.append(j)                 del X[r]del Y[r]       maze[2][1]=1for i in range(self.LEN-3,-1,-1):if maze[i][self.LEN-3]==1:maze[i][self.LEN-2]=1breakreturn maze

当然,这个模块不止有地图的底层数组生成,还绑定有瓦片

下面是这个模块的整体清单

#迷宫生成脚本
#Maze_generation.py
#Prime迷宫生成算法
import random
import pygame
from py_.GLOBAL import *
class Maze:LEN=0#迷宫长度--- 行WID=0#迷宫宽度| 列def __init__(self,length,wid):self.LEN=lengthself.WID=wid#self.wall_01=pygame.image.load(r'G:\python_pro\maze\resource\picture\wall\wall_01.png')self.wall_01=pygame.image.load(r''+path.path+'/resource/picture/wall/wall_01.png')def create_maze(self):maze=[[0]*self.WID for i in range(self.LEN)]for i in range(self.LEN):maze[i][0]=1maze[0][i]=1maze[self.LEN-1][i]=1maze[i][self.LEN-1]=1X=list()Y=list()X.append(2)Y.append(2)while len(X)>0:r=random.randint(0,len(X))%len(X)x=X[r]y=Y[r]count=0for i in range(x-1,x+2):for k in range(y-1,y+2):if abs(x-i)+abs(y-k)==1 and maze[i][k]>0:count+=1 if count<=1:maze[x][y]=1for i in range(x-1,x+2):for j in range(y-1,y+2):if abs(x-i)+abs(y-j)==1 and maze[i][j]==0:X.append(i)Y.append(j)                 del X[r]del Y[r]       maze[2][1]=1for i in range(self.LEN-3,-1,-1):if maze[i][self.LEN-3]==1:maze[i][self.LEN-2]=1breakfor i in range(self.LEN):for j in range(self.WID):if maze[i][j]==1:print('  ',end='')#注意,这里面是两个空格else:print('国',end='')print()return maze#print(map_)
if __name__=='__main__':ma=Maze(30,30)#ma.create_map()

这是改写后生成的地图,沿用了第二篇博客的风格_

下一节 游戏窗口

Python 制作迷宫游戏(一)——地图相关推荐

  1. Python 制作迷宫游戏(三)——地图精灵

    Python 制作迷宫游戏(三)--地图精灵 上一节我们已经成功的生成了一个游戏窗口 这一节我们将试着把地图的瓦片与地图数组绑定并绘制到窗口中 当然,作为一个迷宫,地图的作用不仅仅是背景板,它最为重要 ...

  2. Python 制作迷宫游戏(二)——游戏窗口

    Python 制作迷宫游戏(二)--游戏窗口 上一节我们使用prime做了迷宫的底层数组,它的形式是一个二维数组. 这一节我们着手开始制作游戏窗口 使用模块 pygame 在这项迷宫游戏的制作当中需要 ...

  3. [Python] 制作超级玛丽游戏

    python制作超级玛丽游戏 这篇文章,我们优先介绍超级玛丽游戏中的多状态跳跃,和行走地图拖动的原理,然后实现.并实现倒计时和金币动态效果 接下来用下面这四张图,就可以完全懂得游戏中背景是怎么会移动的 ...

  4. python制作动图-用Python制作迷宫GIF

    原标题:用Python制作迷宫GIF 安装 可以通过PyPi安装 或者通过Git 为什么你需要这个库? 问:我是一个Python迷,并且对迷宫的生成和迷宫解决的办法非常感兴趣.我很羡慕别人能够做出生成 ...

  5. python能制作游戏吗_如何用Python制作小游戏

    要想用Python制作小游戏,必须要安装一个插件Pygame 什么是Pygame Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.建立在SDL基础上,允许实时电子游戏研发而无需 ...

  6. 如何用python制作五子棋游戏_Python制作打地鼠小游戏

    原文链接 Python制作小游戏(二十一)​mp.weixin.qq.com 效果展示 打地鼠小游戏https://www.zhihu.com/video/1200492442610450432 简介 ...

  7. 用python制作简单的可视化地图

    用python制作简单的可视化地图,代码如下: from pyecharts.charts import Bar # 导入pyecharts工具包,调用Bar工具bar1 = Bar() bar1.a ...

  8. 【python】python制作 连连看 游戏脚本(一)

    [python]python制作 连连看 游戏脚本(一)_sunriver2000的博客-CSDN博客 [python]python制作 连连看 游戏脚本(二)_sunriver2000的博客-CSD ...

  9. 【python】python制作 连连看 游戏脚本(二)

    [python]python制作 连连看 游戏脚本(一)_sunriver2000的博客-CSDN博客 [python]python制作 连连看 游戏脚本(二)_sunriver2000的博客-CSD ...

  10. 【python】python制作 连连看 游戏脚本(三)

    [python]python制作 连连看 游戏脚本(一)_sunriver2000的博客-CSDN博客 [python]python制作 连连看 游戏脚本(二)_sunriver2000的博客-CSD ...

最新文章

  1. 2021 AAAI Fellow名单重磅出炉,华人学者遗憾连续两年无缘入选 | AI日报
  2. java调用jni接口,Java 中通过jni接口调用native code
  3. oracle database 11g plsql 程序设计,oracle-database-11g-plsql-编程实战笔记
  4. C# USB设备的管理(Devcon和注册表的USB操作)
  5. 表格中建一个按钮_CAD | CAD和Excel的表格互换教程
  6. 你应该需要知道的前端小技巧
  7. [恢]hdu 2138
  8. MySQL索引的使用及注意事项
  9. 【数据库】数据库安全(授权,回收)
  10. 黑暗之魂3设置无边窗口化
  11. win7虚拟光驱+iso文件升级win10
  12. DP动态规划思想讲解
  13. 打包openstack of opencontrail
  14. 【夏令营】 My 计算机 夏令营 预推免 记录
  15. Java之对象转型(casting)
  16. project下build.gradle文件和module下buil.gradle
  17. python-机器学习-手写数字识别
  18. 保留指定小数位数js函数封装
  19. zz:使用Monkeyrunner进行Android自动化的总结
  20. 3.3 将列表[mo,deng,ge]和[1,2,3] 转换成[(mo,1),(deng,2),(ge,3)]

热门文章

  1. linux点亮硬盘locat,Linux中locate whereis which find grep5种查询命令总结
  2. server sql 将出生日期转为年龄_SQL语句如何根据出生日期计算年龄
  3. comparison of VLIW and superscaler
  4. 前端实现base64解码编码
  5. 记录一次大创项目配置服务器的心得
  6. 【渝粤题库】陕西师范大学 《道德教育案例研究》作业
  7. 在1分钟K线图中显示分时图均价线的公式
  8. python对数据进行分类_按Python对数据进行分类
  9. CUDA加速——共享内存介绍及其应用
  10. 一元云购CMS微信分享打不开解决办法