PyQt天天酷跑游戏(附下载地址)

news2025/1/14 1:09:07

欢迎下载体验!

文件大小:25.7 M
下载地址:链接:https://wwrr.lanzoul.com/ifOvc2fe163c


观看演示视频~

Pyqt-跑酷游戏


一.前言

天天酷跑大家都玩过吧,这是我们学生时代的回忆,目前这款游戏还在架,但是有了很大的变化,不是以前的感觉了。本次使用PyQt5开发这款跑酷游戏,带大家召回曾经的感觉~

二.预览

1.游戏准备

在经过一段loading之后,到了游戏准备界面。
在游戏准备界面会播放经典的BGM,我们点击开始游戏后选择角色。

在这里插入图片描述

2.角色选择

通过按下字母键的“a”或者“b”选择角色
在这里插入图片描述

3.游戏中

在游戏过程中,我们可以通过W键或空格键或者↑箭头键控制角色跳跃,支持二段跳
请添加图片描述

4.游戏结束

游戏结束会统计我们的表现和跑酷距离,可以在此界面重新游戏。
在这里插入图片描述

三.开发思路

1.游戏原理

游戏原理就是贴图

a.奔跑背景效果

其实我们的角色和奔跑过程中生成的障碍物&金币并没有往前跑,而是背景在“往后倒”,我们使用下面的代码可以很轻易的实现这一效果。

	def paintEvent(self, event):
		# 绘制背景
		painter = QPainter(self)
		painter.drawPixmap(-self.bg.dx, 0, self.bg.surface)
		painter.drawPixmap(self.bg.w - self.bg.dx, 0, self.bg.surface)

b.奔跑角色效果

游戏过程中我们能观察到玩家控制的角色除了跳跃之外,一直处于奔跑状态,这是如何实现的呢?
其实我们为角色设置了多张状态图片,类似于前端的雪碧图,共计12张,能够完成主角色的奔跑状态展示,在游戏过程中我们等比例裁切出需要的图来交替展示,就能完成“角色在奔跑”的状态,障碍物同理。
在这里插入图片描述

所以整个游戏场景的paintEvent函数是这样的:

	def paintEvent(self, event):
		painter = QPainter(self)
		# 绘制背景
		painter.drawPixmap(-self.bg.dx, 0, self.bg.surface)
		painter.drawPixmap(self.bg.w - self.bg.dx, 0, self.bg.surface)
		# 绘制分数
		self.score_frame.score_label.setText(str(self.score))
		if self.gameState == 1:
			# 游戏结束画面
			self.game_timer.stop()
			bus.game_bgm_status_changed.emit(0)
			bus.game_progress_changed.emit(4)
		else:
			# 绘制角色
			painter.drawPixmap(0, int(self.role.y), self.role.surface,
							   int(self.role.currentFrame) * int(self.role.w), 0, int(self.role.w), int(self.role.h))

			# 绘制障碍物
			for obj in self.objectList:
				painter.drawPixmap(int(obj.x), int(obj.y), obj.surface,
								   int(obj.currentFrame) * int(obj.w), 0, int(obj.w), int(obj.h))

2.场景切换

本次跑酷游戏包含四个游戏场景,主界面是个堆叠组件,所有游戏场景通过addWidget的方式添加到主界面中,通过切换堆叠组件的索引实现场景的切换,这个方式已经屡试不爽了。

		# 加载游戏场景
		self.gamePrepareScene = GamePrepareScene(self)
		self.gameLoadingScene = GameLoadingScene(self)
		self.chooseRoleScene = ChooseRoleScene(self)
		self.gameScene = GameScene(self)
		self.gameOverScene = GameOverScene(self)
		
		self.addWidget(self.gamePrepareScene)  # 0
		self.addWidget(self.gameLoadingScene)  # 1
		self.addWidget(self.chooseRoleScene)  # 2
		self.addWidget(self.gameScene)  # 3
		self.addWidget(self.gameOverScene)  # 4

3.音频播放

为了实现原汁原味的视听游戏体验,本次将bgm和音效分离开来,bgm采用的是.ogg文件,音效时长很短采用的是.wav格式,另外播放bgm时不会因为播放音效而终止,因为音效是在子线程里跑的。
给大家看下我的本地音频文件:

在这里插入图片描述

4.项目结构

对游戏代码感兴趣的小伙伴可以了解一下我的项目结构,有助于理解游戏开发思路:
在这里插入图片描述

四.总结

本次使用PyQt开发了一款跑酷游戏,目的是和大家分享回忆那段游戏时光,更进一步理解PyQt里相关的用法,与大家分享我开发项目的思路,欢迎大家多多留言讨论!
在这里插入图片描述

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

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

相关文章

跨平台WPF框架Avalonia教程 十五

ListBox 列表框 列表框从元素源集合中显示多行元素,并允许选择单个或多个。 列表中的元素可以组合、绑定和模板化。 列表的高度会扩展以适应所有元素,除非特别设置(使用高度属性),或由容器控件设置,例如…

python蓝桥杯刷题2

1.最短路 题解:这个采用暴力枚举,自己数一下就好了 2.门牌制作 题解:门牌号从1到2020,使用for循环遍历一遍,因为range函数无法调用最后一个数字,所以设置成1到2021即可,然后每一次for循环&…

基于YOLOv8深度学习的独居老人情感状态监护系统(PyQt5界面+数据集+训练代码)

本研究提出了一种创新的独居老人情感状态监护系统,基于YOLOV8深度学习模型,旨在通过对老年人面部表情的实时监测与分析,来精准识别其情感变化,从而提高独居老人的生活质量,确保其心理健康。本系统通过整合先进的YOLOV8…

基于SSM的农家乐管理系统+论文示例参考

1.项目介绍 功能模块:管理员(农家乐管理、美食信息管理、住宿信息管理、活动信息、用户管理、活动报名、论坛等),普通用户(注册登录、活动报名、客房预订、用户评价、收藏管理、模拟支付等)技术选型&#…

小米顾此失彼:汽车毛利大增,手机却跌至低谷

科技新知 原创作者丨依蔓 编辑丨蕨影 三年磨一剑的小米汽车毛利率大增,手机业务毛利率却出现下滑景象。 11月18日,小米集团发布 2024年第三季度财报,公司实现营收925.1亿元,同比增长30.5%,预估902.8亿元;…

【环境搭建】使用IDEA远程调试Docker中的Java Web

有时候要对Docker的Java Web远程调试其功能,于是就需要使用IDEA的远程调试功能,记录一下简单配置方法。 以Kylin4.0.0为例,首先拉取镜像并启动容器: $ docker pull apachekylin/apache-kylin-standalone:4.0.0$ docker run -d \-…

【AI图像生成网站Golang】项目架构

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与调试(等待更新) 四、项目架构 本项目的后端基于Golang和Gin框架开发,主要包括的模块有: backend/ ├── …

Centos7安装Jenkins脚本一键部署

公司原先Jenkins二进制安装,自己闲来无事在测试主机优化了一下,一键部署,jenkins2.426版本jdk11版本 #!/bin/bashjenkins_file"jenkins-2.426.3-1.1.noarch.rpm"# 更新软件包列表 echo "更新软件包列表..." sudo yum up…

【WPF】Prism学习(五)

Prism Commands 1.错误处理(Error Handling) Prism 9 为所有的命令(包含AsyncDelegateCommand)提供了更好的错误处理。 避免用try/catch包装每一个方法根据不同遇到的异常类型来提供特定的逻辑处理可以在多个命令之间共享错误处…

Ubuntu 18.04 配置sources.list源文件(无法安全地用该源进行更新,所以默认禁用该源)

如果你 sudo apt update 时出现诸如 无法安全地用该源进行更新,所以默认禁用该源 的错误,那就换换源吧,链接: https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/ 注意版本: 修改源文件: sudo nano /etc…

C++ —— 剑斩旧我 破茧成蝶—C++11

江河入海,知识涌动,这是我参与江海计划的第2篇。 目录 1. C11的发展历史 2. 列表初始化 2.1 C98传统的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3. 右值引用和移动语义 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延长生命周期…

04 - Clickhouse-21.7.3.14-2单机版安装

目录 一、准备工作 1、确定防火墙处于关闭状态 2、CentOS 取消打开文件数限制 3、安装依赖 4、CentOS取消SELINUX 二、单机安装 2.1、下载安装 2.2、安装这4个rpm包 2.3、修改配置文件 2.4、启动服务 2.5、关闭开机自启 2.6、使用Client连接server 一、准备工作 1…

STM32设计学生宿舍监测控制系统-分享

目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 本项目旨在利用STM32单片机为核心,结合传感器技术、无线通信技…

macOS 的目录结构

文章目录 根目录 (/)常见目录及其用途示例目录结构注意事项根目录 (/)主要目录及其含义其他目录总结 macOS 的目录结构无论是在 Intel 架构还是 ARM 架构的 Mac 电脑上都是相同的。macOS 的目录结构遵循 Unix 和 BSD 的传统,具有许多标准目录。以下是一些主要目录及…

日常ctf

15, [MoeCTF 2021]Web安全入门指北—小饼干 直接改就行了 16, [MoeCTF 2021]2048 传入参数就获取到flag了 /flag.php?score500000000 17, [SWPUCTF 2022 新生赛]funny_web 账户密码是 NSS 2122693401 登录进去查看源码 考intval缺陷&…

【java】java入门

盘符名称冒号---------盘符切换 dir---------------查看当前路径下的内容 cd目录--------进入单级目录 cd..----------回退到上一级目录 cd \----------回退到盘符目录 cls----------清屏 exit 为什么要配环境变量? 在任意的目录下都可以打开指定的软件。把软件的路…

网络安全检测技术

一,网络安全漏洞 安全威胁是指所有能够对计算机网络信息系统的网络服务和网络信息的机密性,可用性和完整性产生阻碍,破坏或中断的各种因素。安全威胁可分为人为安全威胁和非人为安全威胁两大类。 1,网络安全漏洞威胁 漏洞分析的…

【大数据学习 | flume】flume的概述与组件的介绍

1. flume概述 Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到HDFS、Hbase,简单来说flume就是收集日志的。 Flume两个版本区别: ​ 1&…

如何高效实现汤臣倍健营销云数据集成到SQLServer

新版订单同步-(Life-Space)江油泰熙:汤臣倍健营销云数据集成到SQL Server 在企业信息化建设中,数据的高效集成和管理是提升业务运营效率的关键。本文将分享一个实际案例——如何通过新版订单同步方案,将汤臣倍健营销云…

Ubuntu22.04安装CH343驱动并创建udev规则

驱动说明 Linux系统提供CH34*系列 USB UART 设备配合使用的默认 CDC-ACM 驱动程序。驱动程序文件名为CDC-ACM。CDC-ACM 驱动程序控制特定设备的能力有限。此通用驱动程序不了解特定设备协议。因此,设备制造商可以创建能够访问设备特定功能集(例如硬件流…