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

news2024/10/6 8:38:01

刚学习python,心血来潮,使用wxPython和pillow开了一个简单的拼图小游戏,大家分享一下

wxPython是Python语言的一套优秀的GUI图形库,在此项目里主要用来开发GUI客户页面;Pillow是一个非常好用的图像处理库,在此项目中主要用来对图片进行填充、切割、保存等操作。

项目初始化

考虑到项目初始化时没有图片(本项目中没有设置默认图片),所以初始化时,创建了一个3*3的数字拼图

初始化要求,9个格子填充8个数字,空格相邻的可以进行点击移动,1-8随机占8个,而且要保证一定能够通过点击恢复成正确的顺序

 _can_move = {"0": [1, 3],
                 "1": [0, 2, 4],
                 "2": [1, 5],
                 "3": [0, 4, 6],
                 "4": [1, 3, 5, 7],
                 "5": [2, 4, 8],
                 "6": [3, 7],
                 "7": [4, 6, 8],
                 "8": [5, 7]
                 }

 def random_init(self):
     self.indices = []
     self._ideal = self.vac*self.vac-1
     for i in range(0, self.vac*self.vac-1):
         self.indices.append(i)
     self.can_move_init()  #初始化,可移动集合,生成的格式如上边的_can_move
     time = 1000*self.vac  #初始化时,随机移动的次数,1000*行数
     while time > 0:       #安装可移动规则,进行随机移动
        can_move = self._can_move[str(self._ideal)]
        idx = random.randrange(0, len(can_move))
        pos = can_move[idx]
        if pos in self.indices:
            self.indices[self.indices.index(pos)] = self._ideal
            self._ideal = pos
            time -= 1

def can_move_init(self):
    for i in range(0, self.vac*self.vac):
        temp_can_move = []
        if i - self.vac >= 0:
            temp_can_move.append(i - self.vac)
        if i%self.vac != 0:
            temp_can_move.append(i-1)
        if (i+1)%self.vac != 0:
            temp_can_move.append(i+1)
        if i + self.vac <= self.vac*self.vac:
            temp_can_move.append(i + self.vac)
        self._can_move[str(i)] = temp_can_move

 在GUI中展示,部分代码如下:

index = 0
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 += 1
    btn.SetBackgroundColour("#FFCC66")
    btn.SetFont(font)
    self.Bind(wx.EVT_BUTTON, self.OnClick, btn)  # 绑定格子的点击事件

初始化就先介绍到这儿,后续会继续和大家分享关于使用本地图片来加载游戏的方法,欢迎大家继续关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763146.html

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

相关文章

在 3ds Max 中对链模型进行摆放姿势处理

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 建模和“摆姿势”3D链可能看起来是一项繁琐的工作&#xff0c;但实际上可以通过使用阵列工具并将链中的链接视为骨骼来轻松完成。在本教程中&#xff0c;我将向您展示如何对链条进行建模&#xff0c;并通过…

FPGA-DFPGL22学习6-led

系列文章之 上章 FPGA-DFPGL22学习5-VERILOG 文章目录 系列文章之 上章前言一、原理图端口对应 二、程序设计三、程序编写四、仿真五、工程下载 前言 和原子哥一起学习FPGA 开发环境&#xff1a;正点原子 ATK-DFPGL22G 开发板 参考书籍&#xff1a; 《ATK-DFPGL22G之FPGA开…

linux定时删除三天前的binlog日志(docker)

docker的mysql的binlog日志目录 # docker inspect bb61c3c5a7e8shell脚本 写先一个删除的shell脚本 auto-del.sh 真正删除之前&#xff0c;先用下面的语句查下是不是要删除的文件&#xff0c;这里是删除三天前的日志 find /var/lib/docker/volumes/xxxx/_data/ -mtime 3 -n…

C++--day2(字符串、引用、函数重载、哑元)

​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​

【多模态】2、NLTK | 自然语言处理工具包简介

文章目录 一、什么是 NLTK 包二、如何使用三、phrase grounding 使用 NLTK 示例 一、什么是 NLTK 包 NLTK 全称是 Natural Language Toolkit&#xff0c;自然语言处理工具包&#xff0c;是 NLP 领域中常用的 python 库 NLTK 的作用&#xff1a; 语料库文本预处理&#xff1a…

dp算法 力扣123 买卖股票的最佳时机 III

本文是Java代码编写 123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 一、题目详情 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xf…

基于R语言Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合方法与应用

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

【MySQL】约束(三)

&#x1f697;MySQL学习第三站~ &#x1f6a9;本文已收录至专栏&#xff1a;MySQL通关路 ❤️每章节附章节思维导图&#xff0c;文末附全文思维导图&#xff0c;感谢各位点赞收藏支持~# 一.引入 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 使用约束可…

DuiLib基本流程解析

文章目录 1、DuiLib基本流程 1、DuiLib基本流程 duilib的基本流程如上图&#xff0c;通过解析一个xml文件&#xff0c;将文件中的内容渲染为窗口界面&#xff0c;这个解析过程由WindowImplBase类来完成。 基本框架如下&#xff1a; 首先在公共头文件中加入如下内容&#xff1a…

python与深度学习(一):ANN和手写数字识别

目录 1. 神经网络2. 线性回归3. 激活函数3.1 Sigmoid函数3.2 Relu函数3.3 Softmax函数 4. ANN(全连接网络)模型结构5. 误差函数5.1 均方差误差函数5.2 交叉熵误差函数 6. 手写数字识别实战6.1 工具说明6.2 导入相关库6.3 加载数据6.4 数据预处理6.5 数据处理6.6 构建网络模型6.…

MySQL 备份和还原

目录 一、数据备份的重要性 二、数据库备份类型 2.1 物理备份 2.2 逻辑备份 1.完全备份 2.差异备份 3.增量备份 三、常见的备份方法 3.1 物理冷备 3.2 专用备份工具 mysqldump 或 mysqlhotcopy 3.3 启用二进制日志进行增量备份 3.4 第三方工具备份 四、MySQL完全备份…

HJ53 杨辉三角的变形

描述 以上三角形的数阵&#xff0c;第一行只有一个数1&#xff0c;以下每行的每个数&#xff0c;是恰好是它上面的数、左上角数和右上角的数&#xff0c;3个数之和&#xff08;如果不存在某个数&#xff0c;认为该数就是0&#xff09;。 求第n行第一个偶数出现的位置。如果没…

v-bind复习

1.v-bind 绑定元素属性  前端讲的一系列指令&#xff0c;主要是将值插入到模板内容中。  但是&#xff0c;除了内容需要动态来决定外&#xff0c;某些属性我们也希望动态来绑定。  比如动态绑定 a 元素的 href 属性&#xff1b;  比如动态绑定 img 元素的 src 属性&am…

企业数字化转型的“有为”与“数字化”

对企业而言&#xff0c;推动数字化转型势在必行&#xff0c;但困难重重&#xff0c;需要破旧立新的战略设计&#xff0c;更需要循序渐进的策略部署。对企业而言&#xff0c;唯有坚持“有为数据、有为组织、有为决策、有为创新”的理念和目标&#xff0c;探索战略、设施、资源、…

Python对Excel不同的行分别复制不同的次数

本文介绍基于Python语言&#xff0c;读取Excel表格文件数据&#xff0c;并将其中符合我们特定要求的那一行加以复制指定的次数&#xff0c;而不符合要求的那一行则不复制&#xff1b;并将所得结果保存为新的Excel表格文件的方法。 这里需要说明&#xff0c;在我们之前的文章Pyt…

动态规划——粉刷房子

题目链接 leetcode在线oj题——粉刷房子 题目描述 假如有一排房子&#xff0c;共 n 个&#xff0c;每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种&#xff0c;你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然&#xff0c;因为市场上不同颜色油…

NTFS权限

文章目录 一、NTFS权限概述二、文件系统概述三、NTFS文件系统特点1. 提高磁盘读写性能2. 可靠性3. 磁盘利用率4. 支持单个文件大于4个G 四、修改NTFS权限1. 取消权限继承2. 文件及文件夹权限3. 权限累加4. 拒绝最大5. 取得所有权6. 强制继承7. 文件复制对权限的影响 一、NTFS权…

天津良心python培训班品牌(Python开发的主要领域)

Python可以用于各种领域&#xff0c;如数据科学、机器学习、人工智能、网络编程等等&#xff0c;因此&#xff0c;学习Python可以为零基础同学提供广泛的职业选择&#xff0c;并为其他编程语言打下坚实的基础。 自学python要多久 python是一门非常适合初学者入门的编程语言&a…

Resultful风格代码代码实践

1.原则 GET 查询 POST 添加 PUI(全字段更新)、PATCH(更新部分字段)更新 DELETE 删除 2.使用复数名词 user> users car > cars product > products 3.请求和响应时候指定accpect: RequestBody reponse: ResponseBody 4.资源唯一标识在通过参数传递时使用路径传递传递 u…

128TB只要128元,国产山寨 SSD 把老外割疯了

国产颗粒崛起带动的 SSD 白菜价&#xff0c;你永远不知道现在的史低价是不是又在山顶。 不过&#xff0c;我如果拿出几乎1折的 990 Pro &#xff0c;阁下应该如何应对&#xff1f; 正如上图所见&#xff0c;Amazon、AliExpress、Ebay 等老外用的网购平台上有很多这样「做慈善」…