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

article/2025/4/24 14:18:28

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()

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

在这里插入图片描述

下一节 游戏窗口


http://chatgpt.dhexx.cn/article/Tk5CUBVr.shtml

相关文章

三套简单的迷宫地图生成方案

地图基础 地图的形式很多&#xff0c;这里我使用的地图是以tile块为单位分割的地图&#xff0c;地图上的tile块形式很多&#xff0c;但主要分成三种&#xff1a; A&#xff1a;陆地&#xff0c;可以在上面分布一些角色啦物件啦&#xff1b; B&#xff1a;过渡&#xff0c;根据物…

SenticNet情感词典介绍

在进行情感分析时&#xff0c;一个好的情感词典能够让我们的工作事半功倍&#xff0c;较为出名的情感词典有SentiWordNet&#xff0c;General Inquirer等&#xff0c;这篇博客将介绍另外一个出色情感词典&#xff0c;SenticNet。 简介 当谈论SenticNet时&#xff0c;我们正在…

中文金融领域情感词典构建

2019年10月4日-6日 Python爬虫与文本分析工作坊 & 课题申报高级研修班 这篇文章是公众号关注者郝童鞋今早发给我的&#xff0c;在此谢谢郝童鞋。 文章基于简单算法和人工判断&#xff0c;使用多阶段剔除法&#xff0c;构建了 中文金融情感词典CFSD&#xff08;ChineseFinan…

《学术小白的学习之路 02》情感分析02 之基于大连理工情感词典的情感分析和情绪计算

本文主要是学习参考杨秀璋老师的博客,笔记总结。 原文链接 文章目录 书山有路勤为径&#xff0c;学海无涯苦作舟原文链接一.大连理工情感词典二、七种情绪的计算2.1 pandas读取数据2.2 导入大连理工大学中文情感词典2.3 统计七种情绪的分布情况2.4 增加中文分词词典和自定义的停…

中文情感词典的构建

首先&#xff0c;国外英文的情感分析已经取得了很好的效果&#xff0c;得益于英文单词自身分析的便捷性与英文大量的数据集 WordNet。但由于中文的多变性&#xff0c;语义的多重性与数据集的缺乏&#xff0c;使得国内的情感分析暂落后于国外。本文将记录博主在项目中构建情感词…

基于情感词典的网络文本情感倾向分类模型

目录 前言一、模型构建1.归类2.判定3.输出 二、代码实现三、结果展示 前言 文本情感倾向性分析&#xff08;也称为意见挖掘&#xff09;是指识别和提取原素材中的主观信息&#xff0c;并对带有感情色彩的文本进行分析处理和归纳推理的过程。主要用于实时社交媒体的内容&#xf…

使用SO-PMI算法构建行业/专业情感词典

文章目录 1. 情感词典内容2. 情感倾向点互信息算法&#xff08;SO-PMI&#xff09;算法点互信息算法 PMI情感倾向点互信息算法 SO-PMI 3. 构建情感词典1. 导入项目2. 构建情感种子词3. 使用TF-IDF方便构建情感种子词4. 构建专业词典的效果与使用方法5. 其他说明 1. 情感词典内容…

在微雕中使用的电脑设计

需求是我们要在铜器上复刻很小的凹印,可以选用的技术方案还是很多:激光雕刻,篆刻、钢印。 激光雕刻有利有弊,前期复制是最方便的,激光雕刻有专门的设计软件,可以很轻松的把自己的图案运用到机器上去。制作和时间的成本都非常的低,但是激光对金属的雕刻有一个大大的缺点…

闲人闲谈PS之四十二——顾问的“禁忌之地”—制造能力计划

惯例闲话&#xff1a;上个月有幸成为乐老师乐谈IT系列培训课程的讲师&#xff0c;分享主题是&#xff0c;PS在装备制造和工程行业的应用。虽然培训规模不是很大&#xff0c;但是闲人很有信心&#xff0c;至少在小范围之内&#xff0c;参与培训的听友人来说&#xff0c;PS一直以…

ibm x201 怎么清理内部_ThinkPad X201拆解,联想Thinkpad X201拆机图解

1.jpg (25.79 KB, 下载次数: 2552) 2010-6-1 20:13 上传 ThinkPad X201掌托&#xff0c;没有防滚架&#xff0c;这个掌托就显得很软。电磁屏蔽做得很用心。 2.jpg (39.16 KB, 下载次数: 2556) 2010-6-1 20:13 上传 ThinkPad X201掌托特写&#xff0c;可以看到掌托塑料件是MITSU…

学习opencv:PS滤镜—浮雕

实现浮雕效果的算子有很多&#xff0c;效果大同小异&#xff0c;不同算子的处理结果在细节上会有所差异。事实上&#xff0c;任何一阶差分算子都可用于实现浮雕效果&#xff0c;简单起见&#xff0c;这里使用算子[-1,1]。 代码如下 #include<iostream> #include <…

ps给图片加钢印方法

给图片加一个钢印其实很简单 这样的效果只能类似钢印 简单可以按照下面的方法 准备资料 &#xff1a;一个要加钢印的图片 一个透明印章即可实现 方法&#xff1a;斜面和浮雕 一、打开图片 二、打开透明印章 三、将透明印章移动到图片中 四、进行图层设置 右击印章图层---混合…

PS钢印效果制作

PS制作钢印效果一法 转载教程:严禁做假.... 附件 1.jpg (37.05 KB) 2008-6-10 22:39 2.jpg (33.59 KB) 2008-6-10 22:39 3.jpg (38.57 KB) 2008-6-10 22:39 4.jpg (42.49 KB) 2008-6-10 22:39 5.jpg (39.2 KB) 2008-6-10 22:39 6.jpg (44.63 KB) 2008-6-10 22:39 7.jpg…

Oracle中extract()函数

oracle中extract()函数从oracle 9i中引入的,主要作用于一个date或者interval类型中截取特定的部分 extract()语法如下&#xff1a; extract ( { year | month | day | hour | minute | second | 某一时区 } from { date类型值 | interval类型值} ) 要点一&#xff1a;extract()…

oracle ora-01652:无法通过1024(在表空间SYSTEM中)拓展temp段

1.报错 2.查询拓展表空间 2.1查看表空间使用情况 SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.…

hpux oracle10.2.0.4下报ORA-1652 unable to extend temp segment by 128 in tablespace CARDTS

hpux oracle10.2.0.4 rac 下报ORA-1652 unable to extend temp segment by 128 in tablespace CARDTS hpux 11.31 oracle10.2.0.4 rac ,2 nodes 值得注意的是&#xff0c;报的是不能在CARDTS表空间中扩展temp段。。。 后来查询metalink 文章&#xff0c; Troubleshooting ORA-1…

原创:oracle中单行函数介绍 lt;五gt;

在SQL中有两种函数一种是单行函数&#xff0c;一种是多行函数.在sql与pl/sql中都自带了很多类型的函数,比如有字符、数字、日期、转换和混合型等多种函数用于处理单行数据,因此这些都被称为单行函数.这些函数都可以被用于select、where和oder by等子句中.下面我们就来分析单行函…

EXPDP报错:ORA-60019 creating initial extent of size 14 in tablespace of extent size 8

一、原因概述 和SecureFiles新的LOB架构相关。11g之前叫BasicFiles。在11g如果不特别指定&#xff0c;默认是会创建成BasicFiles LOB。但是在12c之后&#xff0c;LOB列在ASSM管理的表空间。默认都会创建成SecureFiles。 也就是DB_SECUREFILE初始化参数&#xff0c;在11g时&…

oracle 中 /*+ full(表名)*/ 优化详解

文章目录 hint 关键字&#xff1a; /* full(表名)*/可能遇到的问题别名为 "SELxx" hint 关键字&#xff1a; / full(表名)/ 一般来说&#xff0c;sql 优化时&#xff0c;尽量走 index&#xff0c;但不绝对有时候&#xff0c;全表扫描的效率比索引高 索引 和 全表扫…

Docker——Docker 镜像详解

Docker 镜像 Docker镜像是什么Docker镜像加载原理联合文件系统&#xff08;UnionFS&#xff09;镜像加载原理镜像分成理解 Commit镜像镜像的总结 Docker镜像是什么 Docker 容器的运行是基于宿主机的内核&#xff0c;通过linux的namespaces来实现隔离&#xff0c;相对于虚拟机而…