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

  • 前言
  • 看图猜成语小程序开发(第三篇)
    • 游戏闯关模式页面

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


前言

我们将要实现这些功能:

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

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


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

终于来到第三篇了!!!


游戏闯关模式页面

在这里我们将实现自定义有多少个关卡数,16个汉字提示(12个随机生成的干扰汉字),游戏通关记录所用的时间,主要要注意下面3个的实现功能。

自定义关卡数
在自定义关卡数时(默认10关),我们需要在游戏选择模式页面中点击闯关模式后添加ttkbootstrap里面的一个查询框Querybox,然后根据提示输入关卡数后则将进入游戏闯关模式页面。

    def game_chuangguan_mode(self,event):# 默认10个关卡(initialvalue=10)number = Querybox.get_integer(prompt="请设置关卡数量:",title="自定义关卡数量 ",initialvalue=10,minvalue=0,maxvalue=50)if number:self.frame.destroy()game_chuangguan_page(self.nickname,number)

① 创建四个用于显示选择结果的标签,在这里还要定义一个self.answer_list 列表来装下生成的标签对象,以便后面在标签上配置文字configure()。

# 创建四个用于选择结果的标签def create_selection_result_label(self):self.answer_list = []for i in range(4):label = ttk.Label(self.canvas, text='', font=("微软雅黑", 35), background='', width=2, cursor='hand2')label.place(x=130 + i * 100, y=450)self.answer_list.append(label)

重选按钮,点击执行后就会将self.answer_list 列表里面的标签对象全部摧毁后重新创建。

 # 重选def update_label(self):self.CLICKTIMES = 0self.TRUEANSWER = ''for i in self.answer_list:i.destroy()self.create_selection_result_label()

② 创建用于选择文字内容的16个标签(4 x 4),其中将有12个干扰文字,并且在创建标签时还要为每一个标签对象绑定一个鼠标点击事件click_label(event)。

# 创建用于选择文字内容的标签def create_option_text_label(self):def click_label(event):if self.CLICKTIMES < 4:self.CLICKTIMES += 1label_text = event.widget["text"]  # 得到标签上的文本self.answer(label_text)self.label_oop_list = []# 设置4行4列的标签for i in range(4):for j in range(4):label = ttk.Label(self.canvas, text='', font=("微软雅黑", 35), background='#FFFAE3', width=2,cursor='hand2')label.place(x=510 + j * 100, y=90 + i * 95)label.bind("<Button-1>", click_label)self.label_oop_list.append(label)

这里也比较重要的部分,变量IDX记录第几关,loading_idiom_img()方法里面的for循环则是为前面创建的16个文字标签配置文字(包括
正确的4个文字([i for i in self.idiom])和
12个干扰文字(disturb_text_list ))

    IDX = 1  # 第几关,默认第1关# 加载成语图片def loading_idiom_img(self,):self.idiom = self.idiom_list[self.IDX - 1].split('.')[0]print('答案:', self.idiom)disturb_text_list = [self.GBK2312() for i in range(12)]  # 随机生成12个干扰汉字disturb_text_list.extend([i for i in self.idiom])for label_oop in self.label_oop_list:text = random.choice(disturb_text_list)disturb_text_list.remove(text)label_oop.configure(text=text)self.guanqia_lable.config(text=f'第 {self.IDX} / {len(self.idiom_list)}关')self.idiom_img = ttk.PhotoImage(file=f'../看图猜成语/{self.idiom}.png')self.lm.configure(image=self.idiom_img)

随机生成干扰文字

 # 随机生成一个汉字def GBK2312(self, ):head = random.randint(0xb0, 0xf7)body = random.randint(0xa1, 0xfe)val = f'{head:x}{body:x}'str = bytes.fromhex(val).decode('gb2312')return str

③ 记录时间,这里的写法与前面的动态移动原理都一样,都是由after()实现,间隔1秒刷新标签(time_label )一次。self.flag = True 为定义一个信号量,用于当我们完成游戏通过时,run()结束循环

# 记录通关所耗时def recording_time(self):self.flag = True  # 定义一个信号量,用于当我们完成游戏通过时,run()结束循环time_label = ttk.Label(self.canvas,text='时长:00:00:00', font=("华文行楷", 15), background='#DAEFE6',bootstyle=DANGER)time_label.place(x=730,y=50)start_time = datetime.datetime.now()def run():if self.flag:time_label.after(1000, run)update_time = datetime.datetime.now() - start_timeself.time_ =f'时长:{update_time}'.split('.')[0]time_label.configure(text=self.time_) # 不显示时长的毫秒值run()

提示回答是否正确,这里用了一点线程的知识,回答正确线程启动提示“回答正确”标签,3秒后将自动消失;回答错误,同理。

  t = threading.Thread(target=self.dispaly_answer_result, args=('回\n答\n错\n误',))t.setDaemon(True)t.start()# 显示回答结果是否正确def dispaly_answer_result(self,text):self.result_label.configure(text=text)time.sleep(3)try: self.result_label.configure(text='')except Exception as e: print(e)

第三篇也就到这里吧!

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. linux有关Block的知识
  2. ReactNative用指定的设备/模拟器运行项目
  3. Kubernetes本地集群和Google Kubernetes Engine的区别
  4. 【渝粤教育】国家开放大学2018年秋季 2247T社会工作政策法规 参考试题
  5. 妙用世界之窗浏览器的隐私保护功能
  6. 阳江口碑好的java培训价格
  7. 彻底讲清楚ZooKeeper分布式锁的实现原理【石杉的架构笔记】
  8. 爬虫抓取暗黑3玩家数据
  9. 抖音短剧本应该怎么写
  10. java课程设计动态祝福卡_巧用代码制作动态图文贺卡【平安夜祝福】
  11. 云打码的简单使用举例
  12. python培训班一般多少钱-Python培训班多少钱
  13. 【转载】API:简单实现多人聊天室
  14. Android 自带工具生成图标
  15. Value did not match schema:\n1. return.ok.Ok2: Invalid type. Expected: array, given: null
  16. props 更新.使用规则
  17. 文本与文本处理(一)
  18. Python3,多种方法,同时执行多条SQL语句,并把查询结果分别写入不同Sheet页,妥妥的学到了。
  19. Chrome已实现对H.265/HEVC的硬解支持
  20. COCOS 遗留问题

热门文章

  1. 远程控制电脑目前是很重要、很完美的软件
  2. vue 打包部署子目录后 elementUI icon 图标不显示
  3. ffmpeg之封装格式之aac
  4. 「和众汇富」药企“卖水人”生意的秘密
  5. 抖音小店无货源运营操作详解,实操干活,建议收藏
  6. android最强的平板,安卓最强平板来了!骁龙855,还有这一苹果都做不到的技术...
  7. java scrollbar_java – 绑定到ScrollPane ScrollBar时的奇怪ScrollBar行为
  8. 【附源码】计算机毕业设计java智能化车辆管理综合信息平台设计与实现
  9. uniapp实现禁止video拖拽快进
  10. 有哪些让你看着很扎心的文案?