当前位置: 首页 > news >正文

Python小游戏21——拼图小游戏

 

使用了Pygame库来创建图形界面。请确保你已经安装了Pygame库(可以使用pip install pygame来安装)。

  • 运行结果展示

2ac5688a293d44d595a4c669353dedcd.png 

  • 代码展示

python

import pygame

import sys

import random

 

# 初始化Pygame

pygame.init()

 

# 设置屏幕尺寸

screen_width, screen_height = 600, 600

screen = pygame.display.set_mode((screen_width, screen_height))

pygame.display.set_caption("拼图游戏")

 

# 加载图像

image = pygame.image.load('your_image.jpg') # 替换为你的图像文件路径

image = pygame.transform.scale(image, (300, 300)) # 调整图像大小以适应拼图

 

# 创建拼图块

tile_size = 100

tiles = [image.subsurface((x, y, tile_size, tile_size)) for x in range(0, 300, tile_size) for y in range(0, 300, tile_size)]

random.shuffle(tiles) # 打乱拼图块顺序

 

# 定义变量

selected_tile = None

tile_rects = [pygame.Rect(x, y, tile_size, tile_size) for x in range(0, 300, tile_size) for y in range(0, 300, tile_size)]

tile_positions = [(x, y) for x in range(0, 300, tile_size) for y in range(0, 300, tile_size)]

random.shuffle(tile_positions)

 

# 游戏循环

running = True

while running:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False

        elif event.type == pygame.MOUSEBUTTONDOWN:

            mouse_pos = pygame.mouse.get_pos()

            for i, rect in enumerate(tile_rects):

                if rect.collidepoint(mouse_pos):

                    selected_tile = tiles[i]

                    selected_rect = rect.copy()

                    break

        elif event.type == pygame.MOUSEBUTTONUP:

            if selected_tile:

                mouse_pos = pygame.mouse.get_pos()

                for i, (pos, _) in enumerate(zip(tile_positions, tiles)):

                    rect = pygame.Rect(pos, (tile_size, tile_size))

                    if rect.collidepoint(mouse_pos) and tiles[i] != selected_tile:

                        # 交换拼图块位置

                        tiles[i], selected_tile = selected_tile, tiles[i]

                        tile_positions[i], selected_rect.topleft = selected_rect.topleft, pos

                        selected_tile = None

 

    # 绘制

    screen.fill((255, 255, 255))

    for tile, pos in zip(tiles, tile_positions):

        screen.blit(tile, pos)

 

    if selected_tile:

        screen.blit(selected_tile, selected_rect.topleft)

 

    pygame.display.flip()

 

pygame.quit()

sys.exit()

 

  • 请注意以下几点:

将'your_image.jpg'替换为你自己的图像文件路径。

图像大小应该适应3x3的拼图块,即图像宽度和高度都应该是tile_size * 3(在这个例子中是300x300)。如果图像大小不同,你需要调整tile_size和图像缩放代码。

这个示例没有实现图像还原完成后的检查逻辑。你可以通过比较tiles列表中的拼图块顺序与原始顺序来判断拼图是否完成。

你可以添加更多的功能和改进,比如计时器、分数、难度选择等。

  • 知识点总结

1. Pygame库基础

初始化Pygame:使用pygame.init()来初始化Pygame库,这是使用Pygame进行任何游戏开发的第一步。

设置屏幕尺寸:使用pygame.display.set_mode()来设置游戏的屏幕尺寸和模式。

事件处理:通过pygame.event.get()来获取游戏事件,如鼠标点击、键盘按键等,并据此进行游戏逻辑的处理。

绘制图形:使用screen.blit()方法将图像或形状绘制到屏幕上。

更新屏幕:使用pygame.display.flip()或pygame.display.update()来更新屏幕显示。

2. 图像处理

加载图像:使用pygame.image.load()来加载图像文件。

调整图像大小:使用pygame.transform.scale()来调整图像的大小,以适应拼图游戏的需求。

创建拼图块:通过image.subsurface()方法从原始图像中裁剪出拼图块。

3. 数据结构和算法

列表和循环:使用列表来存储拼图块和它们的位置,通过循环来遍历这些列表并进行操作。

随机打乱顺序:使用random.shuffle()方法来随机打乱拼图块或它们的位置的顺序。

碰撞检测:使用pygame.Rect对象的collidepoint()方法来检测鼠标点击位置是否与拼图块相交。

4. 游戏逻辑

状态管理:通过变量(如selected_tile)来跟踪游戏的状态,如当前选中的拼图块。

事件响应:根据鼠标点击事件来选中或移动拼图块。

交换拼图块:在鼠标释放时,根据当前选中的拼图块和目标位置来交换拼图块。

5. 用户界面和交互

设置游戏标题:使用pygame.display.set_caption()来设置游戏的窗口标题。

处理退出事件:通过检测pygame.QUIT事件来优雅地退出游戏。

6. 优化和扩展

性能优化:通过减少不必要的屏幕更新和图像处理来优化游戏的性能。

增加难度:通过增加拼图块的数量或调整拼图块的形状来增加游戏的难度。

添加音效和动画:使用Pygame的音效和动画功能来增强游戏的沉浸感和趣味性。

保存和加载进度:通过文件操作来保存和加载游戏的进度,以便玩家可以在不同时间继续游戏。

相关文章:

Python小游戏21——拼图小游戏

使用了Pygame库来创建图形界面。请确保你已经安装了Pygame库(可以使用pip install pygame来安装)。 运行结果展示 代码展示 python import pygame import sys import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width, screen_height …...

C# 常用的测试框架合集

在 C# 开发中,拥有强大的测试框架是确保代码质量和稳定性的关键。本文将介绍一些 C# 中常用的测试框架,帮助你更好地进行单元测试、集成测试等各类测试工作。 一、NUnit 简介 NUnit 是一个广泛使用的开源测试框架,专为.NET 平台设计。它提供…...

Android——从相机/相册获取图片

从相机获取图片 设置权限 <uses-permission android:name"android.permission.CAMERA" />点击跳转 private static final int REQUEST_CODE_TAKE 1;public void takePhoto(View view) {if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAM…...

MySQL 数据库基准测试报告

MySQL 数据库基准测试报告 1. 引言 数据库基准测试是一项重要的性能评估活动&#xff0c;旨在通过模拟实际的工作负载&#xff0c;测试数据库在不同条件下的表现。这些测试有助于发现性能瓶颈并提供优化的依据。在本报告中&#xff0c;我们将基于 sysbench 工具对 MySQL 数据…...

计算机毕业设计Python+大模型神经网络电影推荐 知识图谱图神经网络电影推荐可视化系统 注意力机制 秒杀同类电影推荐项目 GNN GAT

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

Python | Leetcode Python题解之第543题二叉树的直径

题目&#xff1a; 题解&#xff1a; class Solution:def diameterOfBinaryTree(self, root: TreeNode) -> int:self.ans 1def depth(node):# 访问到空节点了&#xff0c;返回0if not node:return 0# 左儿子为根的子树的深度L depth(node.left)# 右儿子为根的子树的深度R …...

【浪潮商城-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…...

如何设置VSCODE快捷键光标移到行首和行尾

{ "key": "cmdhome", "command": "cursorTop", },{ "key": "cmdend", "command": "cursorBottom", }...

Android——多线程、线程通信、handler机制

Android——多线程、线程通信、handler机制 模拟网络请求&#xff0c;会阻塞主线程 private String getStringForNet() {StringBuilder stringBuilder new StringBuilder();for (int i 0; i < 100; i) {stringBuilder.append("字符串" i);}try {Thread.sleep(…...

Java | Leetcode Java题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; class Solution {static int[][] dirs {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public int[][] updateMatrix(int[][] matrix) {int m matrix.length, n matrix[0].length;// 初始化动态规划的数组&#xff0c;所有的距离值都设置为一个很大…...

docker安装低版本的jenkins-2.346.3,在线安装对应版本插件失败的解决方法

提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、网上最多的默认解决方法1、jenkins界面配置清华源2、替换default.json文件 二、解决低版本Jenkins在线安装插件问题1.手动下载插件并导入2.低版本jenkins在…...

CSS3新增渐变(线性渐变、径向渐变、重复渐变)

1.线性渐变 代码&#xff1a; 效果图&#xff1a; 使文字填充背景颜色&#xff1a; 效果图&#xff1a; 2.径向渐变 代码&#xff1a; 效果图&#xff1a; 代码图&#xff1a; 效果图&#xff1a; 3.重复渐变 代码&#xff1a; 效果图&#xff1a;...

汽车免拆诊断案例 | 2017款凯迪拉克XT5车组合仪表上的指针均失灵

故障现象 一辆2017款凯迪拉克XT5车&#xff0c;搭载LTG 发动机&#xff0c;累计行驶里程约为17.2万km。车主反映&#xff0c;组合仪表上的发动机转速表、车速表、燃油表及发动机冷却液温度表的指针均不指示&#xff0c;但发动机起动及运转正常&#xff0c;且车辆行驶正常。 故…...

Cloudera Hue深度解析:安装、配置到高级用法

Hue的介绍 HUE 是一个开源的 Apache Hadoop UI 系统&#xff0c;早期由 Cloudera 开发&#xff0c;它是基于 Python Web 框架 Django 实现&#xff0c;后来贡献给开源社区。它包括 3 个部分 hue ui&#xff0c;hue server&#xff0c; hue db。通过使用 Hue 我们可以通过浏览…...

17、论文阅读:VMamba:视觉状态空间模型

前言 设计计算效率高的网络架构在计算机视觉领域仍然是一个持续的需求。在本文中&#xff0c;我们将一种状态空间语言模型 Mamba 移植到 VMamba 中&#xff0c;构建出一个具有线性时间复杂度的视觉主干网络。VMamba 的核心是一组视觉状态空间 (VSS) 块&#xff0c;搭配 2D 选择…...

GPT-5 一年后发布?对此你有何期待?

GPT-5 一年后发布&#xff1f;对此你有何期待&#xff1f; 在最新技术的洪流中&#xff0c;GPT-5即将登场。你是否在思考&#xff0c;它将为我们的生活和工作带来哪些变革&#xff1f;接下来的探索&#xff0c;或许可以启发你对未来的想象。让我们一起深入这场关于未来AI语言模…...

2024中国国际数字经济博览会:图为科技携明星产品引领数智化潮流

10月24日&#xff0c;全球数智化领域的目光齐聚于中国石家庄正定&#xff0c;一场关于数字经济未来的盛会—2024中国国际数字经济博览会在此拉开帷幕。 云边端算力底座的领航者&#xff0c;图为科技携其明星产品惊艳亮相&#xff0c;期待与您共赴一场数智化的非凡之旅&#xff…...

大模型面试题:常见的微调方法有哪些说下原理并对比

更多实时面试题总结请关注我的公众号"算法狗" 或移步至 https://pica.zhimg.com/80/v2-7fd6e77f69aa02c34ca8c334870b3bcd_720w.webp?sourced16d100b 这里说的微调主要是指参数微调&#xff0c;参数微调的方法主要有以下几种&#xff1a; Adapter 在预训练模型每一层…...

CentOS 9 Stream 上安装 PostgreSQL 16

CentOS 9 Stream 上安装 PostgreSQL 16 CentOS 9 Stream 上安装 PostgreSQL 16设置密码并且远程连接 CentOS 9 Stream 上安装 PostgreSQL 16 在 CentOS 9 Stream 上安装 PostgreSQL 16 可以通过以下步骤完成&#xff1a; 添加 PostgreSQL 官方仓库&#xff1a; PostgreSQL 提…...

【数据分享】1901-2023年我国省市县镇四级的逐年最高气温数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月最高气温栅格数据和Excel和Shp格式的省市县镇四级逐月最高气温数据&#xff0c;原始的逐月最高气温栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据&#xff01;基于逐月数据我们采用求年平均值的方法得到逐年最高…...

从BIOS到BMC:手把手拆解Redfish协议在服务器开机时的‘数据握手’全过程

从BIOS到BMC&#xff1a;手把手拆解Redfish协议在服务器开机时的‘数据握手’全过程 凌晨3点的数据中心&#xff0c;一台刚上电的服务器正以毫秒级速度完成自检。在这不足5秒的瞬间里&#xff0c;BIOS与BMC之间正通过Redfish协议进行着精密的数据舞蹈——这不是简单的信息交换&…...

微电网集中式架构vs分布式架构:设计差异与选型依据

微电网作为整合“源、储、荷、网”的新型能源系统&#xff0c;其架构设计直接决定系统的运行效率、可靠性、扩展性与经济性&#xff0c;是微电网规划建设的核心环节。在微电网主流架构中&#xff0c;集中式架构与分布式架构凭借各自的技术特性&#xff0c;适配不同的应用场景与…...

学网络安全需要学编程吗?

作为数字化时代的守护者岗位&#xff0c;网络安全一直备受瞩目并引发热议&#xff0c;那么学网络安全需要学编程吗?学多久才可以就业?我们通过这篇文章来了解一下。学网络安全需要学编程吗?当然需要&#xff0c;网络安全需要学习编程。编程能力是网络安全领域的基础技能之一…...

点云处理实战:如何用RMLS算法保留锐利边缘(附Python代码示例)

点云处理实战&#xff1a;RMLS算法在锐利边缘保留中的工程实践 当你在处理3D扫描数据时&#xff0c;是否经常遇到这样的困扰——经过滤波处理后&#xff0c;原本清晰的物体边缘变得模糊不清&#xff1f;这正是传统移动最小二乘(MLS)算法的痛点所在。作为计算机视觉工程师&#…...

终极指南:REFramework - 让RE引擎游戏体验焕然一新的完整解决方案

终极指南&#xff1a;REFramework - 让RE引擎游戏体验焕然一新的完整解决方案 【免费下载链接】REFramework REFramework 是 RE 引擎游戏的 mod 框架、脚本平台和工具集&#xff0c;能安装各类 mod&#xff0c;修复游戏崩溃、卡顿等问题&#xff0c;还有开发者工具&#xff0c;…...

电磁波相关(AI回答)

物质都会吸收多种频率&#xff08;或波段&#xff09;的电磁波 是的&#xff0c;绝大多数物质都会吸收多种频率&#xff08;或波段&#xff09;的电磁波&#xff0c;而不是只吸收单一频率。这正是我们前面讨论的选择性吸收在实际中的体现&#xff1a;物质内部有多种微观能量模…...

Switch模拟器Ryujinx全攻略:从安装到优化的跨平台游戏体验

Switch模拟器Ryujinx全攻略&#xff1a;从安装到优化的跨平台游戏体验 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Switch模拟器Ryujinx是一款用C#编写的开源项目&#xff0c;它能让…...

tcc-g15:硬件级散热控制的开源替代方案 | 轻量无广告设计

tcc-g15&#xff1a;硬件级散热控制的开源替代方案 | 轻量无广告设计 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 tcc-g15作为Dell G15系列游戏本的开源替代…...

利用akshare构建涨停板股票数据分析系统

1. 为什么需要涨停板数据分析系统 在股票市场中&#xff0c;涨停板是一个非常重要的信号。当某只股票的价格涨幅达到当日上限时&#xff0c;就会触发涨停机制&#xff0c;这意味着市场对该股票的需求非常旺盛。对于投资者来说&#xff0c;及时捕捉涨停板股票的特征和规律&#…...

Cursor Pro激活器技术深度解析:突破API限制的逆向工程实践

Cursor Pro激活器技术深度解析&#xff1a;突破API限制的逆向工程实践 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your…...