迷宫游戏编程实践,迷宫游戏编程实践
从小玩迷宫游戏长大的我们,欣慰的看到下一代依然热爱这款经典游戏。本文将通过Python中的Pygame库制作这个经典游戏,有需要的可以参考。
00-1010介绍文字1)效果显示2)主程序
目录
你好!大家好,我是栗子,每日更新——。
“我们是在玩迷宫游戏中长大的,我们很高兴看到下一代仍然热爱这款经典游戏。
如果你的孩子喜欢玩迷宫,恭喜你。"
之前给你更新了一个《走迷宫》的小游戏。你还记得吗?后面有朋友让我做一个ai版的。今天就让我们发挥想象力,用代码做一个AI版迷宫吧。还可以锻炼大脑,一直玩~
导语
本文的小程序通过递归解决了迷宫问题,增加了迷宫的自动生成。但是,有些问题不是很了解。用笨办法生成迷宫,生成20多行20多列的迷宫会很慢~
只是做一个简单的学习,然后会有更好的会议继续学习,更新大家!
正文
1)效果展示
主要有三段代码,太多了,这里只展示主程序的代码。
随机导入
导入pygame
FPS=60
ROW=10
COL=10
BLOCK=20
BORDER=20
SCREEN_WIDTH=COL * BLOCK边框* 2
SCREEN _ HEIGHT=ROW * BLOCK BORDER * 2
IMPOSSIBLE_COLOR=(128,128,128)
可能的颜色=(76,141,174)
ROUTE_COLOR=(12,137,24)
# no inspection pypep 8命名
类DrawMaze(对象):
def __init__(self):
self . screen=py game . display . set _ mode((screen _ width,screen _ height)) #创建一个屏幕对象
py game . display . set _ caption( { } * { }迷宫)。format (row,col)) #窗口标题
self.clock=pygame.time.Clock()
Self.color=POSSIBLE_COLOR #首先将路径块的颜色设置为与可能块相同。
self.maze=MakeMaze()。创建(行,列)
self.no_route=True
def显示器(自身):
在窗口中显示迷宫,按任意键显示路径
而True:
self.screen.fill((0,0,0))
用于pygame.event.get():中的事件
if event.type==pygame。QUIT:
退出()
if event . type==py game . mousebuttondown 3360 #按鼠标显示路径,再按取消显示。
if self.no_route:
self.color=ROUTE _颜色
self.no_route=False
else:
self.color=可能的颜色
self.no_route=True
如果
event.type == pygame.KEYDOWN: # 按任意键重新生成迷宫
self.maze = MakeMaze().create(ROW, COL)
self.drawBlock(self.color)
self.clock.tick(FPS)
pygame.display.update()
def drawBlock(self, color):
""" 用遍历取出迷宫数据并在窗口中画颜色块 """
for i, line in enumerate(self.maze):
for j, value in enumerate(line):
rect = (j * BLOCK + BORDER, i * BLOCK + BORDER, BLOCK, BLOCK)
if value == 0:
pygame.draw.rect(self.screen, IMPOSSIBLE_COLOR, rect, 0)
elif value == 1:
pygame.draw.rect(self.screen, POSSIBLE_COLOR, rect, 0)
else:
pygame.draw.rect(self.screen, color, rect, 0)
# noinspection PyPep8Naming
class MakeMaze(object):
def __init__(self):
self.route_list = [] # 初始化路线列表
# noinspection PyUnusedLocal
def create(self, x, y):
""" 生成迷宫 """
route_list = [] # 初始化路线列表
while True:
maze = [[random.choice([0, 1]) for j in range(y)] for i in range(x)]
maze[0][0] = 1
if self.walk(maze, 0, 0):
return maze
def walk(self, maze, x, y):
"""
如果位置是迷宫的出口,说明成功走出迷宫
依次向下、右、左、上进行探测,走的通就返回True,然后继续探测,走不通就返回False
"""
if x == len(maze) - 1 and y == len(maze[0]) - 1:
maze[x][y] = 2 # 将出口位置做标记
return True
if self.validPos(maze, x, y): # 递归主体实现
self.route_list.append((x, y)) # 将位置加入路线列表中
maze[x][y] = 2 # 做标记,防止折回
if self.walk(maze, x + 1, y) or self.walk(maze, x, y + 1) \
or self.walk(maze, x, y - 1) or self.walk(maze, x - 1, y):
return True
else:
maze[x][y] = 1 # 没走通把上一步位置标记取消,以便能够退回
self.route_list.pop() # 在位置列表中删除位置,即最后一个元素
return False
return False
@staticmethod
def pprint(maze):
""" 打印迷宫 """
[print(n) for n in maze]
@staticmethod
def validPos(maze, x, y):
""" 判断坐标的有效性,如果超出数组边界或是不满足值为1的条件,说明该点无效返回False,否则返回True """
if len(maze) > x >= 0 and len(maze[0]) > y >= 0 and maze[x][y] == 1:
return True
else:
return False
def main():
drawer = DrawMaze() # 用迷宫生成画图对象
drawer.display() # 显示迷宫
if __name__ == __main__:
main()
以上就是Pygame实战之迷宫游戏的实现的详细内容,更多关于Pygame迷宫的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。