AI智能
改变未来

Python学习之路日志—《外星人入侵》游戏项目总结回顾(4)

在这篇博客中,我将简单分析一下 game_stats.pyscoreboard.pybutton.py 三个文件:

5. game_stats:

这是一个用于跟踪游戏各类统计信息的类,以下是其全部内容:

class GameStats():\'\'\'用于跟踪游戏统计信息的类\'\'\'def __init__(self, ai_settings):\"\"\"初始化统计信息\"\"\"self.ai_settings = ai_settingsself.reset_stats()self.game_active = False # 游戏刚启动时处于活动状态self.high_score = 0 #在任何情况下都不应重置最高得分def reset_stats(self):\"\"\"初始化在游戏运行期间可能变化的统计信息\"\"\"self.ships_left = self.ai_settings.ship_limitself.score = 0

可以发现,在方法

__init__()

中,初始化了那些在刚运行时固定的信息,如游戏刚启动时处于活动状态以及任何情况下都不应重置的最高得分。并调用了接下来定义的方法

reset_stats()

在方法

reset_stats()

中,初始化了在游戏运行期间可能变化的统计信息,如玩家剩余的飞船数和玩家的得分。

6. scoreboard:

这是一个显示玩家各类得分信息的类,以下是其全部内容:

import pygame.fontclass Scoreboard():\"\"\"显示得分信息的类\"\"\"def __init__(self, ai_settings, screen, stats):#初始化显示得分涉及的属性self.screen = screenself.screen_rect = screen.get_rect()self.ai_settings = ai_settingsself.stats = stats# 显示得分信息时使用的字体设置self.text_color = (35,35,35) #设置文本颜色self.font = pygame.font.SysFont(\'arial\',47) #实例化一个字体对象self.prep_score() # 准备初始得分图像self.prep_high_score() # 准备最高得分图像def prep_score(self):#将得分转换为一幅渲染的图像score_str = str(self.stats.score) #将数字值stats.score 转换为字符串self.score_image = self.font.render(score_str, True, self.text_color,self.ai_settings.bg_color) #将这个字符串传递给创建图像的render()# 将得分放在屏幕右上角self.score_rect = self.score_image.get_rect()self.score_rect.right = self.screen_rect.right - 20 #让其右边缘与屏幕右边缘相距20像素self.score_rect.top = 20 #让其上边缘与屏幕上边缘也相距20像素def show_score(self):self.screen.blit(self.score_image, self.score_rect)#在屏幕上显示当前得分self.screen.blit(self.high_score_image, self.high_score_rect)#在屏幕上显示最高得分def prep_high_score(self):high_score = int(self.stats.high_score)high_score_str = \"{:,}\".format(high_score)self.high_score_image = self.font.render(high_score_str, True, self.text_color, self.ai_settings.bg_color)#将最高得分放在屏幕顶部中央self.high_score_rect = self.high_score_image.get_rect()self.high_score_rect.centerx = self.screen_rect.centerxself.high_score_rect.top = self.score_rect.top

可以看到,方法

__init__

主要用于初始化得分并设置其相关属性,其做了以下几件事情:

  1. 初始化显示得分涉及的属性(第8-12行)。
  2. 设置了具体的文本颜色并实例化了一个字体对象(第15-16行)。
  3. 准备初始得分图像和最高得分图像。(第17-18行)。

接着,方法

prep_score()

(第20-29行)得分转换为字符串,然后将这个字符串传递给创建图像的

render()

以将得分转换为一幅渲染的图像。最后,将玩家的得分放置在屏幕右上角。

同理,方法

prep_high_score()

(第36-44行)将玩家的最高得分转换为一幅渲染的图像并放在屏幕顶部中央。

第31-34行中,方法

show_score()

让我们能够在屏幕上显示玩家的当前得分与历史最高得分。

7. button:

这是一个用于设置游戏的 “Play”按钮的类,以下是其全部内容:

import pygame.fontclass Button():def __init__(self, ai_settings, screen, msg):#初始化按钮的属性self.screen = screenself.screen_rect = screen.get_rect()# 设置按钮的属性self.width, self.height = 200,50 #设置按钮的尺寸self.button_color = (0,255,0) #让按钮的rect对象为亮绿色self.text_color = (255,255,255) #让文本为白色self.font = pygame.font.SysFont(\'arial\', 48) #使用什么样字体,而48指定了文本的字号# 创建按钮的rect对象,并使其居中self.rect = pygame.Rect(0, 0, self.width, self.height)self.rect.center = self.screen_rect.centerself.prep_msg(msg)def prep_msg(self,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.centerdef draw_button(self):# 绘制一个用颜色填充的按钮,再绘制文本self.screen.fill(self.button_color, self.rect)self.screen.blit(self.msg_image, self.msg_image_rect)

与上面的

scoreboard()

相似,在

__init__()

(第5-19行)中,初始化了按钮的属性,并设置了按钮的相关属性,如尺寸,颜色,字体,字号和位置。还在第21行调用了

prep_msg()

方法

prep_msg()

(第23-29行)则将文本渲染为图像,并使其在按钮上居中。

最后,利用

draw_button()

(第31-35行)绘制一个用颜色填充的按钮,再绘制文本。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Python学习之路日志—《外星人入侵》游戏项目总结回顾(4)