为了在屏幕上显示得分,我们再创建一个得分的类
score.py
import pygame.font
class Score():
def __init__(self, my_setting, screen, start):
self.screen = screen
self.screen_rect = screen.get_rect()
self.my_setting = my_setting
self.start = start
#设置得分信息的字体和颜色
self.text_color = (30, 30, 30)
self.font = pygame.font.SysFont(None, 48)
self.prep_score()
def prep_score(self):
score_str = str(self.start.score)
self.score_image = self.font.render(score_str, True, self.text_color, self.my_setting.bg_color)
#放置分数位置
self.score_rect = self.score_image.get_rect()
self.score_rect.right = self.screen_rect.right - 20
self.score_rect.top = 20
#在屏幕上显示得分
def show_score(self):
self.screen.blit(self.score_image, self.score_rect)
main.py
.................
def run_game():
.................
start = GameStart(my_setting)
s = Score(my_setting, screen, start)
.........................
while True:
.................
ck.update_screen(my_setting, screen, start, ship, bullets, aliens, play_button, s)
........................
g_fun.py
def update_screen(my_setting, screen, start, ship, bullets, aliens, play_button, s):
...........................
#显示得分
s.show_score()
if not start.game_active:
play_button.draw_button()
...........................
g_start.py
class GameStart():
................
def reset_start(self):
#使每次开始都重置分数为0
self.score = 0
运行程序,看到屏幕右上角显示分数为0
在外星人被时更新得分
setting.py
#每个外星飞船10分
self.alien_points = 10
g_fun.py
def check_b_a_collisions(my_setting, screen, ship, aliens, bullets, s, start,):
collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
if collisions:
for aliens in collisions.values():
start.score += my_setting.alien_points
s.prep_score()
.....................................
def update_bullets(my_setting, screen, ship, aliens, bullets, s, start):
...........................................................
check_b_a_collisions(my_setting, screen, ship, aliens, bullets, s, start)
main.py
ck.update_bullets(my_setting, screen, ship, aliens, bullets, s, start)
运行程序, 没击杀一个飞船,得分10