【Python小游戏】扫雷游戏竟有世界排行榜,中国90后00后霸占半壁江山?
前文
大家好!我是梨子同學!
希望大家多多支持我!哈哈
為了感謝每一個關注我的小可愛:💓每篇文章的項目源碼都是無償分享滴💓見文末!
很多csdn的功能還在研究中,還有小編的文筆不好勿怪,會慢慢進步跟大家一起學習的
小編也一直在學習編程,如果代碼小程序出現錯誤歡迎大家評論區留言哈!
最后——如果文章有幫助到你,記得“關注”、“點贊”、“評論”三連哦~
導語
每日游戲更新系列——今天帶大家來看看掃雷小游戲!
它是許多人接觸到的第一款游戲,大概也是廣大辦公族和無網學生無聊時消遣的最佳游戲。
在那些還沒有網(被切斷網)的歲月,掃雷曾陪伴無數人度過了他們的童年。你的最佳紀錄是多少
了?
對于許多90后、00后來說,掃雷這個電腦上自帶的小游戲早就變成古早的歷史,再一次提到掃雷
這個名字的時候,對許多人來說,仿佛就是上世紀的事情了。
?
就像是偶爾點開微信的跳一跳小游戲,發現排行榜上還有人在孤獨的霸榜一樣。已經2021年了,
還有許多90后、00后堅守在掃雷這個游戲上~
?
正文
首先準備好相應的素材可自選:
???
環境安裝:依舊是游戲模塊pygame,python3.6,pycharm2021。
pip install pygame?游戲規則:
在有限的時間里面用最短的時間找到所有的雷,每個數字代表附近有幾顆雷,踩到雷結束,找到全部的雷即過關。
導入所有的字體,圖片等:
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 = imagesself.image = self.images['face_normal']self.rect = self.image.get_rect()self.rect.left, self.rect.top = position# 表情按鈕的當前狀態self.status_code = status_code'''畫到屏幕上'''def draw(self, screen):# 狀態碼為0, 代表正常的表情if self.status_code == 0:self.image = self.images['face_normal']# 狀態碼為1, 代表失敗的表情elif self.status_code == 1:self.image = self.images['face_fail']# 狀態碼為2, 代表成功的表情elif self.status_code == 2:self.image = self.images['face_success']# 綁定圖片到屏幕screen.blit(self.image, self.rect)'''設置當前的按鈕的狀態'''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.GRIDSIZEmines_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 = 0for item in self.mines_matrix:for i in item:count += int(i.is_mine_flag)# 游戲當前的狀態self.status_code = -1# 記錄鼠標按下時的位置和按的鍵self.mouse_pos = Noneself.mouse_pressed = None記錄方格狀態,是不是點開了雷,狀態如何。
class Mine(pygame.sprite.Sprite):def __init__(self, images, position, status_code=0, **kwargs):pygame.sprite.Sprite.__init__(self)# 導入圖片self.images = imagesself.image = self.images['blank']self.rect = self.image.get_rect()self.rect.left, self.rect.top = position# 雷當前的狀態self.status_code = status_code# 真雷還是假雷(默認是假雷)self.is_mine_flag = False# 周圍雷的數目self.num_mines_around = -1'''設置當前的狀態碼'''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):# 狀態碼為0, 代表該雷未被點擊if self.status_code == 0:self.image = self.images['blank']# 狀態碼為1, 代表該雷已被點開elif self.status_code == 1:self.image = self.images['mine'] if self.is_mine_flag else self.images[str(self.num_mines_around)]# 狀態碼為2, 代表該雷被玩家標記為雷elif self.status_code == 2:self.image = self.images['flag']# 狀態碼為3, 代表該雷被玩家標記為問號elif self.status_code == 3:self.image = self.images['ask']# 狀態碼為4, 代表該雷正在被鼠標左右鍵雙擊elif self.status_code == 4:assert not self.is_mine_flagself.image = self.images[str(self.num_mines_around)]# 狀態碼為5, 代表該雷在被鼠標左右鍵雙擊的雷的周圍elif self.status_code == 5:self.image = self.images['0']# 狀態碼為6, 代表該雷被踩中elif self.status_code == 6:assert self.is_mine_flagself.image = self.images['blood']# 狀態碼為7, 代表該雷被誤標elif self.status_code == 7:assert not self.is_mine_flagself.image = self.images['error']# 綁定圖片到屏幕screen.blit(self.image, self.rect)游戲主循環:
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.posmouse_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 = Falseremaining_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 = Truetime_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 = 1emoji_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)游戲效果:
??
?????總結
今日游戲更新好啦!我要去戰斗了!我就不信我過不了。。。。。。小聲BB:不行的話還是開個
?掛吧!制作不易,記得一鍵三連哦!!?如需打包好的源碼+素材免費分享滴!!傳送門
總結
以上是生活随笔為你收集整理的【Python小游戏】扫雷游戏竟有世界排行榜,中国90后00后霸占半壁江山?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机甲才是男人的浪漫 这款Python版免
- 下一篇: 全网最强Python版《超级玛丽》小游戏