Python版《天天酷跑+源码》,详细讲解,手把手教学-python游戏开发

天天酷跑游戏

在这里插入图片描述

游戏效果:

在这里插入图片描述

游戏主要是躲避障碍物,这里也添加了金币,增加一点积分的娱乐性,人物设置是三条命,障碍物有6种,包括金币,障碍物随机生成,碰到障碍物掉一滴血,没血了结束游戏。

初始化任务,障碍物和背景:


class Person():  # 人物def __init__(self, surf=None, y=None):self.surface = surfself.y = y  # y坐标self.w = (surf.get_width()) / 12  # 宽度self.h = surf.get_height() / 2  # 高度self.cur_frame = -1  # 当前的运动状态帧self.state = 0  # 0代表跑步状态,1代表跳跃状态,2代表连续跳跃self.gravity = 1  # 重力加速度self.velocity_y = 0  # y方向的速度self.vy_start = -20  # 起跳开始速度def getPos(self):  # 获取当前的位置信息,用于碰撞检测return (0, self.y + 12, self.w, self.h)class Obstacle(object):  # 障碍物def __init__(self, surf, x=0, y=0):self.surface = surfself.x = xself.y = yself.w = surf.get_width()self.h = surf.get_height()self.cur_frame = random.randint(0, 6)  # 随机获取一种障碍物的类型self.w = 100self.h = 100def getPos(self):  # 当前的坐标信息return (self.x, self.y, self.w, self.h)def check_collision(self, rect1, rect2):  # 碰撞检测if (rect2[0] >= rect1[2] - 20) or (rect1[0] + 40 >= rect2[2]) or (rect1[1] + rect1[3] < rect2[1] + 20) or (rect2[1] + rect2[3] < rect1[1] + 20):return Falsereturn Trueclass BackGround(object):  # 背景def __init__(self, surf):self.surface = surf  # 初始化一个Surface 对象self.dx = -10self.w = surf.get_width()  # 返回 Surface 对象的宽度,以像素为单位。self.rect = surf.get_rect()  # 获取 Surface 对象的矩形区域

设计障碍物:

  def add_obstacle(self):  # 添加障碍物rate = 4# 是否生成障碍物if not random.randint(0, 300) < rate:returny = random.choice([self.height - 100, self.height - 200, self.height - 300, self.height - 400])obstacle = Obstacle(self.obstacle_pic, self.width + 40, y)self.obstacle_list.append(obstacle)

处理键盘跳跃,吃金币,碰撞障碍物的操作:

# 处理事件监听def manage_game(self):for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:# 空格键跳跃if self.game_state == 0:if event.key == pygame.K_SPACE:pygame.mixer.Sound(r"resource/jump.wav").play()if self.person.state == 0:self.person.state = 1self.person.velocity_y = self.person.vy_startelif self.person.state == 1:self.person.state = 2self.person.velocity_y = self.person.vy_startelif self.game_state == 1:if event.key == pygame.K_RETURN:  # 重新开始游戏self.bg_music.stop()self.__init__()if self.game_state == 0:self.bg.dx += 10if self.bg.dx == 1200:self.bg.dx = 0#人物运动if self.person.state == 0:self.person.cur_frame += 1if self.person.cur_frame == 12:self.person.cur_frame = 0else:self.person.y += self.person.velocity_yself.person.velocity_y += self.person.gravityif self.person.y >= 500 - 85:self.person.y = 500 - 85self.person.state = 0# 生成障碍物self.add_obstacle()for obstacle in self.obstacle_list:obstacle.x -= 10  # obstacle向左移动十个像素if obstacle.x + obstacle.w <= 0:  # 当obstacle离开界面时self.obstacle_list.remove(obstacle)self.score += 10  # 避开obstacle,加10分if obstacle.check_collision(self.person.getPos(), obstacle.getPos()):  # 碰撞检测if obstacle.cur_frame == 6:self.obstacle_list.remove(obstacle)self.score += 100  # 吃金币加100分coin_sound = pygame.mixer.Sound(r"resource/coin.mp3")coin_sound.play()else:self.life -= 1self.obstacle_list.remove(obstacle)if self.life <= 0:self.game_state = 1  # 游戏失败,播放结束音乐die_sound = pygame.mixer.Sound(r"resource/dead.wav")die_sound.play()else:die_sound = pygame.mixer.Sound(r"resource/collision.mp3")  # 播放碰撞之后产生的音效

刷新页面,处理状态:


# 更新显示界面def refresh_screen(self, screen):screen.blit(self.bg.surface, [-self.bg.dx, 0])  # 背景的贴图screen.blit(self.bg.surface, [1200 - self.bg.dx, 0])text = self.font1.render("score:%d" % self.score, True, (128, 128, 128))  # 分数的贴图screen.blit(text, (500, 20))del textrest_life = self.font1.render("life:%d" % self.life, True, (128, 128, 128))  # 剩余生命screen.blit(rest_life, (400, 20))del rest_lifescreen.blit(self.person.surface, [0, self.person.y],[int(self.person.cur_frame) * self.person.w, 0, self.person.w, self.person.h])  # 人物的贴图for obstacle in self.obstacle_list:  # 障碍物的贴图screen.blit(obstacle.surface, [obstacle.x, obstacle.y],[int(obstacle.cur_frame) * obstacle.w, 0, obstacle.w, obstacle.h])# 判断游戏的状态def check_status(self, screen):if self.game_state == 0:self.refresh_screen(screen)returnelif self.game_state == 1:screen.blit(self.game_over, [0, 0])text = self.font1.render("GameOver Score:%d  Press Enter to restart" % self.score, True, (255, 0, 0))screen.blit(text, (self.width / 2 - 350, self.height / 2 + 150))

游戏主入口:


# 游戏主入口函数def main(self):self.startGame(self.screen)while True:self.clock.tick(40)self.check_status(self.screen)self.manage_game()pygame.display.flip()if __name__ == '__main__':parkour = Parkour()parkour.main()

运行后效果:
在这里插入图片描述

需要游戏素材,和完整代码可在文末Python学习资料那获取

今天的分享就到这里

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

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

相关文章

STL之stack

stack容器 - 先进后出” - stack是堆栈容器&#xff0c;是一种的容器。 - 头文件&#xff1a;#include <stack> stack的push()与pop()方法 stack.push(elem);//往栈头添加元素 stack.pop();//从栈头移除第一个元素 stack<int> stkInt; stkInt.push(1);stkInt…

react hooks--概述

前言 ◼ Hook 是 React 16.8 的新增特性&#xff0c;它可以让我们在不编写class的情况下使用state以及其他的React特性&#xff08;比如生命周期&#xff09;。 ◼ 我们先来思考一下class组件相对于函数式组件有什么优势&#xff1f;比较常见的是下面的优势&#xff1a; ◼ …

清理C盘缓存,删除电脑缓存指令是什么

在处理计算机系统的C盘缓存清理任务时&#xff0c;需要谨慎操作以确保系统的稳定性和数据的安全性。通常&#xff0c;Windows操作系统中并没有直接的“一键清理C盘缓存”的单一命令&#xff0c;因为缓存文件分散存储于多个位置&#xff0c;并且有些缓存对于系统性能至关重要&am…

C#命令行参数解析库System.CommandLine介绍

命令行参数 平常在日常的开发过程中&#xff0c;会经常用到命令行工具。如cmd下的各种命令。 以下为sc命令执行后的截图&#xff0c;可以看到&#xff0c;由于没有输入任何附带参数&#xff0c;所以程序并未执行任何操作&#xff0c;只是输出了描述和用法。 系统在创建一个新…

《SpringBoot+Vue》Chapter01_SpringBoot介绍

SpringBoot的介绍 简单来说&#xff0c;SpringBoot就是Spring提供的用于Web开发的脚手架框架。配置简单、上手快速 SpringBoot的特性 自带tomcat、Jetty服务器可以部署war包自动配置Spring框架和第三方框架能够提供应用的健康监控和配置的监控没有代码生成&#xff0c;并且尽可…

HashSet及其实现原理

目录 一、Set二、HashSet三、HashSet的实现原理四、HashSet的线程安全与顺序1、线程安全2、有序性 一、Set Set 接口是 java.util 包下的一个集合接口&#xff0c;它继承自 Collection 接口。Set 接口定义了一个不允许包含重复元素的集合。Set 接口的实现类主要有 HashSet、Lin…

【网络安全的神秘世界】ssrf服务端请求伪造

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ssrf 一、SSRF原理及漏洞演示 1.1 漏洞简介 SSRF&#xff08;Server-Side Request Forgery&#xff1a;服务端请求伪造&am…

3分钟手把手教FL Studio 24.1.1.4285中文破解完整版安装激活图文教程

FL Studio 24.1.1.4285中文破解完整版首先提供了音符编辑器&#xff0c;编辑器可以针对作曲者的要求编辑出不同音律的节奏&#xff0c;例如鼓&#xff0c;镲&#xff0c;锣&#xff0c;钢琴&#xff0c;笛&#xff0c;大提琴&#xff0c;筝&#xff0c;扬琴等等任何乐器的节奏律…

十三,Spring Boot 中注入 Servlet,Filter,Listener

十三&#xff0c;Spring Boot 中注入 Servlet&#xff0c;Filter&#xff0c;Listener 文章目录 十三&#xff0c;Spring Boot 中注入 Servlet&#xff0c;Filter&#xff0c;Listener1. 基本介绍2. 第一种方式&#xff1a;使用注解方式注入&#xff1a;Servlet&#xff0c;Fil…

Linux——应用层自定义协议与序列化

目录 一应用层 1再谈 "协议" 2序列化与反序列化 3理解read,write,recv,send 4Udp vs Tcp 二网络版本计算器 三手写序列和反序列化 四进程间关系与守护进程 1进程组 1.1什么是进程组 1.2组长进程 2会话 2.1什么是会话 2.2会话下的前后台进程 3作业控…

基于Arduino Uno的简易可视化操作界面设计

Arduino UNO是基于ATmega328P的Arduino开发板。它有14个数字输入/输出引脚&#xff08;其中6个可用于PWM输出&#xff09;、6个模拟输入引脚&#xff0c;一个16 MHz的晶体振荡器&#xff0c;一个USB接口&#xff0c;一个DC接口&#xff0c;一个ICSP接口&#xff0c;一个复位按钮…

C++速通LeetCode简单第16题-买卖股票的最佳时机

思路要点&#xff1a;假设当天卖&#xff0c;动态更新最低价格和最大利益 class Solution { public://要点&#xff1a;假设当天卖&#xff0c;动态更新最低价格和最大利益int maxProfit(vector<int>& prices) {int ans 0;int lowest prices[0];for(int i 1; i &…

COMP 6714-Info Retrieval and Web Search笔记week1

哭了哭了&#xff0c;这周唯一能听懂的就这门 目录 IR&#xff08;Information Retrieval)是什么&#xff1f;IR的基本假设Unstructured (text) vs. structuredDocuments vs. Database Records比较文本&#xff08;Comparing Text&#xff09;IR的范围(Dimensions of IR)IR的任…

多线程1(游戏逆向)

#include<iostream> #include<windows.h> #include<tchar.h> #include<stdio.h> #include <process.h> #pragma warning(disable:4996) //exe应用程序 VOID PrintUI(CONST CHAR* ExeName, CONST CHAR* UIName, CONST CHAR* color, SHORT X坐标, …

基于SSM的银发在线教育云平台的设计与实现

需要项目源码请联系我&#xff0c;目前有各类成品 毕设 javaweb ssh ssm springboot等等项目框架&#xff0c;源码丰富。 专业团队&#xff0c;咨询就送开题报告&#xff0c;活动限时免费&#xff0c;有需要的朋友可以来留言咨询。 一、摘要 现在的科技进步使得人们的学习不仅…

C++面试常见手撕题目

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 分享常见的面试手撕…

CC2530实现按键控制LED

实现按钮控制LED1开启和关闭 1配置环境 2扩展资料 通用io和外设io 设置输入输出 设置输入模式 3实例代码 #include "ioCC2530.h"void delay(int n){int i,j;for(i0;i<n;i){for(j0;j<240;j){asm("NOP");asm("NOP");asm("NOP")…

在 Python 画图中同时设置中英文字体

前言 在使用matplotlib.pyplot画图时&#xff0c;默认情况下都是黑体字&#xff0c;很不美观。如果含有中文&#xff0c;可能无法显示&#xff1b;显示了中文之后英文字体就不能使用。本文针对这些问题逐一给出解决方案。 同时设置中英文字体 我们都知道&#xff0c;按照下面的…

8路模拟量采集模块,4~20mA 0~10V电流电压高速采集——DAM-3054P

阿尔泰科技 DAM-3054P为8路差分模拟量采集模块&#xff0c;高速采集&#xff0c;每通道采集速率为500sps&#xff0c;16位AD&#xff0c;支持RS485通讯接口&#xff0c;带有标准ModbusRTU协议。配备良好的人机交互界面&#xff0c;使用方便&#xff0c;性能稳定。 指标参数&…