新闻动态

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

发布日期:2021-12-29 22:37 | 文章来源:脚本之家

导语

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

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

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

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

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

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

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

昨晚单词背得还好好的,第二天早上抽查的时候,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 小游戏内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部