python實戰小遊戲之考驗記憶力
導語
哈嘍!大傢好,我是木木子。
今日遊戲更新系列來啦,是不是很想知道今天的遊戲是什麼類型的?立馬安排上——
隨著年紀的不斷上升,我們開始丟三落四,忘東忘西,記憶力越來越差瞭!
這不止大人隨著年紀增大記憶力退卻,其實很多小孩子也是一樣~
很多傢長是不是經常抱怨:
“我傢孩子背課文特別慢,常常背瞭幾十遍都背不下來,昨晚又背到一點多,我都要崩潰瞭;
在給孩子輔導課後作業,明明很簡單的古詩詞填空,孩子的第一反應就是打開書照抄,如果不翻課本,半天寫不出來;
昨晚單詞背得還好好的,第二天早上抽查的時候,10個單詞錯8個,忘得一幹二凈;”
……………………………………………………………………………………………………………….
下面小編為你整理瞭提高記憶的方法——編寫一款提高記憶力的小遊戲,希望能幫到大傢!遊戲的話更容易讓大傢接受嘛~
正文
遊戲模塊Pygame上線——先安裝好相應的環境跟模塊,還是之前寫遊戲的哪些環境哈!不清楚的去看下之前的遊戲文章哦~
遊戲規則:在規定的時間內完成記憶力的翻出相應的圖片即可消除,每次隻能明牌三張,完全靠記憶力完成這款小遊戲,增加大腦的靈活度,多動動腦,鍛煉下。
首先準備好相應的圖片:這裡準備的神奇寶貝的。
這些也很可愛吖:隨機的哈大傢可以自己選擇不止這些的哈!背景音樂哪些肯定也設置瞭的哈~
正式開始——
主要遊戲的代碼:
class FlipCardByMemory(): def __init__(self): # 播放背景音樂 self.playbgm() # 載入得分後響起的音樂 self.score_sound = pygame.mixer.Sound(cfg.AUDIOPATHS['score']) self.score_sound.set_volume(1) # 卡片圖片路徑 self.card_dir = random.choice(cfg.IMAGEPATHS['carddirs']) # 主界面句柄 self.root = Tk() self.root.wm_title('神器寶貝——記憶明牌小遊戲 ') # 遊戲界面中的卡片字典 self.game_matrix = {} # 背景圖像 self.blank_image = PhotoImage(data=cfg.IMAGEPATHS['blank']) # 卡片背面 self.cards_back_image = PhotoImage(data=cfg.IMAGEPATHS['cards_back']) # 所有卡片的索引 cards_list = list(range(8)) + list(range(8)) random.shuffle(cards_list) # 在界面上顯示所有卡片的背面 for r in range(4): for c in range(4): position = f'{r}_{c}' self.game_matrix[position] = Label(self.root, image=self.cards_back_image) self.game_matrix[position].back_image = self.cards_back_image self.game_matrix[position].file = str(cards_list[r * 4 + c]) self.game_matrix[position].show = False self.game_matrix[position].bind('<Button-1>', self.clickcallback) self.game_matrix[position].grid(row=r, column=c) # 已經顯示正面的卡片 self.shown_cards = [] # 場上存在的卡片數量 self.num_existing_cards = len(cards_list) # 顯示遊戲剩餘時間 self.num_seconds = 30 self.time = Label(self.root, text=f'Time Left: {self.num_seconds}') self.time.grid(row=6, column=3, columnspan=2) # 居中顯示 self.root.withdraw() self.root.update_idletasks() x = (self.root.winfo_screenwidth() - self.root.winfo_reqwidth()) / 2 y = (self.root.winfo_screenheight() - self.root.winfo_reqheight()) / 2 self.root.geometry('+%d+%d' % (x, y)) self.root.deiconify() # 計時 self.tick() # 顯示主界面 self.root.mainloop()
遊戲開始即背景音樂播放:
def playbgm(self): pygame.init() pygame.mixer.init() pygame.mixer.music.load(cfg.AUDIOPATHS['bgm']) pygame.mixer.music.play(-1, 0.0)
設置回調函數,三張卡片的對比:
def clickcallback(self, event): card = event.widget if card.show: return # 之前沒有卡片被翻開 if len(self.shown_cards) == 0: self.shown_cards.append(card) image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png'))) card.configure(image=image) card.show_image = image card.show = True # 之前隻有一張卡片被翻開 elif len(self.shown_cards) == 1: # --之前翻開的卡片和現在的卡片一樣 if self.shown_cards[0].file == card.file: def delaycallback(): self.shown_cards[0].configure(image=self.blank_image) self.shown_cards[0].blank_image = self.blank_image card.configure(image=self.blank_image) card.blank_image = self.blank_image self.shown_cards.pop(0) self.score_sound.play() self.num_existing_cards -= 2 image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png'))) card.configure(image=image) card.show_image = image card.show = True card.after(300, delaycallback) # --之前翻開的卡片和現在的卡片不一樣 else: self.shown_cards.append(card) image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png'))) card.configure(image=image) card.show_image = image card.show = True # 之前有兩張卡片被翻開 elif len(self.shown_cards) == 2: # --之前翻開的第一張卡片和現在的卡片一樣 if self.shown_cards[0].file == card.file: def delaycallback(): self.shown_cards[0].configure(image=self.blank_image) self.shown_cards[0].blank_image = self.blank_image card.configure(image=self.blank_image) card.blank_image = self.blank_image self.shown_cards.pop(0) self.score_sound.play() self.num_existing_cards -= 2 image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png'))) card.configure(image=image) card.show_image = image card.show = True card.after(300, delaycallback) # --之前翻開的第二張卡片和現在的卡片一樣 elif self.shown_cards[1].file == card.file: def delaycallback(): self.shown_cards[1].configure(image=self.blank_image) self.shown_cards[1].blank_image = self.blank_image card.configure(image=self.blank_image) card.blank_image = self.blank_image self.shown_cards.pop(1) self.score_sound.play() self.num_existing_cards -= 2 image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png'))) card.configure(image=image) card.show_image = image card.show = True card.after(300, delaycallback) # --之前翻開的卡片和現在的卡片都不一樣 else: self.shown_cards.append(card) self.shown_cards[0].configure(image=self.cards_back_image) self.shown_cards[0].show = False self.shown_cards.pop(0) image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png'))) self.shown_cards[-1].configure(image=image) self.shown_cards[-1].show_image = image self.shown_cards[-1].show = True # 判斷遊戲是否已經勝利 if self.num_existing_cards == 0: is_restart = messagebox.askyesno('Game Over', '勝利, 你贏瞭, 你想要再來一次嘛?') if is_restart: self.restart() else: self.root.destroy()
計時,超時即沒完成遊戲,彈窗選擇:
def tick(self): if self.num_existing_cards == 0: return if self.num_seconds != 0: self.num_seconds -= 1 self.time['text'] = f'Time Left: {self.num_seconds}' self.time.after(1000, self.tick) else: is_restart = messagebox.askyesno('Game Over', '你已經超時瞭,要重新來一次嘛?') if is_restart: self.restart() else: self.root.destroy()
如下圖所示:
總遊戲運行效果如下:
總結
所以,若記憶力不好,不必悲觀,還是可以通過後天的學習和訓練去改善和提高噠~嘿嘿嘿,趕緊來試試吧~
你們的支持是我最大的動力!!記得三連哦~mua 歡迎大傢閱讀往期的文章~
到此這篇關於python實戰小遊戲之考驗記憶力的文章就介紹到這瞭,更多相關python 小遊戲內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!