当前位置: 首页 > 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;基于逐月数据我们采用求年平均值的方法得到逐年最高…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...