关于“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”的核心知识点整理大全18

    目录 ​编辑 8.5 传递任意数量的实参 pizza.py 8.5.1 结合使用位置实参和任意数量实参 8.5.2 使用任意数量的实参 user_profile.py 8.6 将函数存储在模块中 8.6.1 导入整个模块 pizza.py making_pizzas.py 8.6.2 导入特定的函数 8.6.3 使用 as 给函数指定别名 关于“Python”的核心知识点整理大

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

    目录 ​编辑 6.2.4 修改字典中的值  6.2.5 删除键—值对 注意 删除的键—值对永远消失了。  6.2.6 由类似对象组成的字典 6.3 遍历字典 6.3.1 遍历所有的键—值对 6.3.2 遍历字典中的所有键 往期快速传送门👆(在文章最后): 6.2.4 修改字典中的值 要修改字典中的值,可依次指定

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

    目录 10.5 小结 第11 章 测试代码 11.1 测试函数 name_function.py 函数get_formatted_name()将名和姓合并成姓名,在名和姓之间加上一个空格,并将它们的 首字母都大写,再返回结果。为核实get_formatted_name()像期望的那样工作,我们来编写一个 使用这个函数的程序。程序names.py让用户输

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

    目录 15.4.6 绘制直方图 die_visual.py 注意 15.4.7 同时掷两个骰子 dice_visual.py 15.4.8 同时掷两个面数不同的骰子 different_dice.py 15.5 小结 第 16 章 16.1 CSV 文件格式 16.1.1 分析 CSV 文件头 highs_lows.py 注意 16.1.2 打印文件头及其位置 highs_lows.py 往期快速传送门👆(在文章最后): 感谢大家

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

    由于Pygame没有内置创建按钮的方法,我们创建一个Button类,用于创建带标签的实心矩形。 你可以在游戏中使用这些代码来创建任何按钮。下面是Button类的第一部分,请将这个类保存为 文件button.py: button.py 首先,我们导入了模块pygame.font,它让Pygame能够将文本渲染到屏幕上。

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

    目录 ​编辑 15.3.4 模拟多次随机漫步 rw_visual.py 注意 15.3.5 设置随机漫步图的样式 15.3.6 给点着色 rw_visual.py 15.3.7 重新绘制起点和终点 rw_visual.py 15.3.8 隐藏坐标轴 rw_visual.py 15.3.9 增加点数 rw_visual.py 15.3.10 调整尺寸以适合屏幕 rw_visual.py 15.4 使用 Pygal 模拟掷骰子 15.4.1 安装 Pygal 注

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

    目录 world_population.py 16.2.5 制作世界地图 americas.py 16.2.6 在世界地图上呈现数字数据 na_populations.py 16.2.7 绘制完整的世界人口地图 world_population.py 16.2.8 根据人口数量将国家分组 world_population.py 16.2.9 使用 Pygal 设置世界地图的样式 world_population.py 往期快速传送门👆(在文章最后)

    2024年01月23日
    浏览(36)
  • 关于“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日
    浏览(38)
  • 关于“Python”的核心知识点整理大全37

    目录 13.6.2 响应外星人和飞船碰撞 game_stats.py settings.py alien_invasion.py game_functions.py ship.py 注意 13.6.3 有外星人到达屏幕底端 game_functions.py 13.6.4 游戏结束 game_stats.py game_functions.py 13.7 确定应运行游戏的哪些部分 alien_invasion.py 13.8 小结 第14 章 记 分 14.1 添加 Play 按钮 game_stats.py 往

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

    目录 ​编辑 14.1.5 将 Play 按钮切换到非活动状态 game_functions.py 14.1.6 隐藏光标 game_functions.py game_functions.py 14.2 提高等级 14.2.1 修改速度设置 settings.py settings.py settings.py game_functions.py 14.2.2 重置速度 game_functions.py 14.3 记分 game_stats.py 14.3.1 显示得分 scoreboard.py scoreboard.py scoreboard.p

    2024年02月04日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包