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

news2024/12/22 16:37:44

刚学习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/746177.html

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

相关文章

Python编译器Pycharm使用技巧

欢迎来到mo的python学习之路 目录 pycharm一些小技巧 1.更换pycharm主题颜色 1.1默认颜色 1.2设置其他颜色 2.汉化 2.1具体操作 3. 创建python包和文件 &#xff0c;运行python文件 3.1创建python包 3.2创建python文件 3.3运行python文件 3.快捷方式 pycharm一些小技巧 …

2023年11月软考高级网络规划设计师报名时间-报名入口-报名流程

软考高级网络规划设计师报名时间&#xff1a; 广东2023下半年软考高级网络规划设计师报名时间&#xff1a;8月16日9:00-8月24日17:00 江西2023下半年软考高级网络规划设计师报名时间&#xff1a;8月15日9点-9月8日17点 安徽2023下半年软考高级网络规划设计师报名时间&#x…

NTIRE 2023 Challenge on Efficient Super-Resolution——RepRFN:当RFDN遇到重参数化

RepRFN&#xff1a;当RFDN遇到重参数化 0. 简介 NTIRE 的全称为New Trends in Image Restoration and Enhancement Challenges&#xff0c;即“图像复原和增强挑战中的新趋势”&#xff0c;是CVPR(IEEE Conference on Computer Vision and Pattern Recognition)举办的极具影响…

终端关于GPU的命令行

1.了解GPU的资源利用情况&#xff1a; nvidia-smi 2.实时刷新&#xff08;1秒&#xff09;&#xff1a; nvidia-smi -l 1 3.配合watch命令可实时显示GPU运行状态&#xff1a; watch -n 1 nvidia-smi 其中 1 为刷新的时间间隔。 4.将监控结果写入文件&#xff0c;并且指定…

又是一条慢 SQL 改写,拿捏!

作者分享了一条慢 SQL 分析和优化的过程&#xff0c;总结出切实有效的优化手段。 作者&#xff1a;马文斌 MySQL 爱好者。 本文来源&#xff1a;原创投稿 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 背景 开发同学丢…

苹果M1/M2 Mac正式支持运行Win11

微软与虚拟化软件 Parallels 达成合作&#xff0c;允许在 Apple M1 和 M2 Mac 上的虚拟环境中运行 Windows 11。“Parallels Desktop 版本 18 是一个授权解决方案&#xff0c;用于在其平台上的 Apple M1 和 M2 计算机上的虚拟环境中运行 Arm 版本的 Windows 11 Pro 和 Windows …

算法学习 day23

669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有被移除&#xff0c;原有的父代…

【高级程序设计语言C++】初识模板

1. 函数模板1.1函数模板的实例化1.2显示实例化1.3模板参数的匹配原则 2.类模板2.1类模板的定义格式2.2类模板的实例化 1. 函数模板 概念&#xff1a; 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型产生函…

字符串模式匹配算法(暴力破解、KMP、BM、Sunday)

目录 暴力破解 KMP 算法 构造 next 数组 KMP代码 BM 算法 Sunday 算法 参考资料 又通过leetcode复习了之前的知识:找出字符串中第一个匹配项的下标 暴力破解 你的面前有两段序列 S 和 T&#xff0c;你需要判断 T 是否可以匹配成为 S 的子串。 你可能会凭肉眼立即得出结…

11万字智慧环卫管理平台综合解决方案2023

导读&#xff1a;原文《11万字智慧环卫管理平台综合解决方案word2023》word&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 目 录 第1章 项目概述 1.1 项目名称 …

Java安全——SSL和HTTPS

Java安全 SSL和HTTPS SSL提供了在TCP套接字之上的对数据进行加密的方法&#xff0c;也是HTTPS协议的基础利用JSSE(java安全套接字扩展包)可以像处理协议一样创建和使用SSL套接字&#xff0c;从而支持HTTPS协议SSL和tcp套接字之间的紧密关系&#xff0c;本身并不是一个加密引擎…

PyTorch预训练和微调:以VGG16为例

文章目录 预训练和微调代码测试结果参考来源 预训练和微调代码 数据集&#xff1a;CIFAR10 CIFAR-10数据集由10类32x32的彩色图片组成&#xff0c;一共包含60000张图片&#xff0c;每一类包含6000图片。其中50000张图片作为训练集&#xff0c;10000张图片作为测试集。数据集介…

16. 替换空格

链接&#xff1a; 链接 题目&#xff1a; 请实现一个函数&#xff0c;把字符串中的每个空格替换成"%20"。 数据范围 0≤0≤ 输入字符串的长度 ≤1000≤1000。 注意输出字符串的长度可能大于 10001000。 样例 输入&#xff1a;"We are happy."输出&#xff…

python简易版的飞机大战(图片资源请自找)

# 引入pygame工具包 import pygame from pygame.locals import * import time import random import sys # 初始化pygame pygame.init() # 创建一个宽480高650的一个画布canvas canvas pygame.display.set_mode((480, 650)) # 加工图片资源 bg pygame.image.load(bg.png)# 背…

Vue3之app.config.globalProperties(定义全局变量)

使用之因 一般我们在vue开发中&#xff0c;常用的功能&#xff0c;接口等等我们都会封装起来&#xff0c;如何每次创建一个组件&#xff0c;想要使用这些封装起来的功能、接口等等都需要先引入&#xff0c;再通过层层调用才可以得到结果&#xff0c;如果我现在一遍需要调用后端…

多旋翼物流无人机节能轨迹规划(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

海外品牌推广:谷歌没收录?这些常见错误你可别犯!

你们是否曾经遇到过这样的情况&#xff1a;你在海外市场努力推广你的品牌&#xff0c;但是发现谷歌搜索结果中竟然找不到你的网站或品牌&#xff1f;别担心&#xff0c;你可能犯了一些常见的错误&#xff0c;让谷歌把你的品牌忽略掉了。让我们来看看这些错误&#xff0c;确保你…

3dsmax图纸怎么加密?

对设计行业来说&#xff0c;公司重要的设计图纸是一个企业非常重要的核心数据是命脉&#xff0c;那么具有如此重要性的3Dmax设计文件怎么才能确保文件的安全&#xff0c;避免竞争对手骗方案或者内部人员有意无意的泄密呢&#xff1f; 相信有很多老板或许都会遇到这样的问题。很…

❤️创意网页:有趣的文字冒险游戏(可以无限拓展)

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

图片转pdf怎么在线转?看看这几种在线转方法

图片转pdf怎么在线转&#xff1f;图片转PDF是一个非常常见的需求&#xff0c;因为在很多情况下&#xff0c;我们需要将一些图片文件转换为PDF文件格式&#xff0c;以便于传输、打印或者共享。如果你想在线转换图片为PDF文件&#xff0c;下面就给大家推荐几种简单实用的转换方法…