Python项目实践之三:添加 Play 按钮和提高游戏等级
现在外星人入侵游戏项目已经实现了武装飞船和外星人群的功能,本章主要添加一些辅助功能,如添加一个开始按钮,计分板信息和随着游戏的进行加快游戏节奏。
一、添加 Play 按钮
需求:添加 Play 按钮,它在游戏开始前出现,并在游戏结束后再次出现,让玩家能够开始新游戏。
需要实现此项功能,我们需要先把game_stats.py中的game_active参数设置成False,在玩家没有按下Play按钮时,游戏处于非活性状态:
# 游戏刚启动时处于活动状态
self.game_active = False
1、创建 Button 类
由于Pygame没有内置创建按钮的方法,我们创建一个 Button 类,用于创建带标签的实心矩形。
在项目文件下添加一个 button.py 文件:
import pygame.font
class Button():
def __init__(self, ai_settings, screen, msg):
"""初始化按钮的属性"""
self.screen = screen
self.screen_rect = screen.get_rect()
# 设置按钮的尺寸和其他属性
self.width, self.height = 200, 50
self.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.center
# 按钮的标签只需创建一次
self.prep_msg(msg)
解释:
1、导入模块 pygame.font ,它让Pygame能够将文本渲染到屏幕上。
2、__init__接收参数:self(绑定到对象), ai_settings(获取游戏元素的相关设置),screen(获取游戏界面相关属性), msg(在按钮中显示的文本)。
3、 self.width 和 self.height:设置按钮的尺寸,self.button_color:设置按钮的颜色,self.text_color:设置按钮中文本的颜色,self.font:设置字体的类型(None为默认字体)及大小。
4、通过按钮的rect属性把创建好的按钮定位到游戏界面中。
5、prep_msg():自定义的一个函数,注意用于将要显示的字符串渲染为图像来处理文本。
在Button类中定义prep_msg():
def prep_msg(self, msg):
"""将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
解释:
1、 font.render() :将存储在msg 中的文本转换为图像,然后将该图像存储在 msg_image 中。
2、通过文本的rect属性把创建好的文本定位到按钮界面中。
最后,我们在Button类中定义 draw_button() ,通过调用它可将这个按钮显示到屏幕上:
def