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

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

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

14.1.1 创建 Button 类

由于Pygame没有内置创建按钮的方法,我们创建一个Button类,用于创建带标签的实心矩形。 你可以在游戏中使用这些代码来创建任何按钮。下面是Button类的第一部分,请将这个类保存为 文件button.py:

button.py
import pygame.font
class Button():
1 def __init__(self, ai_settings, screen, msg):
 """初始化按钮的属性"""
 self.screen = screen
 self.screen_rect = screen.get_rect()
 # 设置按钮的尺寸和其他属性
2 self.width, self.height = 200, 50
 self.button_color = (0, 255, 0)
 self.text_color = (255, 255, 255)
3 self.font = pygame.font.SysFont(None, 48)
 # 创建按钮的rect对象,并使其居中
4 self.rect = pygame.Rect(0, 0, self.width, self.height)
 self.rect.center = self.screen_rect.center
 # 按钮的标签只需创建一次
5 self.prep_msg(msg)

首先,我们导入了模块pygame.font,它让Pygame能够将文本渲染到屏幕上。方法__init__() 接受参数self,对象ai_settings和screen,以及msg,其中msg是要在按钮中显示的文本(见1)。 我们设置按钮的尺寸(见2),然后通过设置button_color让按钮的rect对象为亮绿色,并通过设 置text_color让文本为白色。 在(见3)处,我们指定使用什么字体来渲染文本。实参None让Pygame使用默认字体,而48 指定了文本的字号。为让按钮在屏幕上居中,我们创建一个表示按钮的rect对象(见4),并将 其center属性设置为屏幕的center属性。

Pygame通过将你要显示的字符串渲染为图像来处理文本。在5处,我们调用prep_msg()来处 理这样的渲染。 prep_msg()的代码如下:

button.py
def prep_msg(self, msg):
 """将msg渲染为图像,并使其在按钮上居中"""
1 self.msg_image = self.font.render(msg, True, self.text_color,
 self.button_color)
2 self.msg_image_rect = self.msg_image.get_rect()
 self.msg_image_rect.center = self.rect.center 

方法prep_msg()接受实参self以及要渲染为图像的文本(msg)。调用font.render()将存储在 msg中的文本转换为图像,然后将该图像存储在msg_image中(见1)。方法font.render()还接受 一个布尔实参,该实参指定开启还是关闭反锯齿功能(反锯齿让文本的边缘更平滑)。余下的两 个实参分别是文本颜色和背景色。我们启用了反锯齿功能,并将文本的背景色设置为按钮的颜色 (如果没有指定背景色,Pygame将以透明背景的方式渲染文本)。

在2处,我们让文本图像在按钮上居中:根据文本图像创建一个rect,并将其center属性设 置为按钮的center属性。

最后,我们创建方法draw_button(),通过调用它可将这个按钮显示到屏幕上:

button.py
 def draw_button(self):
 # 绘制一个用颜色填充的按钮,再绘制文本
 self.screen.fill(self.button_color, self.rect)
 self.screen.blit(self.msg_image, self.msg_image_rect)

我们调用screen.fill()来绘制表示按钮的矩形,再调用screen.blit(),并向它传递一幅图 像以及与该图像相关联的rect对象,从而在屏幕上绘制文本图像。至此,Button类便创建好了。

14.1.2 在屏幕上绘制按钮

我们将使用Button类来创建一个Play按钮。鉴于只需要一个Play按钮,我们直接在 alien_invasion.py中创建它,如下所示:

alien_invasion.py
--snip--
from game_stats import GameStats
from button import Button
--snip--
def run_game():
 --snip--
 pygame.display.set_caption("Alien Invasion")
 # 创建Play按钮
1 play_button = Button(ai_settings, screen, "Play")
--snip--
 # 开始游戏主循环
 while True:
 --snip--
2 gf.update_screen(ai_settings, screen, stats, ship, aliens, bullets,
 play_button) 
run_game() 

我们导入Button类,并创建一个名为play_button的实例(见1),然后我们将play_button传 递给update_screen(),以便能够在屏幕更新时显示按钮(见2)。

接下来,修改update_screen(),以便在游戏处于非活动状态时显示Play按钮:

game_functions.py
def update_screen(ai_settings, screen, stats, ship, aliens, bullets,
 play_button):
 """更新屏幕上的图像,并切换到新屏幕"""
 --snip--
 # 如果游戏处于非活动状态,就绘制Play按钮
 if not stats.game_active:
 play_button.draw_button()
 # 让最近绘制的屏幕可见
 pygame.display.flip() 

为让Play按钮位于其他所有屏幕元素上面,我们在绘制其他所有游戏元素后再绘制这个按 钮,然后切换到新屏幕。如果你现在运行这个游戏,将在屏幕中央看到一个Play按钮,如图14-1 所示。

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

14.1.3 开始游戏

为在玩家单击Play按钮时开始新游戏,需在game_functions.py中添加如下代码,以监视与这 个按钮相关的鼠标事件:

game_functions.py
def check_events(ai_settings, screen, stats, play_button, ship, bullets):
 """响应按键和鼠标事件"""
 for event in pygame.event.get():
 if event.type == pygame.QUIT:
 --snip--
1 elif event.type == pygame.MOUSEBUTTONDOWN:
2 mouse_x, mouse_y = pygame.mouse.get_pos()
3 check_play_button(stats, play_button, mouse_x, mouse_y)
def check_play_button(stats, play_button, mouse_x, mouse_y):
 """在玩家单击Play按钮时开始新游戏"""
4 if play_button.rect.collidepoint(mouse_x, mouse_y):
 stats.game_active = True 

我们修改了check_events()的定义,在其中添加了形参stats和play_button。我们将使用stats 来访问标志game_active,并使用play_button来检查玩家是否单击了Play按钮。

无论玩家单击屏幕的什么地方,Pygame都将检测到一个MOUSEBUTTONDOWN事件(见1),但我 们只想让这个游戏在玩家用鼠标单击Play按钮时作出响应。为此,我们使用了pygame.mouse. get_pos(),它返回一个元组,其中包含玩家单击时鼠标的x和y坐标(见2)。我们将这些值传递 给函数check_play_button()(见3),而这个函数使用collidepoint()检查鼠标单击位置是否在 Play按钮的rect内(见4)。如果是这样的,我们就将game_active设置为True,让游戏就此开始! 在alien_invasion.py中调用check_events(),需要传递另外两个实参——stats和play_ button:

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

至此,你应该能够开始这个游戏了。游戏结束时,game_active应为False,并重新显示Play 按钮。

14.1.4 重置游戏

前面编写的代码只处理了玩家第一次单击Play按钮的情况,而没有处理游戏结束的情况,因 为没有重置导致游戏结束的条件。

为在玩家每次单击Play按钮时都重置游戏,需要重置统计信息、删除现有的外星人和子弹、 创建一群新的外星人,并让飞船居中,如下所示:

game_functions.py
def check_play_button(ai_settings, screen, stats, play_button, ship, aliens,
 bullets, mouse_x, mouse_y):
 """在玩家单击Play按钮时开始新游戏"""
 if play_button.rect.collidepoint(mouse_x, mouse_y):
 # 重置游戏统计信息
1 stats.reset_stats()
 stats.game_active = True
 # 清空外星人列表和子弹列表
2 aliens.empty()
 bullets.empty()
 # 创建一群新的外星人,并让飞船居中
3 create_fleet(ai_settings, screen, ship, aliens)
 ship.center_ship()

我们更新了check_play_button()的定义,使其能够访问ai_settings、stats、ship、aliens 和bullets。为重置在游戏期间发生了变化的设置以及刷新游戏的视觉元素,它需要这些对象。 在1处,我们重置了游戏统计信息,给玩家提供了三艘新飞船。接下来,我们将game_active 设置为True(这样,这个函数的代码执行完毕后,游戏就会开始),清空编组aliens和bullets(见 2),创建一群新的外星人,并将飞船居中(见3)。 check_events()的定义需要修改,调用check_play_button()的代码亦如此:

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

check_events()的定义需要形参aliens,以便将它传递给check_play_button()。接下来,我 们修改了调用check_play_button()的代码,以将合适的实参传递给它(见1)。 下面来修改alien_invasion.py中调用check_events()的代码,以将实参aliens传递给它:

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

现在,每当玩家单击Play按钮时,这个游戏都将正确地重置,让玩家想玩多少次就玩多少次!文章来源地址https://www.toymoban.com/news/detail-779321.html


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

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

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

领红包