迷宫游戏编程实践,迷宫游戏编程实践

  迷宫游戏编程实践,迷宫游戏编程实践

  从小玩迷宫游戏长大的我们,欣慰的看到下一代依然热爱这款经典游戏。本文将通过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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: