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

    关于“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日
    浏览(11)
  • 关于“Python”的核心知识点整理大全21

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

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

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

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

    目录 3. 模板edit_entry edit_entry.html 4. 链接到页面edit_entry topic.html 19.2 创建用户账户 19.2.1 应用程序 users 1. 将应用程序users添加到settings.py中 settings.py 2. 包含应用程序users的URL urls.py 19.2.2 登录页面 urls.py 1. 模板login.html login.html 2. 链接到登录页面 base.html 3. 使用登录页面 往期快速传

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

    关于“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日
    浏览(11)
  • 关于“Python”的核心知识点整理大全19

    关于“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日
    浏览(12)
  • 关于“Python”的核心知识点整理大全9

    关于“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日
    浏览(10)
  • 关于“Python”的核心知识点整理大全37

    关于“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日
    浏览(16)
  • 关于“Python”的核心知识点整理大全18

    关于“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日
    浏览(16)
  • 关于“Python”的核心知识点整理大全30

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

    目录 12.2.3 在 OS X 系统中安装 Pygame 12.2.4 在 Windows 系统中安装 Pygame 12.3 开始游戏项目 12.3.1 创建 Pygame 窗口以及响应用户输入 首先,我们创建一个空的Pygame窗口。使用Pygame编写的游戏的基本结构如下: alien_invasion.py 12.3.2 设置背景色 alien_invasion.py 12.3.3 创建设置类 settings.py al

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

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

    目录 ​编辑 15.2.3 使2散点图并设置其样式 scatter_squares.py 15.2.4 使用 scatter()绘制一系列点 scatter_squares.py 15.2.5 自动计算数据 scatter_squares.py 15.2.6 删除数据点的轮廓 15.2.7 自定义颜色 15.2.8 使用颜色映射 scatter_squares.py 注意 15.2.9 自动保存图表 15.3 随机漫步 15.3.1 创建 RandomWalk()类

    2024年02月04日
    浏览(10)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包