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

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

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

目录

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

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

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


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

13.6.2 响应外星人和飞船碰撞

现在需要确定外星人与飞船发生碰撞时,该做些什么。我们不销毁ship实例并创建一个新的 ship实例,而是通过跟踪游戏的统计信息来记录飞船被撞了多少次(跟踪统计信息还有助于记 分)。 下面来编写一个用于跟踪游戏统计信息的新类——GameStats,并将其保存为文件 game_stats.py:

game_stats.py
class GameStats(): 
 """跟踪游戏的统计信息"""
 def __init__(self, ai_settings):
 """初始化统计信息"""
 self.ai_settings = ai_settings
1 self.reset_stats()
 def reset_stats(self):
 """初始化在游戏运行期间可能变化的统计信息"""
 self.ships_left = self.ai_settings.ship_limit

在这个游戏运行期间,我们只创建一个GameStats实例,但每当玩家开始新游戏时,需要重 置一些统计信息。为此,我们在方法reset_stats()中初始化大部分统计信息,而不是在__init__() 中直接初始化它们。我们在__init__()中调用这个方法,这样创建GameStats实例时将妥善地设置 这些统计信息(见Ø),同时在玩家开始新游戏时也能调用reset_stats()。 当前只有一项统计信息——ships_left,其值在游戏运行期间将不断变化。一开始玩家拥有 的飞船数存储在settings.py的ship_limit中:

settings.py
 # 飞船设置
 self.ship_speed_factor = 1.5
 self.ship_limit = 3 

我们还需对alien_invasion.py做些修改,以创建一个GameStats实例:

alien_invasion.py
--snip--
from settings import Settings
1 from game_stats import GameStats
--snip--
def run_game():
 --snip--
 pygame.display.set_caption("Alien Invasion")
 # 创建一个用于存储游戏统计信息的实例
2 stats = GameStats(ai_settings)
--snip--
# 开始游戏主循环
while True:
 --snip--
 gf.update_bullets(ai_settings, screen, ship, aliens, bullets)
3 gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets)
 --snip-- 

我们导入了新类GameStats( 见1),创建了一个名为stats的实例(见2),再调用 update_aliens()并添加了实参stats、screen和ship(见3)。在有外星人撞到飞船时,我们将使用这些实参来跟踪玩家还有多少艘飞船,以及创建一群新的外星人。 有外星人撞到飞船时,我们将余下的飞船数减1,创建一群新的外星人,并将飞船重新放置 到屏幕底端中央(我们还将让游戏暂停一段时间,让玩家在新外星人群出现前注意到发生了碰撞, 并将重新创建外星人群)。 下面将实现这些功能的大部分代码放到函数ship_hit()中:

game_functions.py
import sys
1 from time import sleep
import pygame
--snip--
def ship_hit(ai_settings, stats, screen, ship, aliens, bullets):
 """响应被外星人撞到的飞船"""
 # 将ships_left减1
2 stats.ships_left -= 1
 # 清空外星人列表和子弹列表
3 aliens.empty()
 bullets.empty()
 # 创建一群新的外星人,并将飞船放到屏幕底端中央
4 create_fleet(ai_settings, screen, ship, aliens)
 ship.center_ship()
 # 暂停
5 sleep(0.5)
6 def update_aliens(ai_settings, stats, screen, ship, aliens, bullets):
 --snip--
 # 检测外星人和飞船碰撞
 if pygame.sprite.spritecollideany(ship, aliens):
 ship_hit(ai_settings, stats, screen, ship, aliens, bullets) 

我们首先从模块time中导入了函数sleep(),以便使用它来让游戏暂停(见1)。新函数 ship_hit()在飞船被外星人撞到时作出响应。在这个函数内部,将余下的飞船数减1(见2),然 后清空编组aliens和bullets(见3)。

接下来,我们创建一群新的外星人,并将飞船居中(见4),稍后将在Ship类中添加方法 center_ship()。最后,我们更新所有元素后(但在将修改显示到屏幕前)暂停,让玩家知道其 飞船被撞到了(见5)。屏幕将暂时停止变化,让玩家能够看到外星人撞到了飞船。函数sleep() 执行完毕后,将接着执行函数update_screen(),将新的外星人群绘制到屏幕上。

我们还更新了update_aliens()的定义,使其包含形参stats、screen和bullets(6),让它 能够在调用ship_hit()时传递这些值。

下面是新方法center_ship(),请将其添加到ship.py的末尾:

ship.py
def center_ship(self):
 """让飞船在屏幕上居中"""
 self.center = self.screen_rect.centerx 

为让飞船居中,我们将飞船的属性center设置为屏幕中心的x坐标,而该坐标是通过属性 screen_rect获得的。


注意

我们根本没有创建多艘飞船,在整个游戏运行期间,我们都只创建了一个飞船实例,并 在该飞船被撞到时将其居中。统计信息ships_left让我们知道飞船是否用完。


请运行这个游戏,射杀几个外星人,并让一个外星人撞到飞船。游戏暂停后,将出现一群新 的外星人,而飞船将在屏幕底端居中。

13.6.3 有外星人到达屏幕底端

如果有外星人到达屏幕底端,我们将像有外星人撞到飞船那样作出响应。请添加一个执行这 项任务的新函数,并将其命名为update_aliens():

game_functions.py
def check_aliens_bottom(ai_settings, stats, screen, ship, aliens, bullets):
 """检查是否有外星人到达了屏幕底端"""
 screen_rect = screen.get_rect()
 for alien in aliens.sprites():
1 if alien.rect.bottom >= screen_rect.bottom:
 # 像飞船被撞到一样进行处理
 ship_hit(ai_settings, stats, screen, ship, aliens, bullets)
 break
def update_aliens(ai_settings, stats, screen, ship, aliens, bullets):
 --snip--
 # 检查是否有外星人到达屏幕底端
2 check_aliens_bottom(ai_settings, stats, screen, ship, aliens, bullets)

函数check_aliens_bottom()检查是否有外星人到达了屏幕底端。到达屏幕底端后,外星人的 属性rect.bottom的值大于或等于屏幕的属性rect.bottom的值(见1)。如果有外星人到达屏幕底 端,我们就调用ship_hit();只要检测到一个外星人到达屏幕底端,就无需检查其他外星人,因 此我们在调用ship_hit()后退出循环。

我们在更新所有外星人的位置并检测是否有外星人和飞船发生碰撞后调用check_aliens_ bottom()(见2)。现在,每当有外星人撞到飞船或抵达屏幕底端时,都将出现一群新的外星人。

13.6.4 游戏结束

现在这个游戏看起来更完整了,但它永远都不会结束,只是ships_left不断变成更小的负数。 下面在GameStats中添加一个作为标志的属性game_active,以便在玩家的飞船用完后结束游戏:

game_stats.py
 def __init__(self, settings):
 --snip--
 # 游戏刚启动时处于活动状态
 self.game_active = True 

现在在ship_hit()中添加代码,在玩家的飞船都用完后将game_active设置为False:

game_functions.py
def ship_hit(ai_settings, stats, screen, ship, aliens, bullets):
 """响应飞船被外星人撞到"""
 if stats.ships_left > 0:
 # 将ships_left减1
 stats.ships_left -= 1
 --snip--
 #暂停一会儿
 sleep(0.5)
 else:
 stats.game_active = False

ship_hit()的大部分代码都没变。我们将原来的所有代码都移到了一个if语句块中,这条if 语句检查玩家是否至少还有一艘飞船。如果是这样,就创建一群新的外星人,暂停一会儿,再接 着往下执行。如果玩家没有飞船了,就将game_active设置为False。

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

在alien_invasion.py中,我们需要确定游戏的哪些部分在任何情况下都应运行,哪些部分仅在 游戏处于活动状态时才运行:

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

在主循环中,在任何情况下都需要调用check_events(),即便游戏处于非活动状态时亦如此。 例如,我们需要知道玩家是否按了Q键以退出游戏,或单击关闭窗口的按钮。我们还需要不断更 新屏幕,以便在等待玩家是否选择开始新游戏时能够修改屏幕。其他的函数仅在游戏处于活动状 态时才需要调用,因为游戏处于非活动状态时,我们不用更新游戏元素的位置。 现在,你运行这个游戏时,它将在飞船用完后停止不动。

13.8 小结

在本章中,你学习了:如何在游戏中添加大量相同的元素,如创建一群外星人;如何使用嵌 套循环来创建元素网格,还通过调用每个元素的方法update()移动了大量的元素;如何控制对象 在屏幕上移动的方向,以及如何响应事件,如有外星人到达屏幕边缘;如何检测和响应子弹和外 星人碰撞以及外星人和飞船碰撞;如何在游戏中跟踪统计信息,以及如何使用标志game_active 来判断游戏是否结束了。

在与这个项目相关的最后一章中,我们将添加一个Play按钮,让玩家能够开始游戏,以及游 戏结束后再玩。每当玩家消灭一群外星人后,我们都将加快游戏的节奏,并添加一个记分系统, 得到一个极具可玩性的游戏!

第14 章

记 分

14.1 添加 Play 按钮

在本节中,我们将添加一个Play按钮,它在游戏开始前出现,并在游戏结束后再次出现,让 玩家能够开始新游戏。 当前,这个游戏在玩家运行alien_invasion.py时就开始了。下面让游戏一开始处于非活动状态, 并提示玩家单击Play按钮来开始游戏。为此,在game_stats.py中输入如下代码:

game_stats.py
def __init__(self, ai_settings):
 """初始化统计信息"""
 self.ai_settings = ai_settings
 self.reset_stats()
 # 让游戏一开始处于非活动状态
 self.game_active = False
 def reset_stats(self):
 --snip-- 

现在游戏一开始将处于非活动状态,等我们创建Play按钮后,玩家才能开始游戏。


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

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

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

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

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

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

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

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

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

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

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

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

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

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

到了这里,关于关于“Python”的核心知识点整理大全37的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索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

领红包