当前位置: 首页 > news >正文

关于“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聚合函数是在数据库中对数据进行聚合操作的函数。它们将多行数据作为输入&#xff0c;并返回单个值作为结果。 常用的MySQL聚合函数包括&#xff1a; COUNT&#xff1a;计算符合条件的行数。SUM&#xff1a;对指定列的数值进行求和操作。AVG&#xff1…...

RKNN Toolkit Lite2 一键安装和测试,sh脚本

RKNN Toolkit Lite2 安装和测试教程 本教程旨在指导用户如何使用提供的shell脚本来安装和测试RKNN Toolkit Lite2&#xff0c;适用于需要在Linux系统上部署和测试AI模型的开发者。 简介 RKNN Toolkit Lite2是一个高效的AI模型转换和推理工具包&#xff0c;专为Rockchip NPU设…...

探索中国制造API接口:解锁无限商机,引领制造业数字化转型

一、概述 中国制造API接口是一种应用程序接口&#xff0c;专门为中国制造行业提供数据和服务。通过使用API接口&#xff0c;开发者可以轻松地获取中国制造的商品信息、供应商数据、生产能力等&#xff0c;从而为他们的应用程序或网站提供更加丰富的内容和功能。 二、API接口的…...

CentOS上安装MySQL 8.0的详细教程

CentOS上安装MySQL 8.0的详细教程 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我将为大家分享一篇关于在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事件行为中&#xff0c;我们可以快捷的做很多操作&#xff0c;如删除缓存、逻辑判断等 但是在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成功实践精选(湖北)

湖北自古以来有九省通衢的美称&#xff0c;地处长江中游&#xff0c;富有荆楚之美誉&#xff0c;灵秀之蕴意。2022年湖北数字经济强省三年行动计划正式印发&#xff0c;计划到“十四五”末&#xff0c;数字经济核心产业增加值力争达到7000亿元&#xff0c;占GDP的比重超过12%。…...

C语言字符串处理提取时间(ffmpeg返回的时间字符串)

【1】需求 需求&#xff1a;有一个 “00:01:33.90” 这样格式的时间字符串&#xff0c;需要将这个字符串的时间值提取打印出来&#xff08;提取时、分、秒、毫秒&#xff09;。 这个时间字符串从哪里来的&#xff1f; 是ffmpeg返回的时间&#xff0c;也就是视频的总时间。 下…...

NC(65)元数据增加字段

以报销单主表er_bxzb表为例&#xff0c;增加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个问题轮次&#xff0c;大约有12k的自然语言问句到SQL标注的Question-SQL对。这些问题来自于…...

OpenGL 绘制Mesh数据(Qt)

文章目录 一、简介二、实现代码三、实现效果一、简介 Mesh数据的结构主要就是点与三角面片,因此本质上仍然是对三角面片进行绘制。这里我们借助VCG这个库实现对Mesh数据的读取,这个库相对简单轻巧,很方便使用。 二、实现代码 由于修改的部分很多,我们逐一进行解释一下: --…...

9.传统的轨道画线算法()

轨道画线分为以下步骤&#xff1a; 1.读取摄像头图片 2.图片灰度处理&#xff0c;截取轨道区域的图片 3.中值滤波处理&#xff0c;并区域取均值后做期望差的绝对值。本人通过一些轨道图片实验&#xff0c;用这种方法二值化得到的效果比caany算子等方法的效果好 4.二值化后再…...

F (1164) : B DS二叉排序树_有效的二叉排序树

Description 给你一个二叉树&#xff0c;判断其是否是一个有效的二叉排序树。 有效的二叉排序树定义如下&#xff1a; 1. 结点的左子树只包含小于当前结点的数。 2. 结点的右子树只包含大于当前结点的数。 3. 所有左子树和右子树自身必须也是二叉排序树。 Input 第一行输…...

结合el-upload修改支持上传图片、视频并预览

结合element plus的el-upload标签&#xff0c;实现上传图片和视频&#xff0c;并支持在线预览和放大 1、html部分 <el-form-item label"活动照片、视频"><el-uploadv-model:file-list"state.photoList":action"state.uploadUrl"accept…...

1.SQL - 概述

1. SQL语句分类 • 数据定义语言&#xff1a;简称DDL(Data Definition Language)&#xff0c;用来定义数据库对象&#xff1a;数据库&#xff0c;表&#xff0c;列等。关键字&#xff1a;create&#xff0c;alter&#xff0c;drop等 • 数据操作语言&#xff1a;简称DML(Data …...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...