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

目录
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

我们将最高得分圆整到最近的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所示。

14.3.8 显示等级
为在游戏中显示玩家的等级,首先需要在GameStats中添加一个表示当前等级的属性。为确 保每次开始新游戏时都重置等级,在reset_stats()中初始化它:
game_stats.py
def reset_stats(self):"""初始化随游戏进行可能变化的统计信息"""self.ships_left = self.ai_settings.ship_limitself.score = 0self.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所示。

注意
在一些经典游戏中,得分带标签,如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)。 现在需要在屏幕上绘制飞船了:
scoreboard.py
def show_score(self):--snip--self.screen.blit(self.level_image, self.level_rect)# 绘制飞船self.ships.draw(self.screen)
相关文章:
关于“Python”的核心知识点整理大全41
目录 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 我们将最高得分圆整…...
java进阶(二)-java小干货
java一些精干知识点分享 2. java小干货2.1循环遍历2.2可变参数2.3 list和数组转化2.3.1 数组转list2.3.2 list转数组 2.4 值传递和地址传递2.4.1值传递2.4.2 地址传递2.4.3易错点总结 2.5 数据类型2.5.1基础知识2.5.2 基础数据和包装类 2.6 字符串2.6.1 char/String区别2.6.2 .…...
layui(iconPickerFa)图标选择器插件,主要用于后台菜单图标管理
话不多说直接上代码 在页面中引入如下代码 <link rel"stylesheet" href"/template/admin/layui-v2.5.6/css/layui.css"> <script type"text/javascript" src"/template/admin/layui-v2.5.6/layui.js"></script> &…...
RabbitMQ入门指南(九):消费者可靠性
专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、消费者确认机制 二、失败重试机制 三、失败处理策略 四、业务幂等性 1.通过唯一标识符保证操作的幂等性 2.通过业务判断保证操作的幂等性 总结 前言 RabbitMQ是一个高效、可靠的开源消息队列系…...
MySQL的聚合函数、MySQL的联合查询、MySQL的左连接右连接内连接
MySQL的聚合函数 MySQL聚合函数是在数据库中对数据进行聚合操作的函数。它们将多行数据作为输入,并返回单个值作为结果。 常用的MySQL聚合函数包括: COUNT:计算符合条件的行数。SUM:对指定列的数值进行求和操作。AVG࿱…...
RKNN Toolkit Lite2 一键安装和测试,sh脚本
RKNN Toolkit Lite2 安装和测试教程 本教程旨在指导用户如何使用提供的shell脚本来安装和测试RKNN Toolkit Lite2,适用于需要在Linux系统上部署和测试AI模型的开发者。 简介 RKNN Toolkit Lite2是一个高效的AI模型转换和推理工具包,专为Rockchip NPU设…...
探索中国制造API接口:解锁无限商机,引领制造业数字化转型
一、概述 中国制造API接口是一种应用程序接口,专门为中国制造行业提供数据和服务。通过使用API接口,开发者可以轻松地获取中国制造的商品信息、供应商数据、生产能力等,从而为他们的应用程序或网站提供更加丰富的内容和功能。 二、API接口的…...
CentOS上安装MySQL 8.0的详细教程
CentOS上安装MySQL 8.0的详细教程 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我将为大家分享一篇关于在CentOS上安装MySQL 8.0的详细教程。MySQL是一个强大…...
[RISCV] 为android14添加一个新的riscv device
本篇博客将基于android-14-r18添加Sifive unmatched板子的支持。 Setup build envoronment Establishing a build environment $ sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 x11proto-core-dev libx11-de…...
【Fastadmin】通用排序weigh不执行model模型的事件
在model模型类支持的before_delete、after_delete、before_write、after_write、before_update、after_update、before_insert、after_insert事件行为中,我们可以快捷的做很多操作,如删除缓存、逻辑判断等 但是在fastadmin的通用排序weigh拖动中无法触发…...
logstash收集华为、H3C、Cisco交换机日志
网络设备配置 将 syslog-ip 替换成服务器的IP地址。 Huawei info-center loghost source interface info-center loghost syslog-ip local-time facility local6 H3C info-center loghost source interface info-center loghost syslog-ip facility local5 Aruba logging arm …...
云上荆楚丨云轴科技ZStack成功实践精选(湖北)
湖北自古以来有九省通衢的美称,地处长江中游,富有荆楚之美誉,灵秀之蕴意。2022年湖北数字经济强省三年行动计划正式印发,计划到“十四五”末,数字经济核心产业增加值力争达到7000亿元,占GDP的比重超过12%。…...
C语言字符串处理提取时间(ffmpeg返回的时间字符串)
【1】需求 需求:有一个 “00:01:33.90” 这样格式的时间字符串,需要将这个字符串的时间值提取打印出来(提取时、分、秒、毫秒)。 这个时间字符串从哪里来的? 是ffmpeg返回的时间,也就是视频的总时间。 下…...
NC(65)元数据增加字段
以报销单主表er_bxzb表为例,增加15个字段字段以及两个其他业务所需字段 1、先在er_bxzb增加字段 增加字段 alter table er_bxzb add no_invoice char(1) default(N);alter table er_bxzb add is_enabled_taxation_cloud char(1) default(N);alter table er_bxzb a…...
SParC数据集介绍
导语 SParC是Text-to-SQL领域的一个多轮查询数据集。本篇博客将对该数据集论文和数据格式进行简要介绍。 SParC数据集概述 SParC是一个跨领域的多轮Text-to-SQL数据集。它包含有4298个问题轮次,大约有12k的自然语言问句到SQL标注的Question-SQL对。这些问题来自于…...
OpenGL 绘制Mesh数据(Qt)
文章目录 一、简介二、实现代码三、实现效果一、简介 Mesh数据的结构主要就是点与三角面片,因此本质上仍然是对三角面片进行绘制。这里我们借助VCG这个库实现对Mesh数据的读取,这个库相对简单轻巧,很方便使用。 二、实现代码 由于修改的部分很多,我们逐一进行解释一下: --…...
9.传统的轨道画线算法()
轨道画线分为以下步骤: 1.读取摄像头图片 2.图片灰度处理,截取轨道区域的图片 3.中值滤波处理,并区域取均值后做期望差的绝对值。本人通过一些轨道图片实验,用这种方法二值化得到的效果比caany算子等方法的效果好 4.二值化后再…...
F (1164) : B DS二叉排序树_有效的二叉排序树
Description 给你一个二叉树,判断其是否是一个有效的二叉排序树。 有效的二叉排序树定义如下: 1. 结点的左子树只包含小于当前结点的数。 2. 结点的右子树只包含大于当前结点的数。 3. 所有左子树和右子树自身必须也是二叉排序树。 Input 第一行输…...
结合el-upload修改支持上传图片、视频并预览
结合element plus的el-upload标签,实现上传图片和视频,并支持在线预览和放大 1、html部分 <el-form-item label"活动照片、视频"><el-uploadv-model:file-list"state.photoList":action"state.uploadUrl"accept…...
1.SQL - 概述
1. SQL语句分类 • 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等 • 数据操作语言:简称DML(Data …...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
高抗扰度汽车光耦合器的特性
晶台光电推出的125℃光耦合器系列产品(包括KL357NU、KL3H7U和KL817U),专为高温环境下的汽车应用设计,具备以下核心优势和技术特点: 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计,确保在…...
