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

python實戰(zhàn)游戲之史上最難最虐的掃雷游戲沒有之一

 更新時間:2021年09月18日 15:16:29   作者:顧木子吖  
這篇文章主要介紹了使用 python 實現掃雷游戲,不同于傳統(tǒng)過時的掃雷,今天我們用 Python 增加了新花樣,文中給大家介紹的非常詳細,需要的朋友可以參考下

導語

每日游戲更新系列——今天帶大家來看看掃雷小游戲!

它是許多人接觸到的第一款游戲,大概也是廣大辦公族和無網學生無聊時消遣的最佳游戲。

在那些還沒有網(被切斷網)的歲月,掃雷曾陪伴無數人度過了他們的童年。你的最佳紀錄是多少了?

對于許多90后、00后來說,掃雷這個電腦上自帶的小游戲早就變成古早的歷史,再一次提到掃雷這個名字的時候,對許多人來說,仿佛就是上世紀的事情了。

圖片

就像是偶爾點開微信的跳一跳小游戲,發(fā)現排行榜上還有人在孤獨的霸榜一樣。已經2021年了,還有許多90后、00后堅守在掃雷這個游戲上~

圖片

正文

首先準備好相應的素材可自選:

環(huán)境安裝:依舊是游戲模塊pygame,python3.6,pycharm2021。

pip  install  pygame​

游戲規(guī)則:

在有限的時間里面用最短的時間找到所有的雷,每個數字代表附近有幾顆雷,踩到雷結束,找到全部的雷即過關。

導入所有的字體,圖片等:

def main():
    pygame.init()
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('掃雷小游戲')
 
    images = {}
    for key, value in cfg.IMAGE_PATHS.items():
        if key in ['face_fail', 'face_normal', 'face_success']:
            image = pygame.image.load(value)
            images[key] = pygame.transform.smoothscale(image, (int(cfg.GRIDSIZE*1.25), int(cfg.GRIDSIZE*1.25)))
        else:
            image = pygame.image.load(value).convert()
            images[key] = pygame.transform.smoothscale(image, (cfg.GRIDSIZE, cfg.GRIDSIZE))
 
    font = pygame.font.Font(cfg.FONT_PATH, cfg.FONT_SIZE)
 
    pygame.mixer.music.load(cfg.BGM_PATH)
    pygame.mixer.music.play(-1)

定義表情按鈕,點開微笑即可重新開始游戲!

class EmojiButton(pygame.sprite.Sprite):
    def __init__(self, images, position, status_code=0, **kwargs):
        pygame.sprite.Sprite.__init__(self)
        # 導入圖片
        self.images = images
        self.image = self.images['face_normal']
        self.rect = self.image.get_rect()
        self.rect.left, self.rect.top = position
        # 表情按鈕的當前狀態(tài)
        self.status_code = status_code
    '''畫到屏幕上'''
    def draw(self, screen):
        # 狀態(tài)碼為0, 代表正常的表情
        if self.status_code == 0:
            self.image = self.images['face_normal']
        # 狀態(tài)碼為1, 代表失敗的表情
        elif self.status_code == 1:
            self.image = self.images['face_fail']
        # 狀態(tài)碼為2, 代表成功的表情
        elif self.status_code == 2:
            self.image = self.images['face_success']
        # 綁定圖片到屏幕
        screen.blit(self.image, self.rect)
    '''設置當前的按鈕的狀態(tài)'''
    def setstatus(self, status_code):
        self.status_code = status_code

隨機生成雷:

class MinesweeperMap():
    def __init__(self, cfg, images, **kwargs):
        self.cfg = cfg
        # 雷型矩陣
        self.mines_matrix = []
        for j in range(cfg.GAME_MATRIX_SIZE[1]):
            mines_line = []
            for i in range(cfg.GAME_MATRIX_SIZE[0]):
                position = i * cfg.GRIDSIZE + cfg.BORDERSIZE, (j + 2) * cfg.GRIDSIZE
                mines_line.append(Mine(images=images, position=position))
            self.mines_matrix.append(mines_line)
        # 隨機埋雷
        for i in random.sample(range(cfg.GAME_MATRIX_SIZE[0]*cfg.GAME_MATRIX_SIZE[1]), cfg.NUM_MINES):
            self.mines_matrix[i//cfg.GAME_MATRIX_SIZE[0]][i%cfg.GAME_MATRIX_SIZE[0]].burymine()
        count = 0
        for item in self.mines_matrix:
            for i in item:
                count += int(i.is_mine_flag)
        # 游戲當前的狀態(tài)
        self.status_code = -1
        # 記錄鼠標按下時的位置和按的鍵
        self.mouse_pos = None
        self.mouse_pressed = None

記錄方格狀態(tài),是不是點開了雷,狀態(tài)如何。

class Mine(pygame.sprite.Sprite):
    def __init__(self, images, position, status_code=0, **kwargs):
        pygame.sprite.Sprite.__init__(self)
        # 導入圖片
        self.images = images
        self.image = self.images['blank']
        self.rect = self.image.get_rect()
        self.rect.left, self.rect.top = position
        # 雷當前的狀態(tài)
        self.status_code = status_code
        # 真雷還是假雷(默認是假雷)
        self.is_mine_flag = False
        # 周圍雷的數目
        self.num_mines_around = -1
    '''設置當前的狀態(tài)碼'''
    def setstatus(self, status_code):
        self.status_code = status_code
    '''埋雷'''
    def burymine(self):
        self.is_mine_flag = True
    '''設置周圍雷的數目'''
    def setnumminesaround(self, num_mines_around):
        self.num_mines_around = num_mines_around
    '''畫到屏幕上'''
    def draw(self, screen):
        # 狀態(tài)碼為0, 代表該雷未被點擊
        if self.status_code == 0:
            self.image = self.images['blank']
        # 狀態(tài)碼為1, 代表該雷已被點開
        elif self.status_code == 1:
            self.image = self.images['mine'] if self.is_mine_flag else self.images[str(self.num_mines_around)]
        # 狀態(tài)碼為2, 代表該雷被玩家標記為雷
        elif self.status_code == 2:
            self.image = self.images['flag']
        # 狀態(tài)碼為3, 代表該雷被玩家標記為問號
        elif self.status_code == 3:
            self.image = self.images['ask']
        # 狀態(tài)碼為4, 代表該雷正在被鼠標左右鍵雙擊
        elif self.status_code == 4:
            assert not self.is_mine_flag
            self.image = self.images[str(self.num_mines_around)]
        # 狀態(tài)碼為5, 代表該雷在被鼠標左右鍵雙擊的雷的周圍
        elif self.status_code == 5:
            self.image = self.images['0']
        # 狀態(tài)碼為6, 代表該雷被踩中
        elif self.status_code == 6:
            assert self.is_mine_flag
            self.image = self.images['blood']
        # 狀態(tài)碼為7, 代表該雷被誤標
        elif self.status_code == 7:
            assert not self.is_mine_flag
            self.image = self.images['error']
        # 綁定圖片到屏幕
        screen.blit(self.image, self.rect)

游戲主循環(huán):

clock = pygame.time.Clock()
    while True:
        screen.fill(cfg.BACKGROUND_COLOR)
        
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = event.pos
                mouse_pressed = pygame.mouse.get_pressed()
                minesweeper_map.update(mouse_pressed=mouse_pressed, mouse_pos=mouse_pos, type_='down')
            elif event.type == pygame.MOUSEBUTTONUP:
                minesweeper_map.update(type_='up')
                if emoji_button.rect.collidepoint(pygame.mouse.get_pos()):
                    minesweeper_map = MinesweeperMap(cfg, images)
                    time_board.update('000')
                    time_board.is_start = False
                    remaining_mine_board.update(str(cfg.NUM_MINES))
                    emoji_button.setstatus(status_code=0)
       
        if minesweeper_map.gaming:
            if not time_board.is_start:
                start_time = time.time()
                time_board.is_start = True
            time_board.update(str(int(time.time() - start_time)).zfill(3))
        
        remianing_mines = max(cfg.NUM_MINES - minesweeper_map.flags, 0)
        remaining_mine_board.update(str(remianing_mines).zfill(2))
      
        if minesweeper_map.status_code == 1:
            emoji_button.setstatus(status_code=1)
        if minesweeper_map.openeds + minesweeper_map.flags == cfg.GAME_MATRIX_SIZE[0] * cfg.GAME_MATRIX_SIZE[1]:
            minesweeper_map.status_code = 1
            emoji_button.setstatus(status_code=2)
       
        minesweeper_map.draw(screen)
        emoji_button.draw(screen)
        remaining_mine_board.draw(screen)
        time_board.draw(screen)
    
        pygame.display.update()
        clock.tick(cfg.FPS)

游戲效果:

​​

總結

今日游戲更新好啦!我要去戰(zhàn)斗了!我就不信我過不了。。。。。。小聲BB:不行的話還是開個掛吧!

​​

到此這篇關于python實戰(zhàn)游戲之史上最難最虐的掃雷游戲沒有之一的文章就介紹到這了,更多相關python 掃雷內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python圖形工具turtle繪制國際象棋棋盤

    python圖形工具turtle繪制國際象棋棋盤

    這篇文章主要為大家詳細介紹了python圖形工具turtle繪制國際象棋棋盤,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • python爬蟲獲取京東手機圖片的圖文教程

    python爬蟲獲取京東手機圖片的圖文教程

    下面小編就為大家分享一篇python爬蟲獲取京東手機圖片的圖文教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • python3在同一行內輸入n個數并用列表保存的例子

    python3在同一行內輸入n個數并用列表保存的例子

    今天小編就為大家分享一篇python3在同一行內輸入n個數并用列表保存的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python內置模塊OS?實現SHELL端文件處理器

    python內置模塊OS?實現SHELL端文件處理器

    這篇文章主要介紹了python內置模塊OS實現SHELL端文件處理器,文章通過圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 使用Python實現在Excel工作表中添加、修改及刪除超鏈接

    使用Python實現在Excel工作表中添加、修改及刪除超鏈接

    在創(chuàng)建Excel工作簿時,內部文檔的互鏈、報告自動化生成或是創(chuàng)建外部資源快速訪問路徑是比較常見的需求,本文將介紹如何使用Python實現在Excel工作表中對超鏈接進行添加、修改及刪除的操作,需要的朋友可以參考下
    2024-10-10
  • Python多線程與多進程相關知識總結

    Python多線程與多進程相關知識總結

    進程(process)和線程(thread)是操作系統(tǒng)的基本概念,是操作系統(tǒng)程序運行的基本單元,本文簡要介紹進程和線程的概念以及Python中的多進程和多線程.需要的朋友可以參考下
    2021-05-05
  • python3.5使用tkinter制作記事本

    python3.5使用tkinter制作記事本

    TkInter是標準的Python GUI庫。的Python與Tkinter的結合提供了一個快速和容易的方法來創(chuàng)建GUI應用程序。 Tkinter的提供了一個強大的面向對象的接口Tk的GUI工具包.
    2016-06-06
  • Python的Socket編程過程中實現UDP端口復用的實例分享

    Python的Socket編程過程中實現UDP端口復用的實例分享

    這篇文章主要介紹了Python的Socket編程過程中實現UDP端口復用的實例分享,文中作者用到了Python的twisted異步框架,需要的朋友可以參考下
    2016-03-03
  • Python解析json時提示“string indices must be integers”問題解決方法

    Python解析json時提示“string indices must be integers”問題解決方法

    這篇文章主要介紹了Python解析json時提示“string indices must be integers”問題解決方法,結合實例形式分析了Python解析json字符串操作規(guī)范與相關使用技巧,需要的朋友可以參考下
    2019-07-07
  • 通過Python編程將CSV文件導出為PDF文件的方法

    通過Python編程將CSV文件導出為PDF文件的方法

    CSV文件通常用于存儲大量的數據,而PDF文件則是一種通用的文檔格式,便于與他人共享和打印,將CSV文件轉換成PDF文件可以幫助我們更好地管理和展示數據,本文將介紹如何通過Python編程將CSV文件導出為PDF文件,需要的朋友可以參考下
    2024-06-06

最新評論