使用wxPython和pillow开发拼图小游戏(四)

news/2024/5/21 16:27:14

       上一篇介绍了使用本地图片来初始化游戏的方法,通过前边三篇,该小游戏的主要内容差不多介绍完了,最后这一篇来介绍下游戏用时的计算、重置游戏和关闭窗口事件处理

游戏用时的计算

       对于游戏用时的记录,看过前几篇的小伙伴可能也发现了,这里主要是用了一个多线程来完成的。从玩家第一次点击开始计时,到最后判断通关成功停止计时。下边直接上代码:

def OnClick(self, e):……if temp in can_move:if self.step == 0: # 如果首次点击,则新启一个线程self.time_thread = threading.Thread(target=self.__updateTime)self.time_thread.setName('current_thread')self.time_thread.start()…………if self.check_success() == 1:self.__stopFlag = 'stop'  # 用于在线程内判断是否停止计时dlg = wx.MessageDialog(self, "恭喜闯关成功!", "恭喜", wx.OK)  dlg.ShowModal()dlg.Destroy()def __updateTime(self):startTime = 0while startTime >= 0:if self.__stopFlag == 'stop':  # 游戏完成停止continueif self.time_thread.getName() == 'old_thread': breakif self.__stopFlag == 'exit': # 游戏退出,关闭窗口breakself.time_label.SetLabel('耗时:' + str(startTime) + 's')time.sleep(1) # sleep 1秒后加1startTime += 1

重置游戏

        重置游戏顾名思义就是重新载入游戏,这里需要要实现的是步数、时间清零重新计算,图片还是之前选择的图片,复杂程度为当前界面上选择的复杂程度

def reLoad(self, e):self.step = 0self.step_label.SetLabel('步数:' + str(self.step))   # 步数清0self.time_thread.setName('old_thread')  # 停止计时self.__stopFlag = 'start'self.time_label.SetLabel('耗时:' + str(0) + 's')self.random_init() # 根据新的复杂度重新初始化self.panel_1.Destroy()  # 清空游戏面板重新初始化self.panel_1 = wx.Panel(self, 1, size=(540, 540), pos=(0, 0))index = 0font = wx.Font(20, wx.FONTFAMILY_MODERN, 0, 90, underline=False, faceName="")if self.load_flag == 1:   # 当前游戏界面为自定义图片时,还是重新载入图片拼图游戏for i in self.indices:btn = wx.BitmapButton(self.panel_1, i, size=(int(540 / self.vac), int(540 / self.vac)),pos=(int(i % self.vac * (540 / self.vac)), int((i // self.vac) * (540 / self.vac))))self.bitmap1_onSize(btn, wx.Image('./Pic/' + str(index) + '.png', wx.BITMAP_TYPE_PNG))index += 1self.Bind(wx.EVT_BUTTON, self.OnClick, btn)else:  # 当前游戏界面为数字拼图时,还是重新载入数字拼图游戏for i in self.indices: btn = wx.Button(self.panel_1, i, str(index + 1), size=(int(540 / self.vac), int(540 / self.vac)),pos=(int(i % self.vac * (540 / self.vac)), int((i // self.vac) * (540 / self.vac))))index += 1btn.SetBackgroundColour("#FFCC66")btn.SetFont(font)self.Bind(wx.EVT_BUTTON, self.OnClick, btn)

关闭窗口事件处理

       在调试过程中,发现一个问题,当关闭窗口后,主窗口的线程已经停止了,但主进程仍然在进行,最后发现是创建的计时线程并没有随着主窗口的销毁而停止,所以这里需要捕获窗口关闭的事件,在事件中设置一个退出的标志位,用于计时线程判断主窗口是否已关闭。这里是重写了wx.Frame的OnCloseWindow方法

def OnCloseWindow(self, event):self.__stopFlag = 'exit'self.Destroy()

介绍到这里,该小游戏基本介绍完了。因为刚接触python GUI开发,界面布局、样式上有很多瑕疵,还请大家多多包涵。如果大家需要看完整的源码可以通过以下链接下载

使用wxPython、pillow开发的拼图小游戏

 


http://www.mrgr.cn/p/47854448

相关文章

Flutter:flutter_local_notifications——消息推送的学习

前言 注: 刚开始学习,如果某些案例使用时遇到问题,可以自行百度、查看官方案例、官方github。 简介 Flutter Local Notifications是一个用于在Flutter应用程序中显示本地通知的插件。它提供了一个简单而强大的方法来在设备上发送通知&#…

flask 点赞系统

dianzan.html页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>点赞系统</title> </head> <body><h2>这是一个点赞系统</h2><table border"1"><…

数据分析-关于指标和指标体系

一、电商指标体系 二、指标体系的作用 三、统计学中基本的分析手段

Python+OpenCV实现自动扫雷,挑战扫雷世界记录!

目录 准备 - 扫雷软件 实现思路 - 01 窗体截取 - 02 雷块分割 - 03 雷块识别 - 04 扫雷算法实现 福利&#xff1a;文末有Python全套资料哦 我们一起来玩扫雷吧。用PythonOpenCV实现了自动扫雷&#xff0c;突破世界记录&#xff0c;我们先来看一下效果吧。 中级 - 0.74秒 …

HC32F448-小华MCU

由于要开发和学习使用低成本MCU&#xff0c;这里记录下小华半导体HC32F448的手册参数 芯片官网&#xff08;HC32F448MCTI-LQFP80&#xff09; 小华半导体有限公司 (xhsc.com.cn) HC32F448 系列MCU是32位的ARM Cortex-M4微控制器。最高工作频率 200MHz&#xff0c;最大 256KB 的…

css3的filter图片滤镜使用

业务介绍 默认&#xff1a;第一个图标为选中状态&#xff0c;其他三个图标事未选中状态 样式&#xff1a;选中状态是深蓝&#xff0c;未选中状体是浅蓝 交互&#xff1a;鼠标放上去选中&#xff0c;其他未选中&#xff0c;鼠标离开时候保持当前选中状态 实现&#xff1a;目前…

2023级学姐上岸浙江大学MBA的备考经验分享

在分享我的浙大MBA提面经验之前&#xff0c;先给大家炫一波前段时间刚收到的浙大录取通知书。还有一个月的时间我就要去梦想中的殿堂学习了&#xff0c;而针对今年报考浙大的考生来说&#xff0c;杭州这边还有最后两次可以参加提面的机会&#xff0c;我们去年这届共招收新生526…

kettle 学习笔记

kettle 学习笔记 个人理解下载 / 安装kettle及测试环境准备kattle下载安装JDK安装配置MySQL安装配置 使用练习创建数据库连接转换练习 个人理解 ETL工具的一种&#xff0c;作用是将数据进行抽取&#xff0c;转换&#xff0c;应该是数据中心类型的项目用的比较多&#xff0c;将…

动态sql以及常用的标签

什么是动态sql&#xff1a; 指根据不同的条件生成不同的sql 搭建环境&#xff1a; 建表&#xff1a; create table blog( id varchar(50) not null comment 博客id, title varchar(100) not null comment 博客标题, author varchar(30) not null comment 博客作者, create_ti…

《2023中国开发者调查报告》探索2023中国开发者的技术创新与挑战:AIoT、云原生、国产数据库等领域的发展与前景

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

《Kubernetes故障篇:unable to retrieve OCI runtime error》

一、背景信息 1、环境信息如下&#xff1a; 操作系统K8S版本containerd版本Centos7.6v1.24.12v1.6.12 2、报错信息如下&#xff1a; Warning FailedCreatePodSandBox 106s (x39 over 10m) kubelet (combined from similar events): Failed to create pod sandbox: rpc error: …

HEVC 速率控制(码控)介绍

视频编码速率控制 速率控制&#xff1a; 通过选择一系列编码参数&#xff0c;使得视频编码后的比特率满足所有需要的速率限制&#xff0c;并且使得编码失真尽量小。速率控制属于率失真优化的范畴&#xff0c;速率控制算法的重点是确定与速率相关的量化参数&#xff08;Quantiz…

在OK3588板卡上部署模型实现OCR应用

一、主机模型转换 我们依旧采用FastDeploy来部署应用深度学习模型到OK3588板卡上 进入主机Ubuntu的虚拟环境 conda activate ok3588 安装rknn-toolkit2&#xff08;该工具不能在OK3588板卡上完成模型转换&#xff09; git clone https://github.com/rockchip-linux/rknn-to…

CentOS7系统MBR、GRUB2、内核启动流程报错问题

目录 &#x1f969;Linux启动流程 &#x1f969;MBR修复 &#x1f36d;1、模拟损坏 &#x1f36d;2、重启测试 &#x1f36d;3、修复MBR &#x1f36d;4、测试系统 &#x1f969;GRUB2修复 &#x1f36d;1、模拟损坏 &#x1f36d;2、修复GRUB2 &#x1f36d;3、测试系统 &…

SpringBoot原理分析 | 安全框架:Shiro

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Shiro Shiro是一个安全框架&#xff0c;用于认证、授权和管理应用程序的安全性。它提供了一组易于使用的API和工具&#xff0c;可以帮助您轻松地添加安全性到您的应用…

Redis以及Java使用Redis

一、Redis的安装 Redis是一个基于内存的 key-value 结构数据库。 基于内存存储&#xff0c;读写性能高 适合存储热点数据&#xff08;热点商品、资讯、新闻&#xff09; 企业应用广泛 官网&#xff1a;https://redis.io 中文网&#xff1a;https://www.redis.net.cn/ Redis…

.NET网络编程——TCP通信

一、网络编程的基本概念 : 1. 网络 就是将不同区域的电脑连接到一起&#xff0c;组成局域网、城域网或广域网。把分部在不同地理区域的计算机于专门的外部设备用通信线路 互联成一个规模大、功能强的网络系统&#xff0c;从而使众多的计算机可以方便地互相传递信息&#xff0c…

Zabbix分布式监控Web监控

目录 1 概述2 配置 Web 场景2.1 配置步骤2.2 显示 3 Web 场景步骤3.1 创建新的 Web 场景。3.2 定义场景的步骤3.3 保存配置完成的Web 监控场景。 4 Zabbix-Get的使用 1 概述 您可以使用 Zabbix 对多个网站进行可用性方面监控&#xff1a; 要使用 Web 监控&#xff0c;您需要定…

QtC++ 技术分析4 - 流、d-pointer隐式共享以及容器迭代器

目录 QT 中的流文件系统与底层文件操作文件系统类 QFile QTextStreamQDataStreamQLocale 隐式共享与 d-pointer隐式共享d-pointer 在隐式共享中的应用二进制代码兼容d-pointer 模式实现 Qt 容器及迭代器QTL 概述几种常见的迭代器及其对应类型QTL 容器对应迭代器通用算法函子&am…

超全整理,Jmeter性能测试-常用Jmeter第三方插件详解(超细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Jmeter作为一个开…