Python工程师之Python编程:从入门到实践【4.2】

13.7 确定应运行游戏的哪些部分

我们需要确定游戏的哪些部分在任何情况下都应运行,哪些部分仅在游戏处于活动
状态时才运行:
alien_invasion.py
def run_game(self):
"""开始游戏主循环。"""
while True:
self._check_events()
if self.stats.game_active:
self.ship.update()
self._update_bullets()
self._update_aliens()
self._update_screen()
在主循环中,在任何情况下都需要调用_check_events() ,即便游戏处于非活动
状态。例如,我们需要知道玩家是否按了Q 键以退出游戏,或者是否单击了关闭窗
口的按钮。我们还需要不断更新屏幕,以便在等待玩家是否选择开始新游戏时修改
屏幕。其他的函数仅在游戏处于活动状态时才需要调用,因为游戏处于非活动状态
时,不用更新游戏元素的位置。
现在运行这个游戏,它将在飞船用完后停止不动。
动手试一试
练习13-6:游戏结束  在为完成练习13-5而编写的游戏中,记录飞船被撞到了
多少次以及有多少外星人被射杀。确定合适的游戏结束条件,并在满足该条件
后结束游戏。

13.8 小结

在本章中,你学习了:如何在游戏中添加大量相同的元素,如创建一群外星人;如
何使用嵌套循环来创建元素网格,还通过调用每个元素的方法update() 移动了大
量元素;如何控制对象在屏幕上移动的方向,以及如何响应事件,如有外星人到达
屏幕边缘;如何检测和响应子弹和外星人碰撞以及外星人和飞船碰撞;如何在游戏
中跟踪统计信息,以及如何使用标志game_active 来判断游戏是否结束。
在与这个项目相关的最后一章中,我们将添加一个Play按钮,让玩家能够开始游
戏,以及在游戏结束后重玩。每当玩家消灭一群外星人后,我们都将加快游戏的节
奏,并添加一个记分系统,得到一个极具可玩性的游戏!

第 14 章 记分

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

14.1 添加Play按钮

本节将添加一个Play按钮,它在游戏开始前出现,并在游戏结束后再次出现,让玩
家能够开始新游戏。
当前,这个游戏在玩家运行alien_invasion.py时就开始了。下面让游戏一开始处于
非活动状态,并提示玩家单击Play按钮来开始游戏。为此,像下面这样修改
GameStats 类的方法__init__() :
game_stats.py
def __init__(self, ai_game):
"""初始化统计信息。"""
self.settings = ai_game.settings
self.reset_stats()
# 让游戏一开始处于非活动状态。
self.game_active = False
现在,游戏一开始将处于非活动状态,待创建Play按钮后,玩家才能开始游戏。

14.1.1 创建Button 类

由于Pygame没有内置创建按钮的方法,我们将编写一个Button 类,用于创建带标
签的实心矩形。你可在游戏中使用这些代码来创建任何按钮。下面是Button 类的
第一部分,请将这个类保存为文件button.py:
button.py
import pygame.font
class Button:

def __init__(self, ai_game, msg):
"""初始化按钮的属性。"""

self.screen = ai_game.screen
self.screen_rect = self.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.cent
  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值