星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞

系列文章目录

星际争霸之小霸王之小蜜蜂(十二)--猫有九条命

 星际争霸之小霸王之小蜜蜂(十一)--杀杀杀

 星际争霸之小霸王之小蜜蜂(十)--鼠道

星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾

 星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫

 星际争霸之小霸王之小蜜蜂(七)--消失的子弹

 星际争霸之小霸王之小蜜蜂(六)--让子弹飞

 星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速

 星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来


目录

系列文章目录

文章目录

前言

一、设置开始按钮

二、绘制开始按钮

 三、添加点击响应

 四、重置游戏进程

总结


前言

前面我们已经完成了游戏主体部分,现在我们要打磨游戏的细节,增加游戏的可玩性。


一、设置开始按钮

我们需要添加一个开始按钮,在我们点击开始按钮之前,游戏静止不动,当我们点击开始之后,游戏正常运行,当游戏结束后,回到初始状态,并出现开始按钮。

首先我们让游戏处于一个静止状态,就是我们之前设置的game_active,将其赋值为False

然后我们就需要在屏幕上放置一个开始按钮了,但是pygame没有直接创建按钮的方法,我们需要自己创建按钮的模块。

import pygame.fontclass Button():def __init__(self,new_setting,screen,msg):self.screen = screenself.screen_rect =screen.get_rect()#设置按钮的尺寸self.width,self.height = 200,50self.button_color = (0,255,0)self.text_color = (255,255,255)self.font = pygame.font.SysFont(None,48)#创建按钮的rect对象self.rect = pygame.Rect(0,0,self.width,self.height)self.rect.center = self.screen_rect.centerself.prep_msg(msg)

 pygame.font.SysFont(None, 48)是用于创建一个新的字体对象,其中None表示默认字体,48是字体的大小。

 我们还调用了prep_msg函数,这个函数的目的是将文字变成图片,然后我们要将变成图片的文字显示在按钮的中间位置。

 def prep_msg(self,msg):self.msg_image= self.font.render(msg,True,self.text_color,self.button_color)self.msg_image_rect = self.msg_image.get_rect()self.msg_image_rect.center = self.rect.center

 self.font.render(msg, True, self.text_color, self.button_color)是Pygame中用于渲染文本的方法之一。它的作用是将文本字符串msg渲染成一个图像,以便在游戏中显示。在这个方法中,True表示启用抗锯齿功能,即使用高质量的渲染效果;self.text_color和self.button_color分别表示文本的颜色和按钮的颜色。该方法返回一个Surface对象,表示渲染后的文本图像。可以将这个Surface对象绘制到屏幕上,以显示文本 。

二、绘制开始按钮

我们已经完成按钮和按钮上文字的设置工作,现在我们需要将他们显示在屏幕上,首先我们在Button类里创建一个显示函数,然后主函数里调用这个函数。

def draw_button(self):self.screen.fill(self.button_color,self.rect)self.screen.blit(self.msg_image,self.msg_image_rect)

 self.screen.fill(self.button_color, self.rect)是Pygame中用于填充屏幕背景色的方法之一。它的作用是将整个屏幕的背景色设置为指定的颜色,以便在游戏中显示。

该方法接受两个参数:color和rect。其中,color是要设置的颜色,可以是RGB元组或颜色名称;rect是一个Rect对象,表示屏幕的矩形区域。

在这个方法中,self.button_color表示要设置的颜色,self.rect表示整个屏幕的矩形区域。

self.screen.blit(self.msg_image, self.msg_image_rect)是Pygame中用于将一个图像绘制到另一个图像上的方法之一。它的作用是将指定的图像绘制到屏幕上的指定位置。

该方法接受三个参数:source、dest和area。其中,source是要绘制的图像,dest是要绘制到的目标位置,area是一个矩形区域,表示要绘制的区域。如果area为None,则只绘制source图像的左上角部分。

在这个方法中,self.msg_image是要绘制的图像,self.msg_image_rect是指定的目标位置。

 

 然后我们在主函数中调用它

play_button = Button(new_setting,screen,'开始')while True:gf.check_events(new_setting,screen,ship,bullets)if stats.game_active:ship.update()gf.update_bullets(new_setting,screen,bullets,aliens)gf.update_aliens(new_setting,stats,screen,ship,aliens,bullets)gf.update_screen(new_setting,screen,ship,bullets,aliens,play_button)

 我们首先创建了Button类的实例,然后我们希望每次刷新屏幕的绘制按钮,所以我们将play_button作为传参传入update_screen,我们希望的是游戏静止还没有开始的时候调用,显示开始按钮,所以要加个判断,在stats.game_active等于False的时候执行代码。因此update_screen要加一个传参stats。

 

def update_screen(new_setting,screen,stats,ship,bullets,aliens,play_button):screen.fill(new_setting.bg_color)for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()aliens.draw(screen)if not stats.game_active:play_button.draw_button()
pygame.display.flip()

 运行的时候发现中文不显示,也许是字体不对,我们先按照书上用英文play代替。

 

 三、添加点击响应

 我们现在已经在屏幕上绘制出开始按钮了,但是它只是显示出来,并没有什么作用。之前我们是监听键盘输入,现在我们需要监听鼠标的点击,当鼠标点击开始按钮的位置时候,我们就开始游戏。

def check_events(new_setting,screen,ship,bullets,stats,play_button):for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type==pygame.KEYDOWN:check_keydown_events(event,new_setting,screen,ship,bullets)elif event.type==pygame.KEYUP:check_keyup_events(event, ship)elif event.type == pygame.MOUSEBUTTONDOWN:mouse_x,mouse_y = pygame.mouse.get_pos()check_play_button(stats,play_button,mouse_x,mouse_y)def check_play_button(stats,play_button,mouse_x,mouse_y):if play_button.rect.collidepoint(mouse_x,mouse_y):stats.game_active = True

很好理解。首先判断监听的事件是否是鼠标点击,然后获取鼠标点击的位置。这里有一个新函数要学习。

play_button.rect.collidepoint(mouse_x, mouse_y)是Pygame中用于检测鼠标点击是否在按钮矩形区域内的方法。其中,play_button是一个pygame.Rect对象,表示一个矩形区域;mouse_x和mouse_y是鼠标的横坐标和纵坐标。

这个方法会返回一个布尔值,如果鼠标点击的位置在play_button矩形区域内,则返回True,否则返回False。这可以用于判断用户是否点击了按钮,以便在游戏中执行相应的操作。

经执行代码,点击开始游戏便开始了,游戏结束后恢复到原始状态,再点击开始又执行。

 四、重置游戏进程

 在玩游戏的过程中,我们发现游戏结束后,我们再点击开始,小花猫的生命值没有恢复,只有最后一条命,失败一次就重新开始了。因此我们需要在点击开始按钮后,对游戏进行重置。

def check_play_button(stats,play_button,mouse_x,mouse_y,new_setting,aliens,bullets,ship,screen):if play_button.rect.collidepoint(mouse_x,mouse_y):stats.reset_stats()stats.game_active = Truealiens.empty()bullets.empty()create_fleet(new_setting,screen,aliens)ship.center_ship()

 我们对check_play_button函数进行了修改,在相关调用的时候,参数都要修改这里就不一一列出来了,按照这个修改之后,运行又出现新的问题,之前因为结束将代表活动的参数stats.game_active设置为False,所以开始按钮一直保持在休眠状态,游戏结束后再出现,现在的开始按钮会一直处于活动状态,游戏开始后虽然看不见,但是点击开始按钮的位置,还是能实现点击开始按钮的效果,游戏可以重置,这显然是不合理的,因此我们要加个判断,只有游戏处于非活动状态时,点击才有效。

def check_play_button(stats,play_button,mouse_x,mouse_y,new_setting,aliens,bullets,ship,screen):if play_button.rect.collidepoint(mouse_x,mouse_y) and not stats.game_active:stats.reset_stats()stats.game_active = Truealiens.empty()bullets.empty()create_fleet(new_setting,screen,aliens)ship.center_ship()

总结

我们实现了游戏的开始可以按钮控制。点赞!!!

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

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

相关文章

什么是集成测试?集成测试方法有哪些?

1、基本概念: 将软件集成起来后进行测试。集成测试又叫子系统测试、组装测试、部件测试等。集成测试主要是针对软件高层设计进行测试,一般来说是以模块和子系统为单位进行测试。 2、集成测试包含的层次: 1. 模块内的集成,主要是…

OA 电子审批流程是什么?

公司中,最最最常见也是最最最多的就是——各种审批。 我当年第一次实习,在一家国企的行政部门,我们部门领导那个时候最主要的工作就是“打通流程”,咱也不知道他在打通什么流程,反正这个很重要就是了。 结果&#xf…

CSS动效合集之实现气泡发散动画

前言 👏CSS动效合集之实现气泡发散动画,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义一个数组bubbles,用来存储气泡列表的基本新,w表示宽高,x表示绝对定位…

130. 被围绕的区域

130. 被围绕的区域 题目-中等难度示例1. 新建boardbfs2. 哈希bfs 题目-中等难度 给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例 示例 1&#x…

浅谈C++|类的继承篇

引子: 继承是面向对象三大特性之一、有些类与类之间存在特殊的关系,例如下图中: 我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。 这个时候我们就可以考虑利用继承的技术,减少…

2023全新TwoNav开源网址导航系统源码 | 去授权版

2023全新TwoNav开源网址导航系统源码 已过授权 所有功能可用 测试环境:NginxPHP7.4MySQL5.6 一款开源的书签导航管理程序,界面简洁,安装简单,使用方便,基础功能免费。 TwoNav可帮助你将浏览器书签集中式管理&#…

ubuntu+.net6+docker 应用部署教程

先期工作 1、本地首先安装 Docker Desktop 2、本地装linux in windows 3、生成镜像 后期工作 1、云服务器部署 生成镜像方法 1、生成Dockerfile配置文件 开发工具visual studio 2022 如果项目已经存在,可以选中项目,右键点击->选择添加Docker…

基于Java的高校竞赛管理系统设计与实现(亮点:发起比赛、报名、审核、评委打分、获奖排名,可随意更换主题如蓝桥杯、ACM、王者荣耀、吃鸡等竞赛)

高校竞赛管理系统 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序(小蔡coding)2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述4.2 系统角色 五、系统…

6.3 字符数组

思维导图: 前言: 主要内容: 前言内容整理 字符型数据和存储 字符型数据是依据字符的ASCII代码存储在内存单元中,通常占用一个字节的空间。ASCII代码可以被认为是整数,因此在C99标准中,字符类型被归类为整…

nodejs中的错误类型及捕获处理

nodejs中的错误类型及捕获处理 在 node 中,提供了 error 模块,并且内置了标准的 JavaScript 错误,本文将介绍在node中错误类型以及如何捕获。 错误类型 js错误 标准的js错误,跟在浏览器中运行js时提示的错误类型一样 RangeEr…

【Gradle-8】Gradle插件开发指南

1、前言 Gradle插件开发在Android进阶知识中是占有一定比例的,特别是在性能优化领域,基本都会涉及,而且跟我们日常的编译打包也息息相关,加上有不少招聘要求里也明确要有Gradle插件开发经验,所以即使大部分人的日常开…

I Pa?sWorD

2023icpc网络赛第一场 I 题意:题目给出只包含大小写字母,数字以及?的字符串,对于每一个小写字母,这一位字符既有可能是该小写字母,也有可能是该小写字母的对应大写字母,也就是该位的字符有两种可能&#x…

【Java 基础篇】Java标准输入流详解:读取用户输入的完整指南

Java是一门流行的编程语言,常用于开发各种类型的应用程序,包括控制台应用、桌面应用、Web应用等。在这些应用中,与用户进行交互是一项重要的任务。本文将重点介绍Java标准输入流,它是Java程序中用于从用户获取输入的关键组成部分。…

Vue3函数式编程

文章目录 前言一、三种编程风格1.template2.jsx/tsx3.函数式编写风格 二、函数式编程1.使用场景2.参数3.例子3.render渲染函数 总结 前言 本文主要记录vue3中的函数式编程以及其他编程风格的简介 一、三种编程风格 1.template Vue 使用一种基于 HTML 的模板语法,…

如何下载安装 WampServer 并结合 cpolar 内网穿透,轻松实现对本地服务的公网访问

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境,是一组常用来…

R语言画图

简单记录一下 plot(lad_profile_relative$lad, lad_profile_relative$height, type"l", lwd1.5, xlabexpression(paste("LAD ", "(", m^2, m^-3, ")" )), ylab"Height (m)")X轴数据, Y轴数据 type, 标记类型 lw…

Vue基础之模板语法介绍

前言 上篇我分享了关于Vue的入门,简单的入了个门。本篇文章将要分享的内容为Vue的模板语法。 一、插值 1.1、文本 1.2、html 1.3、属性 1.4、class、style绑定 1.5、表达式 在Vue的模板语法中,插值是一种常用的方式来动态地将数据渲染到视图中。Vue使用双…

华为云ROMA Connect亮相Gartner®全球应用创新及商业解决方案峰会,助力企业应用集成和数字化转型

9月13日-9月14日 Gartner全球应用创新及商业解决方案峰会在伦敦举行 本届峰会以“重塑软件交付,驱动业务价值”为主题,全球1000多位业内专家交流最新的企业应用、软件工程、解决方案架构、集成与自动化、API等企业IT战略和新兴技术热门话题。 9月13日…

linux入门---共享内存

目录标题 共享内存的原理共享内存的理解shmget函数key和shmid的区别ipcs -m和shmctlshmatshmdt共享内存的通信共享内存的优点共享内存的缺点共享内存的特点 共享内存的原理 通过前面的内容我们知道不同的进程通过虚拟地址空间和页表能够将自己的数据映射到内存上的不同地方比如…

STM32的HAL库SPI操作(master 模式)-根据时序图配置SPI

SPI相关基础知识 SPI基本概念请自行百度,参考:百度百科SPI简介.我们讲重点和要注意的地方。 master模式下要关注的地方 接线一一对应 也就是说主控的MISO,MOSI,SCLK,[CSn]分别和设备的MISO,MOSI,SCLK,[CSn]一一对应相连,不交叉&#xff0…