安装Pygame
Pygame是一组功能强大的模块,可用于管理图形、动画、声音。
在windows安装:就很简单,在cmd命令窗先看有没有pip,然后直接输入命令安装
项目
一个可以上下左右移动的飞船,三次机会,按键开始。失败以后显示开始按键。记录分数,提高难度,显示等级,显示最高分。
用了五天,磕磕绊绊码完了,啊,好难。
文件压缩在我的资源里。
涉及的函数
函数模板 | 解释 | 实例 |
---|---|---|
pygame.init() | 初始化背景设置 | pygame.init() |
pygame.display.set_mode() | 根据元组参数(长,高)创建屏幕 | screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) |
pygame.display.set_caption() | 根据字符串参数创建标题 | pygame.display.set_caption(“Alien Invasion”) |
pygame.display.flip() | 让最近绘制的屏幕可见 | pygame.display.flip() |
pygame.event.get() | 访问pygame检测到的时间 | for event in pygame.event.get() |
pygame.KEYDOWN/pygame.KEYUP/pygame.QUIT | 按键、松开、退出 | if event.type == pygame.QUIT |
pygame_K_UP/pygame_K_1/pygame_K_XX | 表示按键 | if event.key == pygame.K_UP |
sys.exit() | 退出程序 | sys.exit() |
screen.fill() | 根据提供的RGB值[元组(红,绿,蓝)]颜色填充屏幕 | screen.fill(ai_settings.bg_color) |
pygame.image.load() | 返回一个表示图像的surface | self.star_image = pygame.image.load(‘image/kiki.bmp’) |
get_rect() | 获取surface的属性rect,Rect 是用于存储矩形坐标的Pygame对象 | self.rect = self.image.get_rect() |
pygame.rect() | 从空白开始创建一个矩形,需要提供x/y坐标、矩形长/宽 | self.rect = pygame.Rect(0, 0, ai_settings.bullet_width, ai_settings.bullet_height) |
rect.x ;rect.width;rect.y ;rect.height;以及属性center/centerx/centery/top/bottom/left/right | 矩形对象的左上角坐标(x,y) | self.rect.x = self.rect.width |
pygame.draw.rect() | 根据提供的屏幕,颜色,矩形,填充所占的屏幕比 | pygame.draw.rect(self.screen, self.color, self.rect) |
aliens.draw() | 对编组调用draw(),pygame自动绘制编组的每个元素,位置由rect属性决定 | aliens.draw(screen) |
screen.blit() | 对surface对象调用bilit(),根据提供的图片,形状绘制屏幕 | self.screen.blit(self.image,self.rect) |
Group() | 返回pygame.sprite.Group的一个实例,类似于列表/编组 | aliens = Group() |
bullets.sprites() | 返回一个列表,包含编组中的所有精灵 | for bullet in bullets.sprites() |
pygame.sprite.groupcollide(group1,group2,dokill1,dokill2,collided=None) | 比较两个编组的rect属性,返回一个字典,包括发生碰撞的。键是Group1,相应的值是击中的Group2。实数True表示发生碰撞就删除。 | collisions = pygame.sprite.groupcollide(bullets, aliens, True, True) |
pygame.sprite.spritecollide(sprite,group,dokill1,collided=None) | 接受一个精灵和一个编组,检查是否有编组成员与精灵碰撞,True将移除成员。碰撞后停止遍历编组并返回第一个碰撞的成员 | iif pygame.sprite.spritecollide(ship, aliens, False) |
pygame.sprite.collide_rect(first, second) | 精灵与精灵 | |
empty() | 清空编组 | bullets.empty() |
pygame.font.SysFont() | 从字库系统中创建一个Font对象,两个参数:字体、字号 | self.font = pygame.font.SysFont(None, 48) |
pygame.font.Font.render() | 在一个新的Surface对象上绘制文本,接收‘文字/布尔/文字色/背景色’,背景色默认透明。 | self.msg_image = self.front.render(msg, True, self.text_color, self.button_color) |
pygame.mouse.get_pos() | 返回一个元组,包含单击鼠标时的x/y坐标 | mouse_x, mouse_y = pygame.mouse.get_pos() # 返回一个元组,包含单击鼠标时的x/y坐标 |
rect.collidepoint(x,y) | 检测坐标是否在rect图形内 | if play_button.rect.collidepoint(mouse_x, mouse_y) |
pygame.mouse.set_visible(False) | 隐藏光标 | pygame.mouse.set_visible(False) |
round() | 返回一个浮点数,将小数精确到小数点后多少位,小数点位数由第二个实参指定。第二实参为负,表示10的整倍数 | rounded_score = int(round(self.stats.score, -1)) |
alien_invasion.py
'''
游戏主程序:
一个可以上下左右移动的飞船、向右移动碰到墙壁会下移并转向的外星人、
限制数量的子弹。
子弹碰到外星人,外星人死;外星人碰到飞船重新开始
'''
import pygame # 提供游戏开发功能
from setting import Settings # 存储游戏设置的类
from ship import Ship # 存储飞船设置的类
import game_functions as gf # 存储游戏函数的模块
from pygame.sprite import Group # 类似一个列表,有助于开发游戏额外的功能
from game_stats import GameStats # 一个统计游戏信息的类
from button import Button # 一个按键信息的类
from scoreboard import Scoreboard # 一个记分牌类
# 游戏主程序
def run_game():
pygame.init() # 初始化背景设置
ai_settings = Settings() # 实例化设置对象
# 创建一个显示窗口,实参是一个元组指定窗口大小
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion")
# 创建相关对象
ship=Ship(ai_settings,screen) # 创建一艘飞船
bullets = Group() # 创建实例,一堆子弹
aliens = Group() # 创建一堆外星人
gf.create_fleet(ai_settings, screen, ship, aliens) # 创建外星人群
stats = GameStats(ai_settings) # 跟踪游戏统计对象
play_button = Button(ai_settings, screen, "PLAY") # 开始按键
scoreboard = Scoreboard(ai_settings, screen, stats) # 一个记分牌
# 游戏的主循环
while True:
gf.check_events(ai_settings, screen, stats, scoreboard, play_button, ship, aliens, bullets) # 检测鼠标键盘有无退出
if stats.game_active: # 游戏进行
gf.update_ship(ship) # 更新飞船移动信息
gf.update_bullets(ai_settings, screen, stats, scoreboard, ship, aliens, bullets) # 更新子弹位置
gf.update_aliens(ai_settings, screen, stats, scoreboard, ship, aliens, bullets) # 更新外星人移动信息
gf.update_screen(ai_settings, screen, stats, scoreboard, ship, aliens, bullets, play_button) # 刷新屏幕
run_game()
game_functions.py
'''
包含一系列函数,完成游戏的大部分工作
'''
import sys # 玩家退出游戏时,使用sys退出游戏
import pygame
from random import randint # 随机数
from time import sleep # 时间停止函数
from bullet import Bullet # 子弹类
from alien import Alien # 外星人类
# 按键功能设置
def check_keydown_events(event, ai_settings, screen, ship, bullets): # 响应按键
if event.key == pygame.K_RIGHT: # 按下右键
ship.moving_right = True # 飞船持续右移
if event.key == pygame.K_LEFT: # 左
ship.moving_left = True
if event.key == pygame.K_UP: # 上
ship.moving_up = True
if event.key == pygame.K_DOWN: # 下
ship.moving_down = True
if event.key == pygame.K_SPACE: # 空格,发子弹
fire_bullet(ai_settings, screen, ship, bullets)
if event.key == pygame.K_q: #'q'退出游戏
sys.exit()
# 响应松开按键
def check_keyup_events(event,ship):
if event.key == pygame.K_RIGHT: # 右键
ship.moving_right = False # 飞船停止右移
if event.key == pygame.K_LEFT: # 左
ship.moving_left = False
if event.key == pygame.K_UP: # 上
ship.moving_up = False
if event.key == pygame.K_DOWN: # 下
ship.moving_down = False
# 响应按键和鼠标事件
def check_events(ai_settings, screen, stats, scoreboard, play_button, ship, aliens, bullets):
for event in pygame.event.get(): # 检测事件(鼠标和键盘的移动)
if event.type == pygame.QUIT: # 检测到游戏关闭事件
sys.exit()
elif event.type == pygame.KEYDOWN: # 按键
check_keydown_events(event, ai_settings, screen, ship, bullets)
elif event.type==pygame.KEYUP:#松开按键
check_keyup_events(event,ship)
elif event.type == pygame.MOUSEBUTTONDOWN: # 鼠标按键
mouse_x, mouse_y = pygame.mouse.get_pos() # 返回一个元组,包含单击鼠标时的x/y坐标
check_play_button(ai_settings, screen, stats, scoreboard, play_button, ship, aliens, bullets, mouse_x, mouse_y)
# 鼠标按键操作
def check_play_button(ai_settings, screen, stats, scoreboard, play_button, ship, aliens, bullets, mouse_x, mouse_y):
button_clicked = play_button.rect.collidepoint(mouse_x, mouse_y) # 检测坐标是否在rect图形内
if button_clicked and not stats.game_active:
ai_settings.initialize_dynamic_settings() # 重置速度
pygame.mouse.set_visible(False) # 游戏开始,隐藏光标
stats.reset_stats() # 重置游戏统计信息
stats.game_active = True
# 重置记分牌图像
scoreboard.prep_score()
scoreboard.prep_high_score()
scoreboard.prep_level()
scoreboard.prep_ship()
# 清空
aliens.empty()
bullets.empty()
# 创建
create_fleet(ai_settings, screen, ship, aliens)
ship.center_ship()
# 发射子弹
def fire_bullet(ai_settings, screen, ship, bullets):
if len(bullets) < ai_settings.bullet_allowed: # 限制最大子弹数目
new_bullet = Bullet(ai_settings, screen, ship) # 创建一颗子弹
bullets.add(new_bullet) # 加入到编组中
# 更新屏幕图像
def update_screen(ai_settings, screen, stats, scoreboard, ship, aliens, bullets, play_button):
'''填充图片
back = pygame.image.load('images/back.bmp')
screen.blit(back,(0,0))
'''
screen.fill(ai_settings.bg_color) # 用背景色填充
for bullet in bullets.sprites(): # 返回一个列表,其中包含编组bullects中全部的精灵
bullet.draw_bullet() # 先绘制子弹,可以绘制在下面
ship.blitme() # 绘制飞船
aliens.draw(screen) # 绘制外星人群。自动绘制编组的每个元素,位置由rect决定
scoreboard.show_score() # 显示分数
if not stats.game_active: # 游戏未开始
play_button.draw_button() # 显示play按钮
pygame.display.flip() # 让最近绘制的屏幕可见
# 更新飞船位置信息
def update_ship(ship):
ship.update()
# 更新子弹位置
def update_bullets(ai_settings, screen, stats, scoreboard,ship, aliens, bullets):
bullets.update() # 更新子弹移动信息
# 删除溢出屏幕的子弹,减少内存消耗
for bullet in bullets.copy(): # 不应从列表或者编组中删除条目,因此必须遍历副本
if bullet.rect.bottom <= 0: # y坐标为复数且越来越小
bullets.remove(bullet)
# print("目前还有子弹:",len(bullets)) # 显示当前还有多少子弹
# 检查是否有子弹击中了外星人并更新外星人
check_bullet_alien_collisions(ai_settings, screen, stats, scoreboard, ship, aliens, bullets)
# 外星人撞上飞船
def ship_hit(ai_settings, screen, stats, scoreboard, ship, aliens, bullets):
if stats.ship_left > 0: # 还有剩余飞船
stats.ship_left -= 1 # 飞船数量
# 更新记分牌
scoreboard.prep_ship()
# 清空
aliens.empty()
bullets.empty()
# 重新创建
create_fleet(ai_settings, screen, ship, aliens)
ship.center_ship()
sleep(0.5)
else: # 游戏结束
stats.game_active = False
pygame.mouse.set_visible(True) # 游戏结束,光标可见
# 外星人到底,重新开始
def check_aliens_bottom(ai_settings, screen, stats, scoreboard, ship, aliens, bullets):
screen_rect = screen.get_rect()
for alien in aliens.sprites():
if alien.rect.bottom >= screen_rect.bottom: # 外星人到达屏幕底端
ship_hit(ai_settings, screen, stats, scoreboard, ship, aliens, bullets)
break
# 更新外星人移动
def update_aliens(ai_settings, screen, stats, scoreboard, ship, aliens, bullets):
# 检测是否有外星人碰到屏幕边缘
check_fleet_edges(ai_settings, aliens)
aliens.update()
# 检测外星人和飞船之间的碰撞
if pygame.sprite.spritecollide(ship, aliens, True): # 检测精灵和编组是否碰撞
ship_hit(ai_settings, screen,stats, scoreboard, ship, aliens, bullets)
# 检查是否有外星人到达底端
check_aliens_bottom(ai_settings, screen, stats, scoreboard, ship, aliens, bullets)
# 计算并返回每行可容纳外星人个数
def get_number_aliens_x(ai_settings, alien_width):
availible_space_x = ai_settings.screen_width - 2 * alien_width # 屏幕可容纳外星人的宽度
number_alien_x = int(availible_space_x / 2 / alien_width) # 屏幕允许的外星人数量
return number_alien_x
# 计算并返回一共可以容纳多少行外星人
def get_number_alien_y(ai_settings, ship_height, alien_height):
availible_space_y = ai_settings.screen_height - 3 * alien_height - ship_height
number_alien_y = int(availible_space_y / 2 / alien_height)
return number_alien_y
# 创建一个外星人
def create_alien(ai_settings, screen, aliens, alien_number_x, alien_number_y):
alien = Alien(ai_settings, screen)
alien_width = alien.rect.width # 计算一个外星人的宽度
alien.x = alien_width + 2 * alien_width * alien_number_x + randint(-10,10)
alien.rect.x = alien.x
alien.rect.y = alien.rect.height + 2*alien.rect.height*alien_number_y + randint(-10,10)
aliens.add(alien)
# 创建外星人群
def create_fleet(ai_settings, screen, ship, aliens):
alien = Alien(ai_settings, screen)
number_alien_x = get_number_aliens_x(ai_settings, alien.rect.width)
number_alien_y = get_number_alien_y(ai_settings, ship.rect.height, alien.rect.height)
for row in range(number_alien_y): # 逐个创建外星人
for alien_number in range(number_alien_x):
create_alien(ai_settings, screen, aliens, alien_number, row)
# 有外星人到达边界
def check_fleet_edges(ai_settings, aliens):
for alien in aliens.sprites(): # 精灵组
if alien.check_edges():
change_fleet_direction(ai_settings, aliens)
break
# 调整外星人向下一行并改变方向
def change_fleet_direction(ai_settings, aliens):
for alien in aliens:
alien.rect.y += ai_settings.alien_drop_factor
ai_settings.alien_fleet_direction *= -1
# 检查是否有子弹击中了外星人
def check_bullet_alien_collisions(ai_settings, screen, stats, scoreboard, ship, aliens, bullets):
collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
# 比较两个精灵的rect属性,返回一个字典,包括发生碰撞的子弹和外星人。键是子弹,相应的值是击中的
if collisions: # 击中
for aliens in collisions.values(): # 字典的值,每个值都是一个列表
stats.score += ai_settings.alien_points * len(aliens) # 加分
scoreboard.prep_score() # 显示分数
check_high_score(stats, scoreboard) # 更新最高分
# 外星人全部被击落
if len(aliens) == 0:
bullets.empty() # 清空子弹
ai_settings.increase_speed() # 加快速度
# 加快速度
stats.level += 1
scoreboard.prep_level()
create_fleet(ai_settings, screen, ship, aliens) # 新建一群外星人
# 更新最高分
def check_high_score(stats, scoreboard):
if stats.score > stats.high_score:
stats.high_score = stats.score
scoreboard.prep_high_score()
settings.py
'''
包含一个类,初始化控制游戏外观和飞行速度等属性
'''
class Settings(): # 存放所有设置
def __init__(self):
# 屏幕设置
self.screen_width = 900 # 屏幕宽
self.screen_height = 600 # 屏幕高
self.bg_color = (230, 230, 230) # 红绿蓝0-255
# 飞船设置
self.ship_limit = 3 # 飞船的数量
# 子弹设置
self.bullet_width = 3
self.bullet_height = 15
self.bullet_color = (250, 0, 0)
self.bullet_allowed = 10 # 允许最大的子弹数
# 外星人设置
self.alien_drop_factor = 10 # 掉落速度
# 提高等级
self.speedup_scale = 1.1 # 加速
self.score_scale = 1.5 # 加分
self.initialize_dynamic_settings() # 速度设置
# 需要改变的设置设置
def initialize_dynamic_settings(self):
# 速度设置
self.ship_speed_factor = 1.5 # 飞船的速度
self.alien_speed_factor = 0.5 # 外星人横向移动速度
self.alien_fleet_direction = 1 # 外星人移动方向,1右,-1左
self.bullet_speed_factor = 1 # 子弹速度
# 分数设置
self.alien_points = 10 # 外星人初始分数
# 提高速度、分数
def increase_speed(self):
self.ship_speed_factor *= self.speedup_scale
self.alien_speed_factor *= self.speedup_scale
self.alien_fleet_direction *= self.speedup_scale
self.alien_points = int(self.alien_points * self.score_scale)
print(self.alien_points)
game_stats.py
'''
一个用于跟踪游戏统计信息的新类
'''
# 跟踪游戏
class GameStats():
def __init__(self, ai_settings):
self.ai_settings = ai_settings
self.reset_stats() # 初始化统计信息
self.high_score = 0 # 保存最高分
# 标志游戏活动,False结束
self.game_active = False
# 初始化在游戏运行期间可能变化的统计信息
def reset_stats(self):
self.ship_left = self.ai_settings.ship_limit # 剩余飞船数量
self.score = 0 # 累计分数
self.level = 1
ship.py
'''
包含一个类,管理飞船的位置以及绘制飞船图像
'''
import pygame
from pygame.sprite import Sprite
# 管理飞船行为的类
class Ship(Sprite):
def __init__(self, ai_settings, screen): # 初始化飞船并设置其初始位置
super(Ship, self).__init__()
self.screen = screen # 屏幕
self.ai_settings = ai_settings # 环境设置
# 加载飞船图像,使用位图(.bmp)
self.image = pygame.image.load('images/ship.bmp') # 函数返回一个表示飞船的surface
self.rect = self.image.get_rect() # 获取相应的外观属性rect对象(外接矩形)
self.screen_rect = screen.get_rect() # 将表示屏幕的矩形存储
# 设置新飞船位置为屏幕矩形的位置,新飞船放在屏幕底部中央
self.rect.centerx = self.screen_rect.centerx # 飞船的中心位置x坐标
self.rect.bottom = self.screen_rect.bottom # 飞船下边缘的y坐标
self.center = float(self.rect.centerx) # 设置变量,使坐标位置可以存储小数
self.y = float(self.rect.y)
# 飞船移动标志
self.moving_right = False # 设置移动标志右
self.moving_left = False # 设置移动标志左
self.moving_up = False # 上
self.moving_down = False # 下
# 更新飞船位置
def update(self): # 根据移动标志调整位置,并在边界处停下
if self.moving_right and self.rect.right<self.screen_rect.right: # 右移
self.center += self.ai_settings.ship_speed_factor
if self.moving_left and self.rect.left>0: # 左移
self.center -= self.ai_settings.ship_speed_factor
if self.moving_up and self.rect.bottom>50: # 上移
self.y -= self.ai_settings.ship_speed_factor
if self.moving_down and self.rect.bottom<self.ai_settings.screen_height: # 下移
self.y += self.ai_settings.ship_speed_factor
self.rect.centerx = self.center # 根据self.center更新rect对象
self.rect.y = self.y
# 在指定位置绘制飞船
def blitme(self):
self.screen.blit(self.image, self.rect)
# 重置飞船位置为底部中心
def center_ship(self):
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
self.center = float(self.rect.centerx)
self.y = float(self.rect.y)
alien.py
'''
放置外星人类
'''
import pygame
from pygame.sprite import Sprite
class Alien(Sprite): # 外星人类
def __init__(self, ai_settings, screen):
super(Alien, self).__init__()
self.ai_settings = ai_settings
self.screen = screen
#加载外星人图像
self.image = pygame.image.load('images/alien.bmp')
self.rect = self.image.get_rect()
#将每个外星人设置在左上角附近
self.rect.x = self.rect.width
self.rect.y = self.rect.height
self.x = float(self.rect.x)
# 在指定位置绘制外星人
def blitme(self):
self.screen.blit(self.image, self.rect)
# 检测是否撞到边缘,返回布尔值
def check_edges(self):
screen_rect = self.screen.get_rect()
if self.rect.right >= screen_rect.right: # 右边缘
return True
elif self.rect.left <= 0: # 左边缘
return True
# 更新外星人移动
def update(self):
self.x += self.ai_settings.alien_speed_factor * self.ai_settings.alien_fleet_direction
self.rect.x = self.x
bullet.py
'''
包含一个类,管理子弹的属性
'''
import pygame
# 通过使用精灵,可将游戏中相关元素编组,进而同时操作编组中的所有元素
from pygame.sprite import Sprite
class Bullet(Sprite): # 继承。对飞船发射的子弹进行管理
def __init__(self, ai_settings, screen, ship): # 创建子弹对象
super(Bullet, self).__init__()
self.screen=screen
# 从空白处开始创建一个矩形表示子弹,必须提供矩形左上角x,y坐标和宽高
self.rect = pygame.Rect(0, 0, ai_settings.bullet_width, ai_settings.bullet_height)
self.rect.centerx = ship.rect.centerx # 子弹开始位置和飞船保持一致
self.rect.top = ship.rect.top
self.y = float(self.rect.y) # 使可以用小数表示子弹位置
self.color = ai_settings.bullet_color
self.speed_factor = ai_settings.bullet_speed_factor
# 向上移动子弹
def update(self):
self.y -= self.speed_factor
self.rect.y = self.y
# 在屏幕上绘制子弹
def draw_bullet(self):
pygame.draw.rect(self.screen, self.color, self.rect)
button.py
'''
按键类
'''
import pygame.font # 加载和表示字体的模块
class Button():
def __init__(self, ai_settings, screen, msg):
self.screen = screen
self.screen_rect = screen.get_rect()
# 按键的尺寸和属性
self.width = 200
self.height = 50
self.button_color = (0, 0, 0)
self.text_color = (255, 255, 255)
self.font = pygame.font.SysFont(None, 48) # 指定使用的字体字号,None是默认字体
# 创建按钮的rect对象
self.rect = pygame.Rect(0, 0, self.width, self.height)
self.rect.center = self.screen_rect.center
# 按钮的标签
self.prep_msg(msg)
# 设置按钮标签
def prep_msg(self, msg): # msg是要显示的文本
# 将存储在msg中的文本转换为图像,布尔参数表示是否开启反锯齿功能(让图像更平滑)
self.msg_image = self.font.render(msg, True, self.text_color, self.button_color)
self.msg_image_rect = self.msg_image.get_rect()
self.msg_image_rect.center = self.rect.center
# 绘制按钮
def draw_button(self):
self.screen.fill(self.button_color, self.rect) # 绘制表示按钮的矩形
self.screen.blit(self.msg_image, self.msg_image_rect)
scoreboard.py
'''
一个显示分数信息的类
'''
import pygame.font
from pygame.sprite import Group
from ship import Ship
class Scoreboard():
def __init__(self, ai_settings, screen, stats):
self.screen = screen
self.screen_rect = self.screen.get_rect()
self.ai_settings = ai_settings
self.stats = stats
self.text_color = (200, 0, 0)
self.font = pygame.font.SysFont(None, 40)
self.prep_score() # 初始分数
self.prep_high_score() # 最高分
self.prep_level() # 等级
self.prep_ship() # 剩余飞船数
# 剩余飞船数
def prep_ship(self):
self.ships = Group()
for ship_number in range(self.stats.ship_left):
ship = Ship(self.ai_settings, self.screen)
ship.rect.x = 10 + ship_number * ship.rect.width
ship.rect.y = 10
self.ships.add(ship)
# 当前分数
def prep_score(self):
# 表示分数
rounded_score = int(round(self.stats.score, -1)) # 小数精确位数,-1表示10的整倍数
score_str = "{:,}".format(rounded_score) # 格式控制,插入逗号
self.score_image = self.font.render(score_str, True, self.text_color)
# 分数位置
self.score_rect = self.score_image.get_rect()
self.score_rect.right = self.screen_rect.right - 30
self.score_rect.top = 20
# 最高分数
def prep_high_score(self):
# 表示分数
high_score = int(round(self.stats.high_score, -1)) # 小数精确位数,-1表示10的整倍数
high_score_str = "{:,}".format(high_score) # 格式控制,插入逗号
self.high_score_image = self.font.render(high_score_str, True, self.text_color)
# 分数位置
self.high_score_rect = self.high_score_image.get_rect()
self.high_score_rect.centerx = self.screen_rect.centerx
self.high_score_rect.top = 20
# 等级
def prep_level(self):
self.level_image = self.font.render(str(self.stats.level), True, self.text_color)
# 等级
self.level_rect = self.level_image.get_rect()
self.level_rect.right = self.score_rect.right
self.level_rect.top = self.score_rect.bottom + 10
# 显示分数
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)
self.ships.draw(self.screen)