关于“Python”的核心知识点整理大全40

这篇具有很好参考价值的文章主要介绍了关于“Python”的核心知识点整理大全40。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于“Python”的核心知识点整理大全40,python,掌握Python分类专栏:开启智能数据处理之旅!,python,开发语言

目录

alien_invasion.py

game_functions.py

14.3.3 在外星人被消灭时更新得分

settings.py

game_functions.py

game_functions.py

alien_invasion.py

14.3.4 将消灭的每个外星人的点数都计入得分

game_functions.py

14.3.5 提高点数

settings.py

settings.py

注意

14.3.6 将得分圆整

scoreboard.py

注意

14.3.7 最高得分

game_stats.py

scoreboard.py

scoreboard.py

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


关于“Python”的核心知识点整理大全40,python,掌握Python分类专栏:开启智能数据处理之旅!,python,开发语言

 14.3.2 创建记分牌

为显示得分,我们在alien_invasion.py中创建一个Scoreboard实例:

alien_invasion.py

--snip--
from game_stats import GameStats
from scoreboard import Scoreboard
--snip--
def run_game():
 --snip--
 # 创建存储游戏统计信息的实例,并创建记分牌
 stats = GameStats(ai_settings)
1 sb = Scoreboard(ai_settings, screen, stats)
--snip--
# 开始游戏主循环
while True:
 --snip--
2 gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, 
 bullets, play_button)
run_game() 

我们导入新创建的类Scoreboard,并在创建实例stats后创建了一个名为sb的Scoreboard实例 (见1)。接下来,我们将sb传递给update_screen(),让它能够在屏幕上显示得分(见2)。 为显示得分,将update_screen()修改成下面这样:

game_functions.py
def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets,
 play_button):
 --snip--
 # 显示得分
 sb.show_score()
 # 如果游戏处于非活动状态,就显示Play按钮
 if not stats.game_active:
 play_button.draw_button()
 # 让最近绘制的屏幕可见
 pygame.display.flip()

我们在update_screen()的形参列表中添加了sb,并在绘制Play按钮前调用show_score。 如果现在运行这个游戏,你将在屏幕右上角看到0(当前,我们只想在进一步开发记分系统 前确认得分出现在正确的地方)。图14-2显示了游戏开始前的得分。

关于“Python”的核心知识点整理大全40,python,掌握Python分类专栏:开启智能数据处理之旅!,python,开发语言

下面来指定每个外星人值多少点!

14.3.3 在外星人被消灭时更新得分

为在屏幕上实时地显示得分,每当有外星人被击中时,我们都更新stats.score的值,再调 用prep_score()更新得分图像。但在此之前,我们需要指定玩家每击落一个外星人都将得到多少 个点:

settings.py
def initialize_dynamic_settings(self):
 --snip--
 # 记分
 self.alien_points = 50

随着游戏的进行,我们将提高每个外星人值的点数。为确保每次开始新游戏时这个值都会被 重置,我们在initialize_dynamic_settings()中设置它。 在check_bullet_alien_collisions()中,每当有外星人被击落时,都更新得分:

game_functions.py
def check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship,
 aliens, bullets):
 """响应子弹和外星人发生碰撞"""
 # 删除发生碰撞的子弹和外星人
 collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
 if collisions:
1 stats.score += ai_settings.alien_points
 sb.prep_score()
 --snip-- 

我们更新check_bullet_alien_collisions()的定义,在其中包含了形参stats和sb,让它能够 更新得分和记分牌。有子弹撞到外星人时,Pygame返回一个字典(collisions)。我们检查这个 字典是否存在,如果存在,就将得分加上一个外星人值的点数(见)。接下来,我们调用 prep_score()来创建一幅显示最新得分的新图像。 我们需要修改update_bullets(),确保在函数之间传递合适的实参:

game_functions.py
def update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets):
 """更新子弹的位置,并删除已消失的子弹"""
 --snip--
 check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship,
 aliens, bullets) 

在update_bullets()的定义中,需要新增形参stats和sb,而调用check_bullet_alien_collisions()时,也需要传递实参stats和sb。 我们还需要修改主while循环中调用update_bullets()的代码:

alien_invasion.py
# 开始游戏主循环
 while True:
 gf.check_events(ai_settings, screen, stats, play_button, ship,
 aliens, bullets)
 if stats.game_active:
 ship.update()
 gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens,
 bullets)
 --snip-- 

调用update_bullets()时,需要传递实参stats和sb。 如果你现在运行这个游戏,得分将不断增加!

14.3.4 将消灭的每个外星人的点数都计入得分

当前,我们的代码可能遗漏了一些被消灭的外星人。例如,如果在一次循环中有两颗子弹射 中了外星人,或者因子弹更宽而同时击中了多个外星人,玩家将只能得到一个被消灭的外星人的 点数。为修复这种问题,我们来调整检测子弹和外星人碰撞的方式。 在check_bullet_alien_collisions()中,与外星人碰撞的子弹都是字典collisions中的一个 键;而与每颗子弹相关的值都是一个列表,其中包含该子弹撞到的外星人。我们遍历字典 collisions,确保将消灭的每个外星人的点数都记入得分:

game_functions.py
def check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship,
 aliens, bullets):
 --snip--
 if collisions:
1 for aliens in collisions.values():
 stats.score += ai_settings.alien_points * len(aliens)
 sb.prep_score()
 --snip-- 

如果字典collisions存在,我们就遍历其中的所有值。别忘了,每个值都是一个列表,包含 被同一颗子弹击中的所有外星人。对于每个列表,都将一个外星人的点数乘以其中包含的外星人 数量,并将结果加入到当前得分中。为测试这一点,请将子弹宽度改为300像素,并核实你得到 了更宽的子弹击中的每个外星人的点数,再将子弹宽度恢复到正常值。

14.3.5 提高点数

玩家每提高一个等级,游戏都变得更难,因此处于较高的等级时,外星人的点数应更高。为实现这种功能,我们添加一些代码,以在游戏节奏加快时提高点数:

settings.py
class Settings():
 """存储游戏《外星人入侵》的所有设置的类"""
 def __init__(self):
 --snip--
 # 加快游戏节奏的速度
 self.speedup_scale = 1.1
 # 外星人点数的提高速度
1 self.score_scale = 1.5
 self.initialize_dynamic_settings()
 def increase_speed(self):
 """提高速度设置和外星人点数"""
 self.ship_speed_factor *= self.speedup_scale
 self.bullet_speed_factor *= self.speedup_scale
 self.alien_speed_factor *= self.speedup_scale
2 self.alien_points = int(self.alien_points * self.score_scale) 

我们定义了点数提高的速度,并称之为score_scale(见)。很小的节奏加快速度(1.1)让 游戏很快就变得极具挑战性,但为让记分发生显著的变化,需要将点数的提高速度设置为更大的 值(1.5)。现在,我们在加快游戏节奏的同时,提高了每个外星人的点数。为让点数为整数,我 们使用了函数int()。 为显示外星人的点数,我们在Settings的方法increase_speed()中添加了一条print语句:

settings.py
 def increase_speed(self):
 --snip--
 self.alien_points = int(self.alien_points * self.score_scale)
 print(self.alien_points) 

现在每当提高一个等级时,你都会在终端窗口看到新的点数值.


注意

确认点数在不断增加后,一定要删除这条print语句,否则它可能会影响游戏的性能以及 分散玩家的注意力。


14.3.6 将得分圆整

大多数街机风格的射击游戏都将得分显示为10的整数倍,下面让我们的记分系统遵循这个原 则。我们还将设置得分的格式,在大数字中添加用逗号表示的千位分隔符。我们在Scoreboard中执行这种修改:

scoreboard.py
 def prep_score(self):
 """将得分转换为渲染的图像"""
1 rounded_score = int(round(self.stats.score, -1))
2 score_str = "{:,}".format(rounded_score)
 self.score_image = self.font.render(score_str, True, self.text_color,
 self.ai_settings.bg_color)
 --snip-- 

函数round()通常让小数精确到小数点后多少位,其中小数位数是由第二个实参指定的。然 而,如果将第二个实参指定为负数,round()将圆整到最近的10、100、1000等整数倍。1处的代 码让Python将stats.score的值圆整到最近的10的整数倍,并将结果存储到rounded_score中。


注意

在Python 2.7中,round()总是返回一个小数值,因此我们使用int()来确保报告的得分为 整数。如果你使用的是Python 3,可省略对int()的调用。


2处使用了一个字符串格式设置指令,它让Python将数值转换为字符串时在其中插入逗号, 例如,输出1,000,000而不是1000000。如果你现在运行这个游戏,看到的将是10的整数倍的整洁 得分,即便得分很高亦如此,如图14-3所示。

关于“Python”的核心知识点整理大全40,python,掌握Python分类专栏:开启智能数据处理之旅!,python,开发语言

14.3.7 最高得分

每个玩家都想超过游戏的最高得分记录。下面来跟踪并显示最高得分,给玩家提供要超越的 目标。我们将最高得分存储在GameStats中:

game_stats.py
 def __init__(self, ai_settings):
 --snip--
 # 在任何情况下都不应重置最高得分
 self.high_score = 0 

鉴于在任何情况下都不会重置最高得分,我们在__init__()中而不是reset_stats()中初始化 high_score。 下面来修改Scoreboard以显示最高得分。先来修改方法__init__():

scoreboard.py
 def __init__(self, ai_settings, screen, stats):
 --snip--
 # 准备包含最高得分和当前得分的图像
 self.prep_score()
1 self.prep_high_score() 

最高得分将与当前得分分开显示,因此我们需要编写一个新方法prep_high_score(),用于准 备包含最高得分的图像(见)。 方法prep_high_score()的代码如下:

scoreboard.py
 def prep_high_score(self):
 """将最高得分转换为渲染的图像"""
1 high_score = int(round(self.stats.high_score, -1))
2 high_score_str = "{:,}".format(high_score)
3 self.high_score_image = self.font.render(high_score_str, True,
 self.text_color, self.ai_settings.bg_color)
 #将最高得分放在屏幕顶部中央
 self.high_score_rect = self.high_score_image.get_rect()
4 self.high_score_rect.centerx = self.screen_rect.centerx
5 self.high_score_rect.top = self.score_rect.top 

关于“Python”的核心知识点整理大全37-CSDN博客

关于“Python”的核心知识点整理大全25-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客文章来源地址https://www.toymoban.com/news/detail-770467.html

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

到了这里,关于关于“Python”的核心知识点整理大全40的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于“Python”的核心知识点整理大全26

    目录 10.3.9 决定报告哪些错误 10.4 存储数据 10.4.1 使用 json.dump()和 json.load() number_writer.py number_reader.py 10.4.2 保存和读取用户生成的数据 对于用户生成的数据,使用json保存它们大有裨益,因为如果不以某种方式进行存储,等程 序停止运行时用户的信息将丢失。下面来看一个这样

    2024年02月04日
    浏览(44)
  • 关于“Python”的核心知识点整理大全6

    目录 4:操作列表 4.1 遍历整个列表 4.1.1 深入地研究循环 4.1.2 在 for 循环中执行更多的操作 4.1.3 在 for 循环结束后执行一些操作 4.2 避免缩进错误 4.2.1 忘记缩进 4.2.2 忘记缩进额外的代码行 4.2.3 不必要的缩进 4.2.4 循环后不必要的缩进 往期快速传送门👆(在文章最后): 你经

    2024年02月05日
    浏览(40)
  • 关于“Python”的核心知识点整理大全46

    目录 16.1.3 提取并读取数据 highs_lows.py highs_lows.py 16.1.4 绘制气温图表 highs_lows.py 16.1.5 模块 datetime ​编辑 16.1.6 在图表中添加日期 highs_lows.py 16.1.7 涵盖更长的时间 highs_lows.py highs_lows.py 16.1.9 给图表区域着色 highs_lows.py 往期快速传送门👆(在文章最后): 感谢大家的支持!欢迎

    2024年02月04日
    浏览(25)
  • 关于“Python”的核心知识点整理大全42

    目录 game_functions.py game_functions.py game_functions.py alien_invasion.py 14.4 小结 第15 章 生成数据 15.1 安装 matplotlib 15.1.1 在 Linux 系统中安装 matplotlib 15.1.2 在 OS X 系统中安装 matplotlib 注意 15.1.3 在 Windows 系统中安装 matplotlib 注意 15.1.4 测试 matplotlib 注意 15.1.5 matplotlib 画廊 15.2 绘制简单的

    2024年02月03日
    浏览(115)
  • 关于“Python”的核心知识点整理大全59

    目录 19.3.2 将数据关联到用户 1. 修改模型Topic models.py 2. 确定当前有哪些用户 3. 迁移数据库 注意 19.3.3 只允许用户访问自己的主题 views.py 19.3.4 保护用户的主题 views.py views.py 19.3.6 将新主题关联到当前用户 views.py 往期快速传送门👆(在文章最后): 感谢大家的支持!欢迎订阅

    2024年01月18日
    浏览(56)
  • 关于“Python”的核心知识点整理大全19

    目录 ​编辑 8.6.4 使用 as 给模块指定别名 8.6.5 导入模块中的所有函数 8.7 函数编写指南 8.8 小结 第9章 类 9.1 创建和使用类 9.1.1 创建 Dog 类 dog.py 1. 方法__init__() 2. 在Python 2.7中创建类 9.1.2 根据类创建实例 1. 访问属性 2. 调用方法 3. 创建多个实例 往期快速传送门👆(在文章最后

    2024年02月04日
    浏览(45)
  • 关于“Python”的核心知识点整理大全17

    目录 ​编辑 8.3.4 结合使用函数和 while 循环 greeter.py 8.4 传递列表 greet_users.py 8.4.1 在函数中修改列表 printing_models.py 8.4.2 禁止函数修改列表 要将列表的副本传递给函数,可以像下面这样做: 往期快速传送门👆(在文章最后): 感谢大家的支持!欢迎订阅收藏!专栏将持续更

    2024年02月04日
    浏览(37)
  • 关于“Python”的核心知识点整理大全9

    目录 ​编辑 5.2.4 比较数字 5.2.5 检查多个条件 1. 使用and检查多个条件 2. 使用or检查多个条件 5.2.6 检查特定值是否包含在列表中 5.2.7 检查特定值是否不包含在列表中 banned_users.py 5.2.8 布尔表达式 5.3 if 语句 5.3.1 简单的 if 语句 5.3.2 if-else 语句 5.3.3 if-elif-else 结构 5.3.4 使用多个

    2024年02月05日
    浏览(30)
  • 关于“Python”的核心知识点整理大全8

    目录 ​编辑 4.5 元组 4.5.1 定义元组 dimensions.py 4.5.2 遍历元组中的所有值 4.5.3 修改元组变量 4.6 设置代码格式 4.6.1 格式设置指南 4.6.2 缩进 4.6.3 行长 4.6.4 空行 4.6.5 其他格式设置指南 4.7 小结 第5章 if语句 5.1 一个简单示例 cars.py 5.2 条件测试 5.2.1 检查是否相等 5.2.2 检查是否相等

    2024年02月05日
    浏览(45)
  • 关于“Python”的核心知识点整理大全12

    目录 6.3.3 按顺序遍历字典中的所有键 6.3.4 遍历字典中的所有值 6.4 嵌套 6.4.1 字典列表 aliens.py 6.4.2 在字典中存储列表 pizza.py favorite_languages.py 注意 往期快速传送门👆(在文章最后): 6.3.3 按顺序遍历字典中的所有键 字典总是明确地记录键和值之间的关联关系,但获取字典的

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包