Pygame基础4-多阶段

4-多阶段

原理

本章是对第2章的延续。
我们希望为游戏添加多个阶段,比如开始界面、游戏界面、结束界面等。
在这里插入图片描述
在这里插入图片描述

为此,我们可以使用一个类来管理游戏的不同阶段。
我们创建了GameManager类,并通过self.status属性表示不同的阶段。

  • intro阶段:显示准备的背景。当用户按下鼠标时,将状态切换为main_game
  • main_game阶段:进行游戏,更新游戏画面。
class GameManager:def __init__(self):self.status = "intro"def intro(self):for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()if event.type == pygame.MOUSEBUTTONDOWN:self.status = "main_game"screen.blit(bg_img, (0, 0))screen.blit(ready_img, (screen_width//2, screen_height//2))pygame.display.flip()def main_game(self):for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()if event.type == pygame.MOUSEBUTTONDOWN:crosshair.shoot()screen.blit(bg_img, (0, 0))target_group.update()target_group.draw(screen)crosshair_group.update()crosshair_group.draw(screen)pygame.display.flip()def start_game(self):if self.status == "intro":self.intro()elif self.status == "main_game":self.main_game()game_manager = GameManager()
while True:game_manager.start_game()clock.tick(60)

使用GameManager类管理游戏后,我们发现游戏的主循环变得很简单。

案例

完整代码。
添加了准备阶段。

# 使用pygame SPrite实现射击游戏
import pygame
import randomclass Crosshair(pygame.sprite.Sprite):def __init__(self, img_path):super().__init__()self.image = pygame.image.load(img_path)self.rect = self.image.get_rect()self.gun_shot = pygame.mixer.Sound('gunshot.wav')def shoot(self):self.gun_shot.play()pygame.sprite.spritecollide(crosshair, target_group, True)def update(self):self.rect.center = pygame.mouse.get_pos()class Target(pygame.sprite.Sprite):def __init__(self, img_path, x, y):super().__init__()self.image = pygame.image.load(img_path)self.rect = self.image.get_rect()self.rect.center = (x, y)def update(self):pass# init 
pygame.init()
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.mouse.set_visible(False)
clock = pygame.time.Clock()
crosshair = Crosshair(r'PNG\HUD\crosshair_blue_small.png')crosshair_group = pygame.sprite.Group()
crosshair_group.add(crosshair)target_group = pygame.sprite.Group()
for i in range(20):x,y = random.randint(0, screen_width), random.randint(0, screen_height)target = Target(r'PNG\Objects\duck_target_yellow.png', x, y)target_group.add(target)bg_img = pygame.image.load(r'PNG\Stall\bg_wood.png')
bg_img = pygame.transform.scale(bg_img, (screen_width, screen_height))ready_img = pygame.image.load(r'PNG\HUD\text_ready.png')class GameManager:def __init__(self):self.status = "intro"def intro(self):for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()if event.type == pygame.MOUSEBUTTONDOWN:self.status = "main_game"screen.blit(bg_img, (0, 0))screen.blit(ready_img, (screen_width//2, screen_height//2))pygame.display.flip()def main_game(self):for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()if event.type == pygame.MOUSEBUTTONDOWN:crosshair.shoot()screen.blit(bg_img, (0, 0))target_group.update()target_group.draw(screen)crosshair_group.update()crosshair_group.draw(screen)pygame.display.flip()def start_game(self):if self.status == "intro":self.intro()elif self.status == "main_game":self.main_game()game_manager = GameManager()
while True:game_manager.start_game()clock.tick(60)

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

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

相关文章

javaSSM公司招聘管理系统IDEA开发mysql数据库web结构计算机java编程maven项目

一、源码特点 IDEA开发SSM公司招聘管理系统是一套完善的完整企业内部系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发)MAVEN方式加 载,系统具有完整的源代码和…

solr-lucene的解释

什么是solr-lucene Solr是一个基于Apache Lucene的开源搜索平台。Lucene是一个开源的全文搜索引擎库,它提供了一个简单而强大的API,用于索引和搜索文档。Solr通过在Lucene的基础上构建一个更高级的搜索平台,为用户提供了更丰富的功能和易于使…

聊聊我做测试开发的十年心路历程

作者:天士 一、前言 不知不知觉,已经从事测试开发这个行当 10 来年了,从上大学到参加工作,从南方到北方再回南方,辗转了大半个中国,如今算算进公司已经开启了第五个年头,今年就要五年陈了。 兜…

解决三维模型的模型调色的主要技术方法

解决三维模型的模型调色的主要技术方法 三维模型的模型调色是指对三维模型的表面进行着色和贴图,使其更加真实和生动。在数字媒体、游戏开发和影视制作等领域,模型调色是十分重要的环节。下面将介绍三维模型模型调色的主要技术方法。 材质贴图 材质贴图…

智能文档处理技术综述

一、 智能文档处理介绍 智能文档处理(Intelligent Document Processing, IDP)是利用人工智能(AI)、机器学习(ML)、计算机视觉(CV)、自然语言处理(NLP)等技术…

机器学习笔记(2)—单变量线性回归

单变量线性回归 单变量线性回归(Linear Regression with One Variable)1.1 模型表示1.2 代价函数1.3 代价函数的直观理解1.4 梯度下降1.5 梯度下降的直观理解1.6 梯度下降的线性回归 单变量线性回归(Linear Regression with One Variable) ps:...今天很倒霉 一名小女孩悄悄地碎…

Redhat7安装yum源,解决报错No more mirrors to try...

运行yum出现报错 或者 bash: yum: command not found...的提示,按照此篇文章重新安装yum并配置源即可。 前提 Linux系统为redhat7,且可以通外网 步骤一:卸载原有yum 使用rpm -qa | grep yum 查看 rpm -qa|grep yum|xargs rpm -e --node…

极端道路天气数据集 雨天 雾天 道路晴朗

极端道路天气数据集 是一系列专为自动驾驶、智能交通系统研发以及计算机视觉算法测试而设计的真实世界或模拟的道路环境图像和视频集合。这些数据集包含了在各类极端天气条件下捕捉到的道路场景,例如大雾、暴雨、暴雪、冰雹、雾霾、道路结冰等,这些都是…

【数据分享】1929-2023年全球站点的逐日平均海平面压力(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全球气象站…

【C++中的STL(未完成)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

Vue.js高效前端开发(增删查)

效果图 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><div id"app"><span>ID</span><input type"text" name"…

如何在Java中创建Excel表单控件

前言 在数据填报时&#xff0c;创建Excel表单控件是一项常见的任务&#xff0c;它可以极大地简化数据收集和处理的过程。传统的做法需要在Excel中开启开发工具&#xff0c;并且自己手动添加&#xff0c;如下图&#xff0c;就是一个常见的表单控件。 而在Java中&#xff0c;可…

Linux 设备树: of_property_match_string 的用法与工作原理

前言 当前新版本的 Linux 内核 设备驱动框架&#xff0c;与设备树&#xff08;Device Tree&#xff09;结合密切&#xff0c;整体 设备树的设备驱动框架&#xff0c;比较的庞大&#xff0c;但又非常的经典。 一个个的 设备树解析函数&#xff0c;都是前人【智慧】的结晶&#…

DC电源模块与其他电源模块有着明显的区别与优势

DC电源模块与其他电源模块有着明显的区别与优势 BOSHIDA DC电源模块&#xff08;Direct Current Power Supply Module&#xff09;是一种将交流电转换为直流电的设备&#xff0c;常用于电子设备和工业控制系统中。与其他电源模块相比&#xff0c;DC电源模块有一些明显的区别和…

R语言ggplot2 | 热图+随机森林重要性!升级版~

&#x1f4cb;文章目录 原图复现定义ggrf_ggcor_plot()函数加载数据集一键出图函数优点 今天推出一个升级版&#xff1a; ggrf_ggcor_plot的函数。只需要输入 响应变量的矩阵和 解释变量的矩阵&#xff0c;就能轻松一键生成随机森林重要性相关性热图。 原图 所需复现的随机森…

推荐5款测试数据生成工具!

一个成功、有效的测试策略由下面几个基本部分组成&#xff1a;完整的测试覆盖率、最小化的环境影响和健壮的测试数据。 其中测试数据尤其重要&#xff0c;其质量直接关系到测试的有效性。可以把测试数据看作是保持测试引擎运行的燃料——高质量的测试数据有助于确保测试执行的…

极速体验DolphinScheduler 3.2.1 Standalone 版[一]

文章目录 极速体验DolphinScheduler 3.2.1 Standalone 版前置准备工作启动 DolphinScheduler Standalone Server解压并启动 DolphinScheduler登录 DolphinScheduler 启停服务配置数据库 极速体验DolphinScheduler 3.2.1 Standalone 版 Standalone 仅适用于 DolphinScheduler 的…

【go从入门到精通】函数详解

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…

【蓝桥杯】tarjan算法

一.概述 Tarjan 算法是基于DFS的算法&#xff0c;用于求解图的连通性问题。 Tarjan 算法可以在线性时间内求出&#xff1a; 无向图&#xff1a; 割点与桥双连通分量 有向图&#xff1a; 强连通分量必经点与必经边 1.割点&#xff1a; 若从图中删除节点 x 以及所有与 x 关联的…

Intel AIPC发布会:开启AI终端应用的新纪元

2024年3月27日下午&#xff0c;Intel在北京市朝阳区凤凰中心举办了AIPC发布会开启了AI终端应用的新征程。 整场发布会围绕着‘让不可想象&#xff0c;变为寻常’主线进行。在本次发布会上&#xff0c;众多PC端的AI应用得到了展示&#xff0c;包括&#xff1a;智谱AI&#xff…