Python自制图片拼图小游戏

news2025/8/7 16:40:55

前言

唉,怎么说,感觉只有上班的时候摸鱼玩游戏才是最爽的

等于带薪摸鱼,现在不是有点流行说什么 带薪…带薪** 干嘛的

今天也是有点无聊,就想起之前搞了个拼图的小游戏,可以自己更改照片的 嘿嘿

这不刚玩了一局,就来分享给你们了

请添加图片描述

前期准备

字体文件

请添加图片描述

图片素材

请添加图片描述

这个你们可以自己准备,也可以找我拿哈

代码展示

导入模块

源码.点击领取即可

import os
import sys
import random
import pygame
from pygame.locals import *

定义一些常量

BACKGROUNDCOLOR = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
BLACK = (0, 0, 0)
FPS = 40
NUMRANDOM = 100

退出

def Stop():
	pygame.quit()
	sys.exit()

判断游戏是否结束

python学习交流Q群:770699889 ### 源码领取
def isOver(board, size):
	try:
		num_cells = size * size
	except:
		num_cells = size[0] * size[1]
	for i in range(num_cells-1):
		if board[i] != i:
			return False
	return True

将空白Cell左边的Cell右移到空白Cell位置

def moveR(board, blank_cell_idx, num_cols):
	if blank_cell_idx % num_cols == 0:
		return blank_cell_idx
	board[blank_cell_idx-1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-1]
	return blank_cell_idx-1

将空白Cell右边的Cell左移到空白Cell位置

def moveL(board, blank_cell_idx, num_cols):
	if (blank_cell_idx+1) % num_cols == 0:
		return blank_cell_idx
	board[blank_cell_idx+1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+1]
	return blank_cell_idx+1

将空白Cell上边的Cell下移到空白Cell位置

def moveD(board, blank_cell_idx, num_cols):
	if blank_cell_idx < num_cols:
		return blank_cell_idx
	board[blank_cell_idx-num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-num_cols]
	return blank_cell_idx-num_cols

将空白Cell下边的Cell上移到空白Cell位置

def moveU(board, blank_cell_idx, num_rows, num_cols):
	if blank_cell_idx >= (num_rows-1) * num_cols:
		return blank_cell_idx
	board[blank_cell_idx+num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+num_cols]
	return blank_cell_idx+num_cols

获得打乱的拼图

python学习交流Q群:770699889 ### 源码领取
def CreateBoard(num_rows, num_cols, num_cells):
	board = []
	for i in range(num_cells):
		board.append(i)
	# 去掉右下角那块
	blank_cell_idx = num_cells - 1
	board[blank_cell_idx] = -1
	for i in range(NUMRANDOM):
		# 0: left, 1: right, 2: up, 3: down
		direction = random.randint(0, 3)
		if direction == 0:
			blank_cell_idx = moveL(board, blank_cell_idx, num_cols)
		elif direction == 1:
			blank_cell_idx = moveR(board, blank_cell_idx, num_cols)
		elif direction == 2:
			blank_cell_idx = moveU(board, blank_cell_idx, num_rows, num_cols)
		elif direction == 3:
			blank_cell_idx = moveD(board, blank_cell_idx, num_cols)
	return board, blank_cell_idx

随机选取一张图片

def GetImagePath(filepath):
	imgs = os.listdir(filepath)
	if len(imgs) == 0:
		raise ValueError('No pictures in <%s>...' % filepath)
	return os.path.join(filepath, random.choice(imgs))

游戏结束界面

源码.点击领取即可

def ShowEndInterface(screen, width, height):
	screen.fill(BACKGROUNDCOLOR)
	font = pygame.font.Font('font/simkai.ttf', width // 8)
	title = font.render('Finished!', True, (233, 150, 122))
	rect = title.get_rect()
	rect.midtop = (width/2, height/2.5)
	screen.blit(title, rect)
	pygame.display.update()
	pygame.time.wait(500)
	while True:
		for event in pygame.event.get():
			if event.type == QUIT:
				Stop()
			elif event.type == KEYDOWN:
				if event.key == K_ESCAPE:
					Stop()

效果展示

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

最后

今天的分享到这里就结束了

给大家推荐一些Python视频教程,希望对大家有所帮助:

Python零基础教学合集

对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

请添加图片描述

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

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

相关文章

【Python】Pyside6简易版教程

文章目录一、安装及常见指令1.1 安装1.2 转换指令二、设计UI2.1 类别2.1.1 Spacer2.1.2 Buttons2.1.3 Input Widgets2.1.4 Display Widgets2.1.5 注意事项2.2 对象和属性2.2.1 对象2.2.2 属性2.2.2.1 属性的层级结构2.2.2.2 重要的属性2.2.2.3 插入图片三、回到Python3.1 给现有…

公众号配置调试“errMsg“:“config:fail,invalid signature

一:登陆“微信公众平台”,查看“ip白名单是否设置” ,之前是个可选项,现在是必须设置 二: 1:获取access_token微信公众平台接口调试工具https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B…

JUC03-volatile、CAS及并发原子类

一、 Volatile Volatile可以用来修饰成员变量和静态成员变量&#xff0c;保证可见性、有序性 可见性&#xff1a;保证volatile修饰的变量每次读取都会从主从中进行读取而不是cpu缓存 有序性&#xff1a;对Volatile修饰变量进行写操作时&#xff0c;会在该操作后加上写屏障&…

【附源码】计算机毕业设计JAVA校园教育服务平台

【附源码】计算机毕业设计JAVA校园教育服务平台 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

【FLASH存储器系列十】Nand Flash芯片使用指导之一

目录 1.1 芯片简介 1.2 功能框图 1.3 存储结构 1.4 信号定义 1.5 双平面&#xff08;plane&#xff09;操作 1.6 Die间交错操作 1.7 错误管理 今天以MT29F8G08AJADAWP芯片为例&#xff0c;说明nand flash的操作方法。 1.1 芯片简介 这是一款镁光的容量8Gb&#xff0c;总…

功能上新 | Magic Data Annotator智能出行舱内舱外全场景标注

随着人工智能、互联网、大数据、5G等新技术应用和汽车产业变革的蓬勃兴起&#xff0c;智能汽车已成为汽车产业发展的重要战略方向。目前&#xff0c;智能驾驶已经成为目前车企营销的核心竞争力。在人车协作过程中&#xff0c;智能汽车最重要的功能就是车舱内外视觉功能&#xf…

Redis入门

目录 NoSQL概述 什么是NoSQL&#xff1f; 为什么要用NoSQL&#xff1f; NoSQL 的特点 NoSQL的四大分类 Redis入门 概述 基础知识 五大数据类型 Redis——Key String(字符串) List(列表) Set(集合) Hash(哈希) Zset(有序集合) 三种特殊数据类型 Geospatial 地理…

冯诺依曼体系结构、操作系统的认识

目录前言1️⃣ 冯诺依曼体系结构1.1 基本概念1.2 存储器的作用1.3 CPU的指令集1.4 实例2️⃣ 操作系统2.1 概念2.2 如何理解“管理”2.2.1 管理的本质2.2.2 管理的方法2.3 系统调用总结前言 &#x1f4ad;本文是对计算机底层学习的初步认识的知识铺垫&#xff0c;初步了解冯诺依…

高等数值计算方法学习笔记第4章第二部分【数值积分(数值微分)】

高等数值计算方法学习笔记第4章第二部分【数值积分&#xff08;数值微分&#xff09;】四、龙贝格求积公式&#xff08;第三次课&#xff09;1.梯形法的递推化 (变步长求积法)2.龙贝格算法五、高斯求积公式1.一般理论(1定义1例题)2.构造高斯求积公式方法&#xff08;二&#xf…

0098 蓝桥杯真题01

import java.util.Calendar; /* * 世纪末的星期 * 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日&#xff0c;如果是星期一则会… * 有趣的是&#xff0c;任何一个世纪末的年份的12月31日都不可能是星期一!! 于是&…

php socket说明 stream流说明

socket说明 我们都知道通过IP&#xff0c;端口等可以实现两台机器之间的数据互通&#xff0c;但具体要怎么操作&#xff0c;系统给我们提供了socket接口&#xff0c;通过调用socket函数就可以实现互通。php的socket扩展和C本身的非常相似&#xff0c;如果找不到php相关的资料&…

[附源码]SSM计算机毕业设计中小学微课学习系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【C++】日期类的实现

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;前言&…

MySQL8.0优化 - 事务的隔离级别

文章目录学习资料事务的隔离级别脏读、不可重复读、幻读脏读&#xff08;Dirty Read&#xff09;不可重复读&#xff08;Non-Repeatable Read&#xff09;幻读&#xff08;Phantom&#xff09;SQL中的四种隔离级别读未提交&#xff08;READ UNCOMMITTED&#xff09;读已提交&am…

北京化工大学数据结构2022/11/17作业 题解

(7条消息) 食用前须知&#xff08;阅读并同意后在食用其他部分&#xff09;_lxrrrrrrrr的博客-CSDN博客 看完进来哈 目录 问题 A: 邻接矩阵存储的图&#xff0c;节点的出度和入度计算(附加代码模式) 问题 B: 算法7-12&#xff1a;有向无环图的拓扑排序 问题 C: 有向图是否存…

剪枝算法:通过网络瘦身学习高效卷积网络

摘要 原文链接&#xff1a;https://arxiv.org/abs/1708.06519 深度卷积神经网络(CNNs)在现实世界中的应用很大程度上受到其高计算成本的阻碍。在本文中&#xff0c;我们提出了一种新的cnn学习方案&#xff0c;以同时减小模型的尺寸;2)减少运行时内存占用;3)在不影响精度的前…

[附源码]java毕业设计企业职工福利发放管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

WPF TreeView数据回填

这一期简单的说一下这个TreeView的数据回填&#xff0c; 上图是查询类型数据 上图是服务端的数据传递&#xff0c; 从数据库对应的查询出的数据传到服务端然后再传到客户端 上图就是在客户端后台启用刷新中的代码&#xff0c; DefaultView 获取自定义的视图 ItemsSource 获取…

如何在两个相关泛型类之间创建类似子类型的关系

本文正在参加「金石计划 . 瓜分6万现金大奖」 哈喽大家好&#xff0c;我是阿Q&#xff01; 事情是这个样子的...... 对话中的截图如下&#xff1a; 看了阿Q的解释&#xff0c;你是否也和“马小跳”一样存在疑问呢&#xff1f;请往&#x1f447;看 我们都知道在java中&#x…

领英高效开发客户方法(建议收藏)

领英高效开发客户 有效使用linkedIn领英&#xff0c;充分利用其人脉来为我们外贸人开发客户服务&#xff0c;我们也能获得外贸业-务更多更好机遇&#xff0c;扩大自己的外贸人脉圈。 在这里和大家分享一下&#xff0c;如何利用好领英linkedIn&#xff0c;轻松免-费地开发国外客…