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

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

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

目录

scoreboard.py

game_functions.py

game_functions.py

14.3.8 显示等级

game_stats.py

scoreboard.py

scoreboard.py

scoreboard.py

game_functions.py

game_functions.py

alien_invasion.py

14.3.9 显示余下的飞船数

ship.py

scoreboard.py


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

我们将最高得分圆整到最近的10的整数倍(1),并添加了用逗号表示的千分位分隔符(见 2)。然后,我们根据最高得分生成一幅图像(见3),使其水平居中(见4),并将其top属性设 置为当前得分图像的top属性(见5)。

现在,方法show_score()需要在屏幕右上角显示当前得分,并在屏幕顶部中央显示最高得分:

scoreboard.py

 def show_score(self):
 """在屏幕上显示当前得分和最高得分"""
 self.screen.blit(self.score_image, self.score_rect)
 self.screen.blit(self.high_score_image, self.high_score_rect) 

为检查是否诞生了新的最高得分,我们在game_functions.py中添加一个新函数check_high_ score():

game_functions.py

函数check_high_score()包含两个形参:stats和sb。它使用stats来比较当前得分和最高得 分,并在必要时使用sb来修改最高得分图像。在处,我们比较当前得分和最高得分,如果当前 得分更高,就更新high_score的值,并调用prep_high_score()来更新包含最高得分的图像。 在check_bullet_alien_collisions()中,每当有外星人被消灭,都需要在更新得分后调用 check_high_score():

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

字典collisions存在时,我们根据消灭了多少外星人来更新得分,再调用check_high_ score()。 第一次玩这款游戏时,当前得分就是最高得分,因此两个地方显示的都是当前得分。但再次 开始这个游戏时,最高得分出现在中央,而当前得分出现在右边,如图14-4所示。

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

14.3.8 显示等级

为在游戏中显示玩家的等级,首先需要在GameStats中添加一个表示当前等级的属性。为确 保每次开始新游戏时都重置等级,在reset_stats()中初始化它:

game_stats.py
 def reset_stats(self):
 """初始化随游戏进行可能变化的统计信息"""
 self.ships_left = self.ai_settings.ship_limit
 self.score = 0
 self.level = 1

为让Scoreboard能够在当前得分下方显示当前等级,我们在__init__()中调用了一个新方法 prep_level():

scoreboard.py
 def __init__(self, ai_settings, screen, stats):
 --snip--
 # 准备包含得分的初始图像
 self.prep_score()
 self.prep_high_score()
 self.prep_level() 

prep_level()的代码如下:

scoreboard.py
 def prep_level(self):
 """将等级转换为渲染的图像"""
1 self.level_image = self.font.render(str(self.stats.level), True,
 self.text_color, self.ai_settings.bg_color)
 # 将等级放在得分下方
 self.level_rect = self.level_image.get_rect()
2 self.level_rect.right = self.score_rect.right
3 self.level_rect.top = self.score_rect.bottom + 10

方法prep_level()根据存储在stats.level中的值创建一幅图像(见),并将其right属性设 置为得分的right属性(见)。然后,将top属性设置为比得分图像的bottom属性大10像素,以便 在得分和等级之间留出一定的空间(见)。 我们还需要更新show_score():

scoreboard.py
 def show_score(self):
 """在屏幕上显示飞船和得分"""
self.screen.blit(self.score_image, self.score_rect)
self.screen.blit(self.high_score_image, self.high_score_rect)
 self.screen.blit(self.level_image, self.level_rect)

在这个方法中,添加了一行在屏幕上显示等级图像的代码。 我们在check_bullet_alien_collisions()中提高等级,并更新等级图像: game_functions.py

def check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship,
 aliens, bullets):
 --snip--
 if len(aliens) == 0:
 # 如果整群外星人都被消灭,就提高一个等级
 bullets.empty()
 ai_settings.increase_speed()
 # 提高等级
1 stats.level += 1
2 sb.prep_level()
 create_fleet(ai_settings, screen, ship, aliens)

如果整群外星人都被消灭,我们就将stats.level的值加1(见),并调用prep_level(),以 确保正确地显示新等级(见)。 为确保开始新游戏时更新记分和等级图像,在按钮Play被单击时触发重置:

game_functions.py
def check_play_button(ai_settings, screen, stats, sb, play_button, ship, 
 aliens, bullets, mouse_x, mouse_y):
 """在玩家单击Play按钮时开始新游戏"""
 button_clicked = play_button.rect.collidepoint(mouse_x, mouse_y)
 if button_clicked and not stats.game_active:
 --snip--
 # 重置游戏统计信息
 stats.reset_stats()
 stats.game_active = True
 # 重置记分牌图像
1 sb.prep_score()
 sb.prep_high_score()
 sb.prep_level()
 # 清空外星人列表和子弹列表
 aliens.empty()
 bullets.empty()
 --snip-- 

check_play_button()的定义需要包含对象sb。为重置记分牌图像,我们在重置相关游戏设置 后调用prep_score()、prep_high_score()和prep_level()(见)。 在check_events()中,现在需要向check_play_button()传递sb,让它能够访问记分牌对象:

game_functions.py
def check_events(ai_settings, screen, stats, sb, play_button, ship, aliens,
 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()
1 check_play_button(ai_settings, screen, stats, sb, play_button,
 ship, aliens, bullets, mouse_x, mouse_y) 

check_events()的定义需要包含形参sb,这样调用check_play_button()时,才能将sb作为实 参传递给它(见)。 最后,更新alien_invasion.py中调用check_events()的代码,也向它传递sb:

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

现在你可以知道升到多少级了,如图14-5所示。

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


注意

在一些经典游戏中,得分带标签,如Score、High Score和Level。我们没有显示这些标签, 因为开始玩这款游戏后,每个数字的含义将一目了然。要包含这些标签,只需在Scoreboard 中调用font.render()前,将它们添加到得分字符串中即可。


14.3.9 显示余下的飞船数

最后,我们来显示玩家还有多少艘飞船,但使用图形而不是数字。为此,我们在屏幕左上角 绘制飞船图像来指出还余下多少艘飞船,就像众多经典的街机游戏那样。 首先,需要让Ship继承Sprite,以便能够创建飞船编组:

ship.py
import pygame
from pygame.sprite import Sprite
1 class Ship(Sprite):
 def __init__(self, ai_settings, screen):
 """初始化飞船,并设置其起始位置"""
2 super(Ship, self).__init__()
 --snip-- 

在这里,我们导入了Sprite,让Ship继承Sprite (见1),并在__init__()的开头就调用了super()(见2)。

接下来,需要修改Scoreboard,在其中创建一个可供显示的飞船编组。下面是其中的import 语句和方法__init__(): scoreboard.py

import pygame.font
from pygame.sprite import Group
from ship import Ship
class Scoreboard():
 """报告得分信息的类"""
 def __init__(self, ai_settings, screen, stats):
 --snip--
 self.prep_level()
 self.prep_ships()
 --snip-- 

鉴于要创建一个飞船编组,我们导入Group和Ship类。调用prep_level()后,我们调用了 prep_ships()。 prep_ships()的代码如下:

scoreboard.py

 def prep_ships(self):
 """显示还余下多少艘飞船"""
1 self.ships = Group()
2 for ship_number in range(self.stats.ships_left):
 ship = Ship(self.ai_settings, self.screen)
3 ship.rect.x = 10 + ship_number * ship.rect.width
4 ship.rect.y = 10
5 self.ships.add(ship) 

方法prep_ships()创建一个空编组self.ships,用于存储飞船实例(见1)。为填充这个编组, 根据玩家还有多少艘飞船运行一个循环相应的次数(见2)。在这个循环中,我们创建一艘新飞 船,并设置其x坐标,让整个飞船编组都位于屏幕左边,且每艘飞船的左边距都为10像素(见3)。 我们还将y坐标设置为离屏幕上边缘10像素,让所有飞船都与得分图像对齐(见4)。最后,我们 将每艘新飞船都添加到编组ships中(见55)。 现在需要在屏幕上绘制飞船了:文章来源地址https://www.toymoban.com/news/detail-763263.html

scoreboard.py
def show_score(self):
 --snip--
 self.screen.blit(self.level_image, self.level_rect)
 # 绘制飞船
 self.ships.draw(self.screen)

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

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

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

相关文章

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

    目录 10.3.4 else 代码块、 10.3.5 处理 FileNotFoundError 异常 alice.py 在这个示例中,try代码块引发FileNotFoundError异常,因此Python找出与该错误匹配的 except代码块,并运行其中的代码。最终的结果是显示一条友好的错误消息,而不是traceback: 10.3.6 分析文本 10.3.7 使用多个文件 word_cou

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

    目录 11.2.4 方法 setUp() 注意 11.3 小结 第二部分 项目1 外星人入侵 第12 章 武装飞船 注意 12.1 规划项目 12.2 安装 Pygame 注意 12.2.1 使用 pip 安装 Python 包 注意 如果你启动终端会话时使用的是命令python3,那么在这里应使用命令sudo python3 get-pip.py。 12.2.2 在 Linux 系统中安装 Pygame 往

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

    目录 ​编辑 第10 章 文件和异常 10.1 从文件中读取数据 10.1.1 读取整个文件 pi_digits.txt file_reader.py 10.1.2 文件路径 10.1.3 逐行读取 file_reader.py 10.1.4 创建一个包含文件各行内容的列表 10.1.5 使用文件的内容 pi_string.py 往期快速传送门👆(在文章最后): 感谢大家的支持!欢迎订

    2024年02月03日
    浏览(39)
  • 关于“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日
    浏览(28)
  • 关于“Python”的核心知识点整理大全21

    在Python 2.7中,继承语法稍有不同,ElectricCar类的定义类似于下面这样: 函数super()需要两个实参:子类名和对象self。为帮助Python将父类和子类关联起来,这些 实参必不可少。另外,在Python 2.7中使用继承时,务必在定义父类时在括号内指定object。 9.3.3 给子类定义属性和方法

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

      目录 6. 链接到页面new_topic topics.html 19.1.2 添加新条目 1. 用于添加新条目的表单 forms.py 2. URL模式new_entry urls.py 3. 视图函数new_entry() views.py 4. 模板new_entry new_entry.html 5. 链接到页面new_entry topic.html 19.1.3 编辑条目 1. URL模式edit_entry urls.py 2. 视图函数edit_entry() views.py 往期快速传送门

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

      目录 16.2.10 加亮颜色主题 16.3 小结 第17 章 使用API 17.1 使用 Web API 17.1.1 Git 和 GitHub 17.1.2 使用 API 调用请求数据 17.1.3 安装 requests 17.1.4 处理 API 响应 python_repos.py 注意 17.1.5 处理响应字典 python_repos.py Pygal样式存储在模块style中,我们从这个模块中导入了样式RotateStyle(见1)。

    2024年02月02日
    浏览(21)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包