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

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

游戏用时的计算

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

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.mzph.cn/news/8240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【雕爷学编程】Arduino动手做(88)---水流量传感器模块3

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

Springboot初识(二)

文章目录 前言一.Spring配置文件1.1 配置文件的作用1.2 配置文件的类型 二.properties配置⽂件说明2.1 基本语法2.2 读取配置文件 三.yml 配置⽂件说明2.1 基本语法2.2 读取配置文件2.3 注意事项 前言 上篇文章我们介绍了什么是SpringBoot和怎么去创建一个SpringBoot项目,现在…

13.5.3 【Linux】PAM 模块设置语法

PAM 借由一个与程序相同文件名的配置文件来进行一连串的认证分析需求。我们同样以passwd 这个指令的调用 PAM 来说明好了。 当你执行 passwd 后,这支程序调用 PAM 的流程是: 1. 使用者开始执行 /usr/bin/passwd 这支程序,并输入密码&#xf…

基于Java+SpringBoot+vue前后端分离在线商城系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

spring 存储对象 + 获取对象

前言 本篇在spring中如何使用五大类注释与方法注释将对象加入IOC容器中,了解如何使用注释来获取容器中的Bean对象,如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录 前言1.通过注释将类加入IoC…

【云计算小知识】云环境是什么意思?有什么优点?

随着云计算的快速发展,了解云计算相关知识也是运维人员必备的。那你知道云环境是什么意思?有什么优点?云环境安全威胁有哪些?如何保证云环境的运维安全?这里我们就来简单聊聊。 云环境是什么意思? 云环境是…

SpringBoot中配置文件的加载

springboot 启动会扫描一下位置的application.properties或者application.yml文件作为springboot的默认配置文件 file:./config/(项目根目录config文件夹下的配置文件) file:./(项目根目录下的配置文件) classpath:/config/(resources目录config文件下的配置文件) classpat…

如何在3ds max中创建可用于真人场景的巨型机器人:第 2 部分

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 创建主体 步骤 1 打开 3ds Max。选择机器人头部后,二次单击鼠标并选择隐藏未选中。机器人的其他部分 除了头部之外,将被隐藏。 打开 3ds Max 步骤 2 在人脸选择模式下&#x…

C++类与对象 - 2(构造函数和析构函数)(超详细)

构造函数和析构函数 - 超详细讲解 1. 构造函数1.1 概念1.2特性 2. 析构函数2.1 概念2.2特性 1. 构造函数 1.1 概念 对于以下Date类&#xff1a; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout <&l…

C语言float类型学习

C语言的小数类型有两种&#xff0c;float和double&#xff1b; float 称为单精度浮点型&#xff0c;double 称为双精度浮点型&#xff1b; float 占用4个字节&#xff0c;double 占用8个字节&#xff1b; 下面看一下float&#xff1b; #include <stdio.h>int main() {…

电脑记事本在哪里?电脑桌面显示记事本要怎么设置?

绝大多数上班族在使用电脑办公时&#xff0c;都需要随手记录一些琐碎或重要的事情&#xff0c;例如工作注意事项、常用的文案、某项工作的具体要求、多个平台的账号和密码等。于是就有不少小伙伴想要使用电脑记事本软件来记录&#xff0c;那么电脑记事本在哪里呢&#xff1f;想…

JAVA基础-集合的工具类Collections

目录 引言 一&#xff0c;Collections工具类的操作方法方法 1&#xff0c;排序操作 2&#xff0c;替换 和 查找操作 二&#xff0c;Collections工具类的使用 2.1&#xff0c;排序操作 2.1.1&#xff0c;集合的逆序 2.1.2&#xff0c;集合的随机排序 2.1.3&#xff0c;集…

SkyWalking链路追踪中Trace概念以及Trace与span的关系

基本概念 在SkyWalking链路追踪中&#xff0c;Trace&#xff08;追踪&#xff09;是指一个请求或者一个操作从开始到结束的完整路径。它涵盖了分布式系统中所有相关组件的调用关系和性能信息。 具体来说&#xff0c;Trace包含了一系列的span&#xff08;跨度&#xff09;&…

【C#】.Net Framework框架使用JWT

2023年&#xff0c;第31周&#xff0c;第2篇文章。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; 本篇文章主要简单讲讲&#xff0c;.Net Framework框架下使用JWT的代码例子&#xff0c;以及他们的基本概念。 2002年微软发布了.net framewo…

GFLv2 论文学习

1. 解决了什么问题&#xff1f; 预测定位质量对于目标检测很重要&#xff0c;在 NMS 时它能提供准确的得分排序&#xff0c;提高模型的表现。现有方法都是通过分类或回归的卷积特征来预测定位质量得分。 2. 提出了什么方法&#xff1f; 受到 GFLv1 的 general distribution …

前端开发实习总结参考范文(合集)

▼前端开发实习总结篇一 今天就简单聊聊上面的StrutsSpringHibernate吧。 Struts 代表&#xff1a;表示层;Spring代表&#xff1a;业务逻辑层;Hibernate则代表持久层。他们是目前在Java Web编程开发中用得最多的框架&#xff0c;其实这样区分是为了适应软件开发过程中各个分工…

Shell输出帮助手册

代码&#xff1a; 帮助手册雏形 function help(){echo -e "Help manual":echo -e " -h. -- help View the help manual"echo -e " install Installation"echo -e " uninstall Uninstall" }case "$1&qu…

【stable diffusion】保姆级入门课程05-Stable diffusion(SD)图生图-涂鸦重绘的用法

1.什么是涂鸦重绘 涂鸦重绘又称手涂蒙版。 简单来说&#xff0c;局部重绘手涂蒙版 就是涂鸦局部重绘的结合体&#xff0c;这个功能的出现是为了解决用户不想改变整张图片的情况下&#xff0c;对多个元素进行修改。 功能支持&#xff1a; 1.支持蒙版功能 2.笔刷决定绘制的元素…

基于Java+SpringBoot+Vue前后端分离摄影分享网站平台系统

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

用Python实战,畅享音乐海洋,一键采集你喜爱的音乐!

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用: requests >>> pip install requests re 第三方模块安装方法&#xff1a; win R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速…