国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python畢設(shè)分享 掃雷小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

這篇具有很好參考價(jià)值的文章主要介紹了python畢設(shè)分享 掃雷小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


0 項(xiàng)目簡(jiǎn)介

?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)!

??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品

python小游戲畢設(shè) 掃雷小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分)

  • 難度系數(shù):3分

  • 工作量:3分

  • 創(chuàng)新點(diǎn):4分

  • 項(xiàng)目獲?。?/strong>https://gitee.com/sinonfin/system-sharing文章來源地址http://www.zghlxwxcb.cn/news/detail-771680.html

1 游戲介紹

《掃雷》是一款大眾類的益智小游戲,于1992年發(fā)行。游戲目標(biāo)是在最短的時(shí)間內(nèi)根據(jù)點(diǎn)擊格子出現(xiàn)的數(shù)字找出所有非雷格子,同時(shí)避免踩雷,踩到一個(gè)雷即全盤皆輸。

今天我們利用Python實(shí)現(xiàn)經(jīng)典掃雷游戲

2 實(shí)現(xiàn)效果

python畢設(shè)分享 掃雷小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python
python畢設(shè)分享 掃雷小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

3 開發(fā)工具

3.1 環(huán)境配置

  • Python版本:3.6.4

  • 相關(guān)模塊:

  • pygame模塊;

  • 以及一些Python自帶的模塊。

3.2 Pygame介紹

簡(jiǎn)介

Pygame是一系列專門為編寫電子游戲而設(shè)計(jì)的Python模塊(modules)。Pygame在已經(jīng)非常優(yōu)秀的SDL庫(kù)的基礎(chǔ)上增加了許多功能。這讓你能夠用Python語言編寫出豐富多彩的游戲程序。

Pygame可移植性高,幾乎能在任何平臺(tái)和操作系統(tǒng)上運(yùn)行。

Pygame已經(jīng)被下載過數(shù)百萬次。

Pygame免費(fèi)開源。它在LGPL許可證(Lesser General Public License,GNU寬通用公共許可證)下發(fā)行。使用Pygame,你可以創(chuàng)造出免費(fèi)開源,可共享,或者商業(yè)化的游戲。詳情請(qǐng)見LGPL許可證。

優(yōu)點(diǎn)

  • 能夠輕松使用多核CPU(multi core CPUs) :如今雙核CPU很常用,8核CPU在桌面系統(tǒng)中也很便宜,而利用好多核系統(tǒng),能讓你在你的游戲中實(shí)現(xiàn)更多東西。特定的pygame函數(shù)能夠釋放令人生畏的python GIL(全局解釋器鎖),這幾乎是你用C語言才能做的事。

  • 核心函數(shù)用最優(yōu)化的C語言或匯編語言編寫:C語言代碼通常比Python代碼運(yùn)行速度快10-20倍。而匯編語言編寫的代碼(assembly code)比Python甚至快到100多倍。

  • 安裝便捷:一般僅需包管理程序或二進(jìn)制系統(tǒng)程序便能安裝。

  • 真正地可移植:支持Linux (主要發(fā)行版), Windows (95, 98, ME, 2000, XP, Vista, 64-bit Windows,), Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX等操作系統(tǒng).也能支持AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS and OS/2,但是還沒有受到官方認(rèn)可。你也可以在手持設(shè)備,游戲控制臺(tái), One Laptop Per Child (OLPC) computer項(xiàng)目的電腦等設(shè)備中使用pygame.

  • 用法簡(jiǎn)單:無論是小孩子還是大人都能學(xué)會(huì)用pygame來制作射擊類游戲。

  • 很多Pygame游戲已發(fā)行:其中包括很多游戲大賽入圍作品、非常受歡迎的開源可分享的游戲。

  • 由你來控制主循環(huán):由你來調(diào)用pygame的函數(shù),pygame的函數(shù)并不需要調(diào)用你的函數(shù)。當(dāng)你同時(shí)還在使用其他庫(kù)來編寫各種各種的程序時(shí),這能夠?yàn)槟闾峁O大的掌控權(quán)。

  • 不需要GUI就能使用所有函數(shù):僅在命令行中,你就可以使用pygame的某些函數(shù)來處理圖片,獲取游戲桿輸入,播放音樂……

  • 對(duì)bug反應(yīng)迅速:很多bug在被上報(bào)的1小時(shí)內(nèi)就能被我們修復(fù)。雖然有時(shí)候我們確實(shí)會(huì)卡在某一個(gè)bug上很久,但大多數(shù)時(shí)候我們都是很不錯(cuò)的bug修復(fù)者。如今bug的上報(bào)已經(jīng)很少了,因?yàn)樵S多bug早已被我們修復(fù)。

  • 代碼量少:pygame并沒有數(shù)以萬計(jì)的也許你永遠(yuǎn)用不到的冗雜代碼。pygame的核心代碼一直保持著簡(jiǎn)潔特點(diǎn),其他附加物諸如GUI庫(kù)等,都是在核心代碼之外單獨(dú)設(shè)計(jì)研發(fā)的。

  • 模塊化:你可以單獨(dú)使用pygame的某個(gè)模塊。想要換著使用一個(gè)別的聲音處理庫(kù)?沒問題。pygame的很多核心模塊支持獨(dú)立初始化與使用。

最小開發(fā)框架

import pygame,sys #sys是python的標(biāo)準(zhǔn)庫(kù),提供Python運(yùn)行時(shí)環(huán)境變量的操控

pygame.init()  #內(nèi)部各功能模塊進(jìn)行初始化創(chuàng)建及變量設(shè)置,默認(rèn)調(diào)用
size = width,height = 800,600  #設(shè)置游戲窗口大小,分別是寬度和高度
screen = pygame.display.set_mode(size)  #初始化顯示窗口
pygame.display.set_caption("小游戲程序")  #設(shè)置顯示窗口的標(biāo)題內(nèi)容,是一個(gè)字符串類型
while True:  #無限循環(huán),直到Python運(yùn)行時(shí)退出結(jié)束
    for event in pygame.event.get():  #從Pygame的事件隊(duì)列中取出事件,并從隊(duì)列中刪除該事件
        if event.type == pygame.QUIT:  #獲得事件類型,并逐類響應(yīng)
            sys.exit()   #用于退出結(jié)束游戲并退出          
    pygame.display.update()  #對(duì)顯示窗口進(jìn)行更新,默認(rèn)窗口全部重繪

代碼執(zhí)行流程

python畢設(shè)分享 掃雷小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

4 具體實(shí)現(xiàn)

首先還是先初始化一下游戲:


# 游戲初始化
pygame.init()
screen = pygame.display.set_mode(cfg.SCREENSIZE)
pygame.display.set_caption('mine sweeper —— DCGAME')

然后把需要用到的字體,圖片,音樂啥的都導(dǎo)入進(jìn)來:

# 導(dǎo)入所有圖片
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)
# 導(dǎo)入并播放背景音樂
pygame.mixer.music.load(cfg.BGM_PATH)
pygame.mixer.music.play(-1)

接著,我們來定義一個(gè)文字板,用于顯示左上角的埋雷數(shù)量和右上角的游戲已進(jìn)行時(shí)間:


'''文字板'''
class TextBoard(pygame.sprite.Sprite):
    def __init__(self, text, font, position, color, **kwargs):
        pygame.sprite.Sprite.__init__(self)
        self.text = text
        self.font = font
        self.position = position
        self.color = color
    def draw(self, screen):
        text_render = self.font.render(self.text, True, self.color)
        screen.blit(text_render, self.position)
    def update(self, text):
        self.text = text

其實(shí)很簡(jiǎn)單,只需要把用字體渲染之后的文本對(duì)象綁定到屏幕上就行,然后設(shè)置一個(gè)update函數(shù),來實(shí)時(shí)更新里面的文本內(nèi)容。

然后,我們?cè)俣x一個(gè)表情按鈕類:


'''表情按鈕'''
class EmojiButton(pygame.sprite.Sprite):
    def __init__(self, images, position, status_code=0, **kwargs):
        pygame.sprite.Sprite.__init__(self)
        # 導(dǎo)入圖片
        self.images = images
        self.image = self.images['face_normal']
        self.rect = self.image.get_rect()
        self.rect.left, self.rect.top = position
        # 表情按鈕的當(dāng)前狀態(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)
    '''設(shè)置當(dāng)前的按鈕的狀態(tài)'''
    def setstatus(self, status_code):
        self.status_code = status_code

當(dāng)鼠標(biāo)點(diǎn)擊到這個(gè)按鈕的時(shí),就重新開始新的游戲(無論當(dāng)前的游戲狀態(tài)如何,都將重新開始新的游戲):

python畢設(shè)分享 掃雷小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python
接下來,我們需要定義的就是下面的方格類了:


'''雷'''
class Mine(pygame.sprite.Sprite):
    def __init__(self, images, position, status_code=0, **kwargs):
        pygame.sprite.Sprite.__init__(self)
        # 導(dǎo)入圖片
        self.images = images
        self.image = self.images['blank']
        self.rect = self.image.get_rect()
        self.rect.left, self.rect.top = position
        # 雷當(dāng)前的狀態(tài)
        self.status_code = status_code
        # 真雷還是假雷(默認(rèn)是假雷)
        self.is_mine_flag = False
        # 周圍雷的數(shù)目
        self.num_mines_around = -1
    '''設(shè)置當(dāng)前的狀態(tài)碼'''
    def setstatus(self, status_code):
        self.status_code = status_code
    '''埋雷'''
    def burymine(self):
        self.is_mine_flag = True
    '''設(shè)置周圍雷的數(shù)目'''
    def setnumminesaround(self, num_mines_around):
        self.num_mines_around = num_mines_around
    '''畫到屏幕上'''
    def draw(self, screen):
        # 狀態(tài)碼為0, 代表該雷未被點(diǎn)擊
        if self.status_code == 0:
            self.image = self.images['blank']
        # 狀態(tài)碼為1, 代表該雷已被點(diǎn)開
        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, 代表該雷被玩家標(biāo)記為雷
        elif self.status_code == 2:
            self.image = self.images['flag']
        # 狀態(tài)碼為3, 代表該雷被玩家標(biāo)記為問號(hào)
        elif self.status_code == 3:
            self.image = self.images['ask']
        # 狀態(tài)碼為4, 代表該雷正在被鼠標(biāo)左右鍵雙擊
        elif self.status_code == 4:
            assert not self.is_mine_flag
            self.image = self.images[str(self.num_mines_around)]
        # 狀態(tài)碼為5, 代表該雷在被鼠標(biāo)左右鍵雙擊的雷的周圍
        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, 代表該雷被誤標(biāo)
        elif self.status_code == 7:
            assert not self.is_mine_flag
            self.image = self.images['error']
        # 綁定圖片到屏幕
        screen.blit(self.image, self.rect)
    @property
    def opened(self):
        return self.status_code == 1

它的主要作用就是記錄游戲地圖中某個(gè)方格的狀態(tài)(比如是不是埋了雷呀,有沒有被點(diǎn)開呀,有沒有被標(biāo)記呀之類的)。

最后定義一個(gè)游戲地圖類,來把游戲地圖中的所有方格都整合在一起方便在游戲主循環(huán)里調(diào)用更新:


'''掃雷地圖'''
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)
        # 隨機(jī)埋雷
        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)
        # 游戲當(dāng)前的狀態(tài)
        self.status_code = -1
        # 記錄鼠標(biāo)按下時(shí)的位置和按的鍵
        self.mouse_pos = None
        self.mouse_pressed = None
    '''畫出當(dāng)前的游戲狀態(tài)圖'''
    def draw(self, screen):
        for row in self.mines_matrix:
            for item in row: item.draw(screen)
    '''設(shè)置當(dāng)前的游戲狀態(tài)'''
    def setstatus(self, status_code):
        # 0: 正在進(jìn)行游戲, 1: 游戲結(jié)束, -1: 游戲還沒開始
        self.status_code = status_code
    '''根據(jù)玩家的鼠標(biāo)操作情況更新當(dāng)前的游戲狀態(tài)地圖'''
    def update(self, mouse_pressed=None, mouse_pos=None, type_='down'):
        assert type_ in ['down', 'up']
        # 記錄鼠標(biāo)按下時(shí)的位置和按的鍵
        if type_ == 'down' and mouse_pos is not None and mouse_pressed is not None:
            self.mouse_pos = mouse_pos
            self.mouse_pressed = mouse_pressed
        # 鼠標(biāo)點(diǎn)擊的范圍不在游戲地圖內(nèi), 無響應(yīng)
        if self.mouse_pos[0] < self.cfg.BORDERSIZE or self.mouse_pos[0] > self.cfg.SCREENSIZE[0] - self.cfg.BORDERSIZE or \
           self.mouse_pos[1] < self.cfg.GRIDSIZE * 2 or self.mouse_pos[1] > self.cfg.SCREENSIZE[1] - self.cfg.BORDERSIZE:
            return
        # 鼠標(biāo)點(diǎn)擊在游戲地圖內(nèi), 代表開始游戲(即可以開始計(jì)時(shí)了)
        if self.status_code == -1:
            self.status_code = 0
        # 如果不是正在游戲中, 按鼠標(biāo)是沒有用的
        if self.status_code != 0:
            return
        # 鼠標(biāo)位置轉(zhuǎn)矩陣索引
        coord_x = (self.mouse_pos[0] - self.cfg.BORDERSIZE) // self.cfg.GRIDSIZE
        coord_y = self.mouse_pos[1] // self.cfg.GRIDSIZE - 2
        mine_clicked = self.mines_matrix[coord_y][coord_x]
        # 鼠標(biāo)按下
        if type_ == 'down':
            # --鼠標(biāo)左右鍵同時(shí)按下
            if self.mouse_pressed[0] and self.mouse_pressed[2]:
                if mine_clicked.opened and mine_clicked.num_mines_around > 0:
                    mine_clicked.setstatus(status_code=4)
                    num_flags = 0
                    coords_around = self.getaround(coord_y, coord_x)
                    for (j, i) in coords_around:
                        if self.mines_matrix[j][i].status_code == 2:
                            num_flags += 1
                    if num_flags == mine_clicked.num_mines_around:
                        for (j, i) in coords_around:
                            if self.mines_matrix[j][i].status_code == 0:
                                self.openmine(i, j)
                    else:
                        for (j, i) in coords_around:
                            if self.mines_matrix[j][i].status_code == 0:
                                self.mines_matrix[j][i].setstatus(status_code=5)
        # 鼠標(biāo)釋放
        else:
            # --鼠標(biāo)左鍵
            if self.mouse_pressed[0] and not self.mouse_pressed[2]:
                if not (mine_clicked.status_code == 2 or mine_clicked.status_code == 3):
                    if self.openmine(coord_x, coord_y):
                        self.setstatus(status_code=1)
            # --鼠標(biāo)右鍵
            elif self.mouse_pressed[2] and not self.mouse_pressed[0]:
                if mine_clicked.status_code == 0:
                    mine_clicked.setstatus(status_code=2)
                elif mine_clicked.status_code == 2:
                    mine_clicked.setstatus(status_code=3)
                elif mine_clicked.status_code == 3:
                    mine_clicked.setstatus(status_code=0)
            # --鼠標(biāo)左右鍵同時(shí)按下
            elif self.mouse_pressed[0] and self.mouse_pressed[2]:
                mine_clicked.setstatus(status_code=1)
                coords_around = self.getaround(coord_y, coord_x)
                for (j, i) in coords_around:
                    if self.mines_matrix[j][i].status_code == 5:
                        self.mines_matrix[j][i].setstatus(status_code=0)
    '''打開雷'''
    def openmine(self, x, y):
        mine_clicked = self.mines_matrix[y][x]
        if mine_clicked.is_mine_flag:
            for row in self.mines_matrix:
                for item in row:
                    if not item.is_mine_flag and item.status_code == 2:
                        item.setstatus(status_code=7)
                    elif item.is_mine_flag and item.status_code == 0:
                        item.setstatus(status_code=1)
            mine_clicked.setstatus(status_code=6)
            return True
        mine_clicked.setstatus(status_code=1)
        coords_around = self.getaround(y, x)
        num_mines = 0
        for (j, i) in coords_around:
            num_mines += int(self.mines_matrix[j][i].is_mine_flag)
        mine_clicked.setnumminesaround(num_mines)
        if num_mines == 0:
            for (j, i) in coords_around:
                if self.mines_matrix[j][i].num_mines_around == -1:
                    self.openmine(i, j)
        return False
    '''獲得坐標(biāo)點(diǎn)的周圍坐標(biāo)點(diǎn)'''
    def getaround(self, row, col):
        coords = []
        for j in range(max(0, row-1), min(row+1, self.cfg.GAME_MATRIX_SIZE[1]-1)+1):
            for i in range(max(0, col-1), min(col+1, self.cfg.GAME_MATRIX_SIZE[0]-1)+1):
                if j == row and i == col:
                    continue
                coords.append((j, i))
        return coords
    '''是否正在游戲中'''
    @property
    def gaming(self):
        return self.status_code == 0
    '''被標(biāo)記為雷的雷數(shù)目'''
    @property
    def flags(self):
        num_flags = 0
        for row in self.mines_matrix:
            for item in row: num_flags += int(item.status_code == 2)
        return num_flags
    '''已經(jīng)打開的雷的數(shù)目'''
    @property
    def openeds(self):
        num_openeds = 0
        for row in self.mines_matrix:
            for item in row: num_openeds += int(item.opened)
        return num_openeds

這里只解釋幾個(gè)可能有小伙伴看不太懂的地方:

  • 打開雷的時(shí)候我們用了遞歸,作用是當(dāng)點(diǎn)擊到的方格周圍都沒有雷的時(shí)候,系統(tǒng)就自動(dòng)打開這個(gè)方格周圍的方格,以實(shí)現(xiàn)有時(shí)候點(diǎn)擊一個(gè)方格可以打開一大片方格的效果,這里的周圍都特指以目標(biāo)方格為中心的九宮格內(nèi)的所有方格;

  • 鼠標(biāo)左右鍵一起按在已經(jīng)打開的方格上的話,如果這個(gè)方格周圍的方格已經(jīng)被標(biāo)記為雷的數(shù)目和這個(gè)方格上顯示的數(shù)字一致,就把這個(gè)方格周圍未被標(biāo)記為雷的方格都打開(所以如果你標(biāo)記錯(cuò)的話,一起打開的時(shí)候會(huì)顯示你游戲已經(jīng)GG了)。

其他也沒啥好說的了,感覺關(guān)注我的小伙伴應(yīng)該都挺聰明的,自己看代碼就能看懂吧。

定義完這些游戲中必要的元素類之后就在游戲主函數(shù)里實(shí)例化它們:


# 實(shí)例化游戲地圖
minesweeper_map = MinesweeperMap(cfg, images)
position = (cfg.SCREENSIZE[0] - int(cfg.GRIDSIZE * 1.25)) // 2, (cfg.GRIDSIZE * 2 - int(cfg.GRIDSIZE * 1.25)) // 2
emoji_button = EmojiButton(images, position=position)
fontsize = font.size(str(cfg.NUM_MINES))
remaining_mine_board = TextBoard(str(cfg.NUM_MINES), font, (30, (cfg.GRIDSIZE*2-fontsize[1])//2-2), cfg.RED)
fontsize = font.size('000')
time_board = TextBoard('000', font, (cfg.SCREENSIZE[0]-30-fontsize[0], (cfg.GRIDSIZE*2-fontsize[1])//2-2), cfg.RED)
time_board.is_start = False

然后寫個(gè)游戲主循環(huán)以根據(jù)用戶的操作來更新當(dāng)前的游戲狀態(tài)就ok啦:


# 游戲主循環(huán)
clock = pygame.time.Clock()
while True:
    screen.fill(cfg.BACKGROUND_COLOR)
    # --按鍵檢測(cè)
    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)
    # --更新時(shí)間顯示
    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))
    # --更新剩余雷的數(shù)目顯示
    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)
    # --顯示當(dāng)前的游戲狀態(tài)地圖
    minesweeper_map.draw(screen)
    emoji_button.draw(screen)
    remaining_mine_board.draw(screen)
    time_board.draw(screen)
    # --更新屏幕
    pygame.display.update()
    clock.tick(cfg.FPS)

到現(xiàn)在就大功告成了

5 最后

項(xiàng)目獲?。?/strong>https://gitee.com/sinonfin/system-sharing

到了這里,關(guān)于python畢設(shè)分享 掃雷小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python畢設(shè)分享 坦克大戰(zhàn)小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 坦克大戰(zhàn)小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 坦克大戰(zhàn)小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?/p>

    2024年02月03日
    瀏覽(30)
  • python畢設(shè)分享 打磚塊小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 打磚塊小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 打磚塊小游戲設(shè)計(jì)與實(shí)現(xiàn) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):3分 項(xiàng)目獲?。?https://gite

    2024年02月03日
    瀏覽(23)
  • python畢設(shè)分享 炸彈人小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 炸彈人小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 **python小游戲畢設(shè) 炸彈人小游戲設(shè)計(jì)與實(shí)現(xiàn) ** ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?https:/

    2024年02月02日
    瀏覽(31)
  • python畢設(shè)分享 走迷宮小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 走迷宮小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 走迷宮小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲取: htt

    2024年01月21日
    瀏覽(28)
  • python畢設(shè)分享 消消樂小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 消消樂小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 消消樂小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?htt

    2024年02月04日
    瀏覽(23)
  • python畢設(shè)分享 記憶翻牌小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 記憶翻牌小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 記憶翻牌小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):3分 項(xiàng)目獲取:

    2024年02月03日
    瀏覽(23)
  • python畢設(shè)分享 俄羅斯方塊小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 俄羅斯方塊小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 俄羅斯方塊小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?/p>

    2024年02月03日
    瀏覽(25)
  • python畢設(shè)分享 外星人入侵小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 外星人入侵小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 外星人入侵小游戲設(shè)計(jì)與實(shí)現(xiàn) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?https://gitee.com/sinonfin/s

    2024年02月05日
    瀏覽(27)
  • python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)

    2024年02月03日
    瀏覽(30)
  • python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?https://

    2024年02月12日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包