Python GUI案例之看图猜成语(第二篇)

  • 前言
  • 看图猜成语小程序开发(第二篇)
    • 游戏选择模式页面
    • 游戏训练模式页面

Python GUI案例之看图猜成语开发(第一篇)
Python GUI案例之看图猜成语开发(第三篇)
Python GUI案例之看图猜成语开发(完结篇)


前言

我们将要实现这些功能:

  • 一,游戏首页页面:在首页页面里需要实现绘制一个看图猜成语文字的标题,定义两个按钮功能(开始游戏,退出游戏),还有一个输入游戏昵称的功能并且要对昵称进行验证是否为空,才能开始游戏;
  • 二,游戏选择模式页面:在首页点击开始游戏后,进入游戏的选择模式页面,分为训练模式和闯关模式两种;
  • 三,游戏训练模式页面:将成语图片加载后,只实现猜成语功能(一张图片,一个输入框,一个按钮)和回答的准确率;
  • 四,游戏闯关模式页面:将实现自定义有多少个关卡数,16个汉字提示(12个随机生成的干扰汉字),游戏通关记录所用的时间。

(素材提取:https://download.csdn.net/download/qq_59142194/85827790)


看图猜成语小程序开发(第二篇)


游戏选择模式页面

这个页面很简单,只在页面上创建两个标签字样,分为训练模式和闯关模式,并实现标签绑定鼠标点击事件功能。

效果实现

代码实现
l1.bind(“”,self.game_train_mode)、l2.bind(“”, self.game_chuangguan_mode)主要实现绑定鼠标点击功能(鼠标左键)。

#游戏模式选择页面
class game_modeSelection_page(ttkbootstrapWindow):def __init__(self,nickname):super().__init__()self.nickname = nicknameself.page()def page(self):self.window_middle(500,300)self.frame = ttk.Frame(self.root)self.frame.pack(fill=BOTH, expand=YES)self.bg = ttk.PhotoImage(file='../sucai/bg2.png')ttk.Label(self.frame,anchor='nw', image=self.bg).pack()l1 = ttk.Label(self.frame,text='训练模式', font=('华文行楷', 32),relief=RAISED,cursor='hand2',bootstyle=WARNING,background='#324762')l1.place(x=150,y=60)l1.bind("<Button-1>",self.game_train_mode)l2 = ttk.Label(self.frame, text='闯关模式', font=('华文行楷', 32),relief=RAISED,cursor='hand2',bootstyle=SUCCESS,background='#324762')l2.place(x=150, y=140)l2.bind("<Button-1>", self.game_chuangguan_mode)def game_train_mode(self,event):print('游戏训练模式')def game_chuangguan_mode(self,event):print('游戏闯关模式')

游戏训练模式页面

将成语图片加载后,只实现猜成语功能(一张图片,一个输入框,一个按钮)和回答的准确率。

其实在实现上面的功能前,我把其中这部分单独提取了出来,这样可以方便在后面的闯关模式中直接调用(因为在这两种模式下,它们的背景加载、上面字样提示及返回按钮都是共有的)。

代码实现
这里面的代码也很简单。

class game_same_components(ttkbootstrapWindow):def __init__(self):super().__init__()def same_page(self,nickname):self.nickname = nicknameself.window_middle(960, 540)self.canvas = ttk.Canvas(self.root)self.canvas.pack(fill=BOTH, expand=YES)self.bg = ttk.PhotoImage(file='../sucai/bg3.png')self.canvas.create_image(0, 35, anchor='nw', image=self.bg)self.canvas.create_rectangle(0, 0, 960, 35, fill='#F4F4F4', outline='#F4F4F4')nickname_lable = ttk.Label(self.canvas, text=f'欢迎:【{self.nickname}】玩家上线', font=20, bootstyle=INFO,background='#F4F4F4')nickname_lable.place(x=960, y=4)def nickname_lable_move(rate):rate += 5nickname_lable.place(x=960 - rate, y=4)if rate < 960:nickname_lable.after(50, nickname_lable_move, rate % 960)nickname_lable_move(0)self.return_button_img = ttk.PhotoImage(file='../sucai/return.png')self.return_button = ttk.Button(self.canvas, bootstyle=(LIGHT, "outline-toolbutton"), image=self.return_button_img,command=self.return_game_modeSelection_page)self.return_button.place(x=0, y=35)def return_game_modeSelection_page(self):self.canvas.destroy()game_modeSelection_page(self.nickname)

好了,我们提取出共有的功能后就可以开始完成训练模式的功能了。
主要是实现回答的准确率地计算
我们先定义两个变量
answer_times = 0 # 记录回答总次数
answer_correct_times = 0 # 记录回答正确次数

先创建一个标签(self.accuracy_lable2)用于显示准确率,在输入框中输入成语后键盘回车或者鼠标点击按钮绑定下面这个answer()方法。实现记录只要执行一次这个answer()方法则answer_times += 1(# 记录回答总次数),如果我们在输入框中输入的答案成语和真实的答案一致,就将answer_correct_times += 1( # 记录回答正确次数),反之,回答错误(answer_correct_times)就不加1。
这样我们就可以通过answer_correct_times / answer_times来进行计算准确率
(round((self.answer_correct_times / self.answer_times) * 100, 2) ,百分比并保留两位小数)

并且回答正确后也将自动进行到下一关,执行(self.loading_idiom_img()方法)。

 self.answer_idiom_entry.bind("<Return>", lambda event: self.answer())answer_times = 0  # 记录回答总次数answer_correct_times = 0  # 记录回答正确次数# 判断答案是否正确def answer(self):if self.answer_idiom_entry.get().strip():self.answer_times += 1if self.answer_idiom_entry.get().strip() == self.idiom_result:Messagebox.show_info(message="恭喜,回答正确!!!")self.loading_idiom_img()self.answer_idiom_entry.delete(0,'end')self.answer_correct_times += 1else:if not Messagebox.yesno(message="回答错误!!!\n是否继续回答?") == 'Yes':self.loading_idiom_img()self.answer_idiom_entry.delete(0, 'end')self.accuracy_lable2.config(text=f'{round((self.answer_correct_times / self.answer_times) * 100, 2)}%')

所以还要写个self.loading_idiom_img()方法,方法里面每次加载出的图片是由random.choice(os.listdir(‘…/看图猜成语’))看图猜成语文件夹下随机选取的一张图片。

#加载成语图片def loading_idiom_img(self):self.loading_img_times += 1self.idiom = random.choice(os.listdir('../看图猜成语'))self.result = self.idiom.split('.')[0]print('答案:',self.result)self.idiom_img = ttk.PhotoImage(file=f'../看图猜成语/{self.idiom}')lm = ttk.Label(self.canvas,image=self.idiom_img)lm.place(x=215,y=115)guanqia_lable = ttk.Label(self.canvas, font=('华文行楷', 32),background='#48A6B0')guanqia_lable.place(x=300,y=450)guanqia_lable.config(text=f'第 {self.loading_img_times} 关')

到了这里,游戏训练模式中主要代码就这些了,至于这部分的完整代码就不cv下来了,到后面我会把全部的代码贴出。

Python GUI案例之看图猜成语开发(第二篇)相关推荐

  1. Python GUI案例之看图猜成语开发(第三篇)

    Python GUI案例之看图猜成语(第三篇) 前言 看图猜成语小程序开发(第三篇) 游戏闯关模式页面 Python GUI案例之看图猜成语开发(第一篇) Python GUI案例之看图猜成语开发(第 ...

  2. python微信小程序看图猜成语源码flask

    wx供重浩:创享日记 对话框发送:python成语 获取完整源码源文件+说明文档+配置教程等 启动Idiom/flask下的venv虚拟环境,运行python manage.py runserver命 ...

  3. python例程:《看图猜成语》程序

    目录 <看图猜成语>程序使用说明 主要代码展示 源码下载路径 <看图猜成语>程序使用说明 启动Idiom/flask下的venv虚拟环境,运行python manage.py ...

  4. python看图猜成语_看图猜成语200个图答案 看图猜成语图片答案大全

    看图猜成语2游戏v1.40苹果版 类型:ios休闲益智大小:100M语言:中文 评分:10.0 标签: 立即下载 看图猜成语200个图答案 看图猜成语图片答案大全.看图猜成语是一款很受欢迎的休闲猜谜类 ...

  5. 看图猜成语小程序源码+详细搭建教程

    本小程序可开通流量主 ,后台可以自行设置关卡.等级.也可以一键部署, 开通流量主之后实现躺赚,你懂得. 个人号也可以开通,审核一次性必过. 类目选择 教育 小程序源码下载地址:(8条消息) 看图猜成语 ...

  6. (已更新)看图猜成语小程序源码+详细搭建教程

    本小程序后台可以自行设置关卡.等级.也可以一键部署, 个人号也可以开通,审核一次性必过. 类目选择 教育 小程序源码下载地址:(已更新)看图猜成语小程序源码+详细搭建教程-小程序文档类资源-CSDN下 ...

  7. 学计算机可以用算盘吗,看图猜成语黑板学生算盘计算机答案玩法经验分享

    看图猜成语黑板学生算盘计算机答案玩法经验分享是小编今天给各位玩家老爷到来的内容,这道题是什么呢,4张不同形式的表达效果,每张图所指的方向都是同一点,还不了解的玩家跟着小编一起看看接下来的分析吧,希望能 ...

  8. 【游戏系列】用vue做个看图猜成语游戏吧

    前几年看图猜成语一类游戏风靡一时,很多人玩这个游戏,我当时也是其中之一,如今当了一个没多少头发的程序员,有时间的时候,也会去研究一下以前的那些小游戏 vue怎么创建项目这里就不介绍了,后面有时间再写一 ...

  9. Andoird看图猜成语的小游戏

    前言 最近没什么事情,在微信上看见看图猜成语的游戏,于是自己也写了一个来玩.源码放在了文章底部. 先来看下效果图 Gif的画质就将就这样吧 我们先来分析一下 我们主要的就是这3个地方 1.就是一个im ...

最新文章

  1. html display布局,Web布局:display属性
  2. ZTE物联网之智能电表简介
  3. 算法刷题-数论-试除法求约数、约数个数、约数之和、最大公约数(辗转相除法)
  4. 基础算法 —— 递推算法
  5. php生成游客id_PHP生成唯一ID 公认较为安全的写法 上传随机文件名
  6. Pytorch——Variable是什么?
  7. ELK 架构之 Elasticsearch 和 Kibana 安装配置
  8. Intent intent =new Intent(getActivity(),DeliverListActivity.class,Cannot resolve method'getActivity'
  9. Python 画星星图案
  10. photoshop 人物修容的大体步骤
  11. 输入192.168.1.1登陆页面打不开怎么办
  12. PDF格式分析(一)简介
  13. 一些值得一看的博友文章地址
  14. STM32开发手册-IAP流程
  15. 影院活动管理系统需求分析报告
  16. 新视野大学英语读写教程(第二版)第四册练习答案
  17. 被限制出县城_5种人不被批准出境 芜湖县今年阻止14人
  18. 移动邮箱(@139.com):启用IMAP/SMTP服务+获取授权码
  19. 外贸B2B收款,World Account账户提现人民币教程详解!
  20. vue写前端出现错误:[Vue warn]: Computed property “editableTabs“ was assigned to but it has no setter.

热门文章

  1. gnu 项目_什么是GNU项目?
  2. 面试官:你这数据库表设计的,真垃圾。。。
  3. 最简单的方法快速生成抖音风格文字——使用HTML和CSS代码
  4. java-随机数生成
  5. 国货之光—白象方便面
  6. clover直接进windows_设置Clover默认进入Windows,按快捷键F8可选择不同的引导
  7. 人机交互技术在车管所的应用探索
  8. 售前解决方案秘诀,学会后写方案不再困难重重!
  9. 用R语言,生成微信聊天记录词云。
  10. Apple Watch平台认知与产品设计