欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pygame實(shí)戰(zhàn)之迷宮游戲的實(shí)現(xiàn)

 更新時(shí)間:2022年02月18日 15:57:20   作者:嗨!栗子同學(xué)  
玩迷宮游戲長大的我們,欣慰地看到,下一代仍熱愛著這個(gè)經(jīng)典游戲。本文將通過Python中的Pygame庫制作這一經(jīng)典的游戲,需要的可以參考一下

導(dǎo)語

哈嘍!哈嘍我是栗子,每日更新來啦——

“玩迷宮游戲長大的我們,欣慰地看到,下一代仍熱愛著這個(gè)經(jīng)典游戲。

如果你的孩子也愛玩迷宮,那真要恭喜你了。”

之前給大家更新過一款《走迷宮》的小游戲大家還記得嘛?!后面有小伙伴兒讓我做一款ai版本的,讓自動兒,今天,讓我們發(fā)揮想象力,一起用代碼做一款A(yù)I版本的迷宮吧!還可以鍛煉腦力一直玩兒啦~

正文

本文小程序用遞歸的方法解決迷宮問題,加入了可以自動生成迷宮,但有些問題還不是很明白生成迷宮用了很笨的方法,在生成20行、列以上的迷宮時(shí)會很慢啦~

就簡單的研究一下,之后有更好的會繼續(xù)學(xué)了給大家更新滴!

1)效果展示

2)主程序

代碼共主要有三塊,太多了所以這里只展示主程序的代碼

import random
import pygame
 
FPS = 60
ROW = 10
COL = 10
BLOCK = 20
BORDER = 20
SCREEN_WIDTH = COL * BLOCK + BORDER * 2
SCREEN_HEIGHT = ROW * BLOCK + BORDER * 2
IMPOSSIBLE_COLOR = (128, 128, 128)
POSSIBLE_COLOR = (76, 141, 174)
ROUTE_COLOR = (12, 137, 24)
 
 
# noinspection PyPep8Naming
class DrawMaze(object):
    def __init__(self):
        self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))    # 創(chuàng)建屏幕對象
        pygame.display.set_caption('{}*{} Maze'.format(ROW, COL))               # 窗口標(biāo)題
        self.clock = pygame.time.Clock()
        self.color = POSSIBLE_COLOR                 # 首先設(shè)置路徑塊與可能塊的顏色相同
        self.maze = MakeMaze().create(ROW, COL)
        self.no_route = True
 
    def display(self):
        """ 在窗口中顯示迷宮,按任意鍵顯示路徑 """
        while True:
            self.screen.fill((0, 0, 0))
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
                if event.type == pygame.MOUSEBUTTONDOWN:    # 按鼠標(biāo)顯示路徑,再按取消顯示
                    if self.no_route:
                        self.color = ROUTE_COLOR
                        self.no_route = False
                    else:
                        self.color = POSSIBLE_COLOR
                        self.no_route = True
                if 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):
        """ 用遍歷取出迷宮數(shù)據(jù)并在窗口中畫顏色塊 """
        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):
        """
        如果位置是迷宮的出口,說明成功走出迷宮
        依次向下、右、左、上進(jìn)行探測,走的通就返回True,然后繼續(xù)探測,走不通就返回False
        """
        if x == len(maze) - 1 and y == len(maze[0]) - 1:
            maze[x][y] = 2                      # 將出口位置做標(biāo)記
            return True
 
        if self.validPos(maze, x, y):           # 遞歸主體實(shí)現(xiàn)
            self.route_list.append((x, y))      # 將位置加入路線列表中
            maze[x][y] = 2                      # 做標(biāo)記,防止折回
            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                  # 沒走通把上一步位置標(biāo)記取消,以便能夠退回
                self.route_list.pop()           # 在位置列表中刪除位置,即最后一個(gè)元素
                return False
        return False
 
    @staticmethod
    def pprint(maze):
        """ 打印迷宮 """
        [print(n) for n in maze]
 
    @staticmethod
    def validPos(maze, x, y):
        """ 判斷坐標(biāo)的有效性,如果超出數(shù)組邊界或是不滿足值為1的條件,說明該點(diǎn)無效返回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實(shí)戰(zhàn)之迷宮游戲的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Pygame迷宮的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python批量修改xml文件中的信息

    python批量修改xml文件中的信息

    大家好,本篇文章主要講的是python批量修改xml文件中的信息,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下的相關(guān)資料
    2022-01-01
  • 淺談Python實(shí)現(xiàn)2種文件復(fù)制的方法

    淺談Python實(shí)現(xiàn)2種文件復(fù)制的方法

    這篇文章主要介紹了淺談Python實(shí)現(xiàn)2種文件復(fù)制的方法,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python下使用Trackbar實(shí)現(xiàn)繪圖板

    Python下使用Trackbar實(shí)現(xiàn)繪圖板

    這篇文章主要為大家詳細(xì)介紹了Python下使用Trackbar實(shí)現(xiàn)繪圖板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Python執(zhí)行時(shí)間計(jì)算方法以及優(yōu)化總結(jié)

    Python執(zhí)行時(shí)間計(jì)算方法以及優(yōu)化總結(jié)

    python腳本運(yùn)行時(shí)間遠(yuǎn)遠(yuǎn)大于python腳本中統(tǒng)計(jì)的計(jì)算時(shí)間,所以本文將為大家分享就幾個(gè)Python執(zhí)行時(shí)間計(jì)算方法以及優(yōu)化,感興趣的可以了解一下
    2022-08-08
  • Python正則表達(dá)式中的量詞符號與組問題小結(jié)

    Python正則表達(dá)式中的量詞符號與組問題小結(jié)

    這篇文章主要介紹了Python正則表達(dá)式中的量詞符號與組問題小結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 關(guān)于pandas中的.update()方法解析

    關(guān)于pandas中的.update()方法解析

    這篇文章主要介紹了關(guān)于pandas中的.update()方法解析,在Pandas中,update()方法用于將一個(gè)DataFrame或Series對象中的值更新為另一個(gè)DataFrame或Series對象中的對應(yīng)值,需要的朋友可以參考下
    2023-07-07
  • Python datetime 格式化 明天,昨天實(shí)例

    Python datetime 格式化 明天,昨天實(shí)例

    這篇文章主要介紹了Python datetime 格式化 明天,昨天實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 使用Python docx修改word關(guān)鍵詞顏色的操作

    使用Python docx修改word關(guān)鍵詞顏色的操作

    這篇文章主要介紹了使用Python docx修改word關(guān)鍵詞顏色的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python 字符串的駐留機(jī)制及優(yōu)缺點(diǎn)

    python 字符串的駐留機(jī)制及優(yōu)缺點(diǎn)

    字符串駐留是一種僅保存一份相同且不可變字符串的方法。這篇文章主要介紹了python 字符串的駐留機(jī)制,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python Loguru日志封裝裝飾器實(shí)現(xiàn)過程

    Python Loguru日志封裝裝飾器實(shí)現(xiàn)過程

    這篇文章主要介紹了Python Loguru日志封裝裝飾器實(shí)現(xiàn)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03

最新評論