Python从入门到实践第14章记分

14.1添加Play按钮

游戏开始出现,游戏结束再次出现,让玩家能够开始新游戏,接下来修改游戏活动状态,让游戏一开始处于非活动状态,并提示玩家单机Play按钮来开始游戏。

game_stats.py

def __init__(self,ai_settings):
    self.ai_settings=ai_settings
    self.reset_stats()
    #修改游戏标志为False,等创建Play按钮时玩家才能开始游戏。
  
      

14.1.1创建Button类

由于Pygame没有内置创建按钮的方法,我们创建一个Button类,用于创建带标签的实心矩形。

1.创建rect对象

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对象,并使其居中。
        '''
        创建一个表示按钮的rect对象
        设置rect对象的center属性为屏幕的center属性
        '''
        #按钮的标签只需要创建一次
        self.prep_msg(msg)
2.为rect矩形添加标签

调用prep_msg()来将你要显示的字符串渲染为图像来处理文本。

prep_msg()的代码如下:

button.py

    def prep_msg(self,msg):
        '''将msg渲染为图像,并使其在按钮上居中'''
        self.msg_image=self.font.render(msg,True,self.text_color,self.button_color)
        #让文本图像在按钮上居中:
        '''
        根据文本图像创建一个rect
        将其center属性设置为按钮的center属性。
        '''
       
3.创建draw_button()方法

draw_button()包括绘制矩形和绘制文本。

button.py

    def draw_button(self):
        '''
        绘制一个用颜色填充的按钮
        再绘制文本图像
        '''

14.1.2在屏幕上绘制按钮

1.创建play_button实例

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

2.显示按钮

将play_button传递给update_screen(),以便能够在屏幕更新时显示按钮,修改update_screen(),以便在游戏处于非活动状态时显示Play按钮。

14.1.3开始游戏

为在玩家单击Play按钮时开始新游戏,需在game_functions.py中添加代码,以监视与这
个按钮相关的鼠标事件:

1.game_functions.py

代码分析:

1.侦测玩家是否点击鼠标

2.获取玩家点击位置

3.判断玩家点击位置是否在Play按钮内

4.修改活动状态

game_function.py


        #判断事件类型event.type是鼠标点击事件?
        elif event.type==pygame.MOUSEBUTTONDOWN:
            #mouse.get_pos()获取鼠标点击位置的x,y坐标
            mouse_x,mouse_y=pygame.mouse.get_pos()
            #侦测是鼠标是否在按钮内
            check_play_button(ai_settings,screen,stats,play_button,ship,aliens,
                      bullets,mouse_x,mouse_y)
def check_play_button(stats, play_button, mouse_x, mouse_y):
    """在玩家单击Play按钮时开始新游戏"""
    if play_button.rect.collidepoint(mouse_x, mouse_y):
        stats.game_active = True
2.alien_invasion.py

修改check_events()

14.1.4重置游戏

为在玩家每次单击Play按钮时都重置游戏,需要重置统计信息、删除现有的外星人和子弹、创建一群新的外星人,并让飞船居中。

game_functions.py

def check_play_button(ai_settings, screen, stats, play_button, ship, aliens,
bullets, mouse_x, mouse_y):
    """在玩家单击Play按钮时开始新游戏"""
    if play_button.rect.collidepoint(mouse_x, mouse_y):
        # 重置游戏统计信息
        stats.reset_stats()

        stats.game_active = True
        # 清空外星人列表和子弹列表
        aliens.empty()
        bullets.empty()
        # 创建一群新的外星人,并让飞船居中
        creat_fleet(ai_settings,screen,ship,aliens)
        ship.center_ship()

alien_invasion.py

修改check_events()

14.1.5将Play按钮切换到非活动状态

让游戏仅在game_active为False时才开始:

修改game_function.py

14.1.6隐藏光标

为让玩家能够开始游戏,我们要让光标可见,但游戏开始后,光标只会添乱。为修复这种问
题,我们在游戏处于活动状态时让光标不可见:

隐藏光标

pygame.mouse.set_visible(False)

显示光标

pygame.mouse.set_visible(True)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值