美文网首页
【python3小白上路系列】添加play按钮(一)

【python3小白上路系列】添加play按钮(一)

作者: Charles_DT | 来源:发表于2020-08-28 16:35 被阅读0次

在本章中,我们将结束游戏《外星人入侵》的开发。我们将添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏。我们还将修改这个游戏,使其在玩家的等级提高时加快节奏,并实现一个记分系统。阅读本章后,你将掌握足够多的知识,能够开始编写随玩家等级提高而加大难度以及显示得分的游戏。

3.1 添加play按钮

在本节中,我们将添加一个Play按钮,它在游戏开始前出现,并在游戏结束后再次出现,让玩家能够开始新游戏。 当前,这个游戏在玩家运行alien_invasion.py时就开始了。下面让游戏一开始处于非活动状态,并提示玩家单击Play按钮来开始游戏。为此,在game_stats.py中输入如下代码:

class GameStats():
    # 跟踪游戏的统计信息
    def __init__(self,ai_settings):
        # 初始化统计信息
        self.ai_settings = ai_settings
        self.reset_stats()
        # 游戏刚启动时处于非活动状态
        self.game_active = False

    def reset_stats(self):
    # 初始化在游戏运行期间可能变化的统计信息
        self.ships_left = self.ai_settings.ship_limit

现在游戏一开始属于非活动状态了。

3.1.1 创建Button类

由于Pygame没有内置创建按钮的方法,我们创建一个Button 类,用于创建带标签的实心矩形。你可以在游戏中使用这些代码来创建任何按钮。下面是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)

下面我们来写一下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

方法prep_msg() 接受实参self 以及要渲染为图像的文本(msg )。调用font.render() 将存储在msg 中的文本转换为图像,然后将该图像存储在msg_image 中。方法font.render() 还接受一个布尔实参,该实参指定开启还是关闭反锯齿功能(反锯齿让文本的边缘更平滑)。余下的两个实参分别是文本颜色和背景色。我们启用了反锯齿功能,并将文本的背景色设置为按钮的颜色(如果没有指定背景色,Pygame将以透明背景的方式渲染文本)。

然后,我们让文本图像在按钮上居中:根据文本图像创建一个rect ,并将其center 属性设置为按钮的center 属性。 最后,我们创建方法draw_button() ,通过调用它可将这个按钮显示到屏幕上:

    def draw_button(self):
        # 绘制一个用颜色填充的按钮,再绘制文本
        self.screen.fill(self.button_color,self.rect)
        self.screen.blit(self.msg_image,self.msg_image_rect)
3.1.2 在屏幕上绘制按钮

我们将使用Button 类来创建一个Play按钮。鉴于只需要一个Play按钮,我们直接在alien_invasion.py中创建它,如下所示:

import pygame
from pygame.sprite import Group
from setting import Settings
from game_stats import GameStats
from button import Button
from ship import Ship
from alien import Alien
import game_functions as gf


def rungame():
    #初始化游戏并创建一个屏幕对象
    pygame.init()

    #实例化设置对象
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")

    # 创建play按钮
    play_button = Button(ai_settings, screen, "玩!")
    #创建一个用于存储游戏统计信息的实例
    stats = GameStats(ai_settings)

    #创建一只飞船
    ship = Ship(ai_settings,screen)

    #创建一个用于存储子弹的编组
    bullets = Group()

    #创建一个用于存储敌人的编组
    aliens = Group()
    # #创建一个外星人
    # alien = Alien(ai_settings,screen)

    # 创建一群敌人
    gf.create_fleet(ai_settings,screen,ship,aliens)
    #开始游戏主循环
    while True:
        gf.check_events(ai_settings,screen,ship,bullets)
        
        if stats.game_active:
            ship.update()
            gf.update_bullets(ai_settings,screen,ship,aliens,bullets)
            gf.update_aliens(ai_settings,stats,screen,ship,aliens,bullets)
        
        gf.update_screen(ai_settings,screen,stats,ship,aliens,bullets,play_button)

rungame()

接下来,修改update_screen() ,以便在游戏处于非活动状态时显示Play按钮:

def update_screen(ai_settings,screen,stats,ship,aliens,bullets,play_button):
    #每次循环时都重绘屏幕
        screen.fill(ai_settings.bg_color)
        #在飞船和外星人后面重绘所有子弹
        for bullet in bullets.sprites():
            bullet.draw_bullet()
        # 屏幕上绘制飞船#
        ship.blitme()
        # 屏幕上绘制敌人
        # alien.blitme()
        aliens.draw(screen)
        # 如果游戏处于非活动状态,就绘制按钮
        if not stats.game_active:
            play_button.draw_button()
        #让最近绘制的屏幕可见#
        pygame.display.flip()

为让Play按钮位于其他所有屏幕元素上面,我们在绘制其他所有游戏元素后再绘制这个按钮,然后切换到新屏幕。如果你现在运行这个游戏,将在屏幕中央看到一个Play按钮。



就先到这里吧~

相关文章

网友评论

      本文标题:【python3小白上路系列】添加play按钮(一)

      本文链接:https://www.haomeiwen.com/subject/oxplsktx.html