python3.7 + pygame1.9.3实现小游戏《外星人入侵》(五):计分

这篇博客详细介绍了如何在Python的pygame游戏中添加Play按钮,启动游戏并检测点击,以及在游戏过程中实现计分和等级提升。当玩家消灭所有外星人时,游戏难度会增加,同时记录并显示玩家的最高分和当前得分。此外,还展示了如何创建Scoreboard类来显示得分和剩余飞船数量。
摘要由CSDN通过智能技术生成

本小节首先在游戏画面中添加一个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.ship_left = self.ai_settings.ship_limit

现在,游戏一开始将处于非活动状态,等我们创建Play按钮后,玩家才能开始游戏。由于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)
        #指定字体None为默认,48字号
		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
        
    #按钮的标签只需创建一次
    def preg_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
    def draw_button(self):
        #绘制一个用颜色填充的按钮,再绘制文本
        self.screen.fill(self.button_color,self.rect)
        self.screen.blit(self.msg_image,self.msg_image_rect)

在屏幕上绘制按钮:
alien_invasion.py

--snip--
from gam_stats import GameStats
from button import Button
--snip--

def run_game():
    --snip--
    pygame.display.set_caption("Alien Invasion")
    
    #创建Play按钮
    play_button = Button(ai_settings,screen,"Play")
    --snip--
    
    
    # 游戏的主循环
    while True:
    --snip--
    gf.update_screen(ai_settings,screen,stats,ship,aliens,bullets,play_button)
    run_game()

成功显示按钮后,再考虑逐步添加按钮的功能:

  • 修改update_screen(),使得游戏处于非活动状态下才显示Play按钮,且按钮位于其他所有屏幕元素上面

game_functions.py

def update_screen(ai_settings.screen,stats,ship,aliens,bullets,play_button):
    #更新屏幕上的图像,并切换到新屏幕
    --snip--
    
    #如果游戏处于非活动状态,就绘制Play按钮
    if not stats.game_active:
        play_button.draw_button()
        
    # 让最近绘制的屏幕可见
    pygame.display.flip()

开始游戏

  • 单击按钮时,检测MOUSEKEYDOWN事件,获取其位置(使用pygame.mouse.get_pos()返回其坐标值),以判断是否处于按钮的rect内,如果是,就将game_active设置为True,并重置统计信息、删除现有外星人和子弹、创建一批新的外星人群、让飞船居中,游戏就此开始。
  • 为观感体验,游戏开始后,需要隐藏光标的出现。同时给游戏新增开始游戏的快捷键P。

game_functions.py

def check_events(ai_settings,screen,stats,play_button,ship,bullets):
    # 响应按键和鼠标事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            --snip--
        elif event.type == pygame.MOUSEBUTTONDOWN:
            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(ai_settings,screen,stats,play_button,ship,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值