章节主张
一旦程序需要对用户持续反馈状态,界面展示和数据更新的同步就变成关键工程问题。
中文释读
初学者常把记分看成一个小功能,但它其实非常典型:状态一旦需要被显示、刷新、重置和累计,程序就不再只是内部运行,还要关心用户看到什么。记分牌、等级推进、生命重置,这些动作背后都是状态管理。作者通过一个小游戏,实际上让你提前接触了所有交互系统都会遇到的问题。
关键论点
- 用户界面反馈会显著提升程序完整度。
- 状态重置和状态累计是不同类型的问题。
- 显示层与逻辑层的同步是交互程序常见难点。
行动清单
- 把用于显示的状态与用于计算的状态都理清楚。
- 测试新局开始、升级和失败时的状态重置。
- 别把界面输出和逻辑更新写成一团。
源章节深读
第 14 章 记分 本章将结束游戏《外星⼈⼊侵》的开发。我们会添加⼀个 Play 按钮, ⽤于根据需要启动游戏以及在游戏结束后重启游戏,还会修改这个游 戏,使其随玩家等级的提⾼⽽加快节奏,并实现⼀个记分系统。阅读 本章后,你将掌握⾜够多的知识,能够开始编写随玩家等级的提⾼⽽ 逐渐加⼤难度且显⽰得分的游戏了。 14.1 添加 Play 按钮 本节将添加⼀个 Play 按钮,它在游戏开始前出现,并在游戏结束后再次出 现,让玩家能够开始新游戏。 当前,这个游戏在玩家运⾏ alien_invasion.py 时就开始了。下⾯让游戏在⼀ 开始处于⾮活动状态,并提⽰玩家单击 Play 按钮来开始游戏。为此,像下 ⾯这样修改 AlienInvasion 类的 __init__() ⽅法: alien_invasion.py def __init__(self): """ 初始化统计信息 """ pygame.init() --snip-- # 让游戏在⼀开始处于⾮活动状态 self.game_active = False 现在,游戏在⼀开始处于⾮活动状态,等玩家单击我们创建的 Play 按钮 后,才能开始游戏。
14.1 添加 Play 按钮
14.1 添加 Play 按钮 本节将添加⼀个 Play 按钮,它在游戏开始前出现,并在游戏结束后再次出 现,让玩家能够开始新游戏。 当前,这个游戏在玩家运⾏ alien_invasion.py 时就开始了。下⾯让游戏在⼀ 开始处于⾮活动状态,并提⽰玩家单击 Play 按钮来开始游戏。
这节解决什么:这一节主要解决《第 14 章 记分》里一个更具体的子问题:14.1 添加 Play 按钮 该怎样落到实际代码或项目动作上。
怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。
提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。
14.2 提高难度
14.2 提⾼难度 当前,整个外星舰队被全部击落后,玩家将提⾼⼀个等级,但游戏的难度 不变。下⾯来增加⼀点⼉趣味性:每当玩家将屏幕上的外星⼈全部击落 后,都加快游戏的节奏,让游戏玩起来更难。 14.2.1 修改速度设置 ⾸先重新组织 Settings 类,将游戏设置划分成两组:静态的和动态的。 对于随着游戏进⾏⽽变化的设置,还要确保在开始新游戏时重置。
这节解决什么:这一节主要解决《第 14 章 记分》里一个更具体的子问题:14.2 提高难度 该怎样落到实际代码或项目动作上。
怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。
提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。
14.3 记分
14.3 记分 下⾯来实现记分系统,以实时地跟踪玩家的得分,并显⽰最⾼分、等级和 余下的⻜船数。
这节解决什么:这一节主要解决《第 14 章 记分》里一个更具体的子问题:14.3 记分 该怎样落到实际代码或项目动作上。
怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。
提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。
14.4 小结
14.4 ⼩结 在本章中,你学习了如何创建⽤于开始新游戏的 Play 按钮,如何检测⿏标 事件,以及如何在游戏处于活动状态时隐藏光标。你可以利⽤学到的知识 在游戏中创建其他按钮,如显⽰游戏玩法的 Help 按钮。你还学习了如何随 游戏的进⾏调整节奏,如何实现记分系统,以及如何以⽂本和⾮⽂本⽅式 显⽰信息。 项⽬ 2 数据可视化
这节解决什么:这一节主要解决《第 14 章 记分》里一个更具体的子问题:14.4 小结 该怎样落到实际代码或项目动作上。
怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。
提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。
辨析题
为什么‘记分’这种看似简单的功能很值得单独学一章?
因为它逼你第一次系统地处理显示、累计、重置和用户反馈之间的同步关系。