python实战小游戏之考验记忆力

作者:顾木子吖 时间:2023-02-23 14:29:54 

导语

哈喽!大家好,我是木木子。

今日游戏更新系列来啦,是不是很想知道今天的游戏是什么类型的?立马安排上——

随着年纪的不断上升,我们开始丢三落四,忘东忘西,记忆力越来越差了!

python实战小游戏之考验记忆力

这不止大人随着年纪增大记忆力退却,其实很多小孩子也是一样~

很多家长是不是经常抱怨:

“我家孩子背课文特别慢,常常背了几十遍都背不下来,昨晚又背到一点多,我都要崩溃了;

在给孩子辅导课后作业,明明很简单的古诗词填空,孩子的第一反应就是打开书照抄,如果不翻课本,半天写不出来;

昨晚单词背得还好好的,第二天早上抽查的时候,10个单词错8个,忘得一干二净;”

...............................................................................................................................

python实战小游戏之考验记忆力

下面小编为你整理了提高记忆的方法——编写一款提高记忆力的小游戏,希望能帮到大家!游戏的话更容易让大家接受嘛~

游戏模块Pygame上线——先安装好相应的环境跟模块,还是之前写游戏的哪些环境哈!不清楚的去看下之前的游戏文章哦~

游戏规则:在规定的时间内完成记忆力的翻出相应的图片即可消除,每次只能明牌三张,完全靠记忆力完成这款小游戏,增加大脑的灵活度,多动动脑,锻炼下。

首先准备好相应的图片:这里准备的神奇宝贝的。

python实战小游戏之考验记忆力

这些也很可爱吖:随机的哈大家可以自己选择不止这些的哈!背景音乐哪些肯定也设置了的哈~

python实战小游戏之考验记忆力

正式开始——

主要游戏的代码:


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()

如下图所示:

python实战小游戏之考验记忆力

总游戏运行效果如下:

python实战小游戏之考验记忆力

python实战小游戏之考验记忆力

来源:https://blog.csdn.net/weixin_55822277/article/details/120525782

标签:python,小游戏,记忆训练
0
投稿

猜你喜欢

  • MySQL运行状况查询方式介绍

    2024-01-26 03:54:52
  • SQL Server存储过程中编写事务处理的方法小结

    2024-01-15 15:24:24
  • 在Pytorch中计算卷积方法的区别详解(conv2d的区别)

    2021-02-12 01:01:03
  • CSS浏览器兼容问题整理(IE6.0、IE7.0 与FireFox)

    2008-10-27 13:45:00
  • JavaScript中尽量用局部变量的原因[译]

    2009-02-20 13:45:00
  • numpy.insert用法及内插插0的方法

    2023-03-28 10:06:13
  • python 自动化将markdown文件转成html文件的方法

    2021-09-16 16:04:40
  • python实现的汉诺塔算法示例

    2023-09-21 11:28:17
  • python创建与遍历List二维列表的方法

    2023-04-29 13:07:48
  • 使用pymysql写入中文的问题

    2024-01-12 22:44:49
  • 实例讲解Python中SocketServer模块处理网络请求的用法

    2021-04-16 13:25:27
  • Python初识逻辑与if语句及用法大全

    2023-11-21 16:17:24
  • 用python写一个windows下的定时关机脚本(推荐)

    2022-03-01 10:26:37
  • python获取外网IP并发邮件的实现方法

    2023-01-07 13:55:33
  • Window下安装JDK1.8+Tomcat9.0.27+Mysql5.7.28的教程图解

    2024-01-26 22:24:12
  • WEB打印分页类(JS)

    2008-01-22 14:02:00
  • 深入mysql外键关联问题的详解

    2024-01-16 09:19:44
  • django基础之数据库操作方法(详解)

    2024-01-19 12:42:25
  • 13个超级有用的 jQuery 内容滚动插件和教程

    2011-08-10 19:10:08
  • 简单谈谈Python中的模块导入

    2021-02-24 20:28:17
  • asp之家 网络编程 m.aspxhome.com