Python学习之路日志—《外星人入侵》游戏项目总结回顾(4)
2020-08-26 00:26
711 查看
在这篇博客中,我将简单分析一下 game_stats.py、scoreboard.py 和 button.py 三个文件:
5. game_stats:
这是一个用于跟踪游戏各类统计信息的类,以下是其全部内容:
class GameStats(): '''用于跟踪游戏统计信息的类''' def __init__(self, ai_settings): """初始化统计信息""" self.ai_settings = ai_settings self.reset_stats() self.game_active = False # 游戏刚启动时处于活动状态 self.high_score = 0 #在任何情况下都不应重置最高得分 def reset_stats(self): """初始化在游戏运行期间可能变化的统计信息""" self.ships_left = self.ai_settings.ship_limit self.score = 0
可以发现,在方法
__init__()中,初始化了那些在刚运行时固定的信息,如游戏刚启动时处于活动状态以及任何情况下都不应重置的最高得分。并调用了接下来定义的方法
reset_stats()。
在方法
reset_stats()中,初始化了在游戏运行期间可能变化的统计信息,如玩家剩余的飞船数和玩家的得分。
6. scoreboard:
这是一个显示玩家各类得分信息的类,以下是其全部内容:
import pygame.font class Scoreboard(): """显示得分信息的类""" def __init__(self, ai_settings, screen, stats): #初始化显示得分涉及的属性 self.screen = screen self.screen_rect = screen.get_rect() self.ai_settings = ai_settings self.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.centerx self.high_score_rect.top = self.score_rect.top
可以看到,方法
__init__主要用于初始化得分并设置其相关属性,其做了以下几件事情:
- 初始化显示得分涉及的属性(第8-12行)。
- 设置了具体的文本颜色并实例化了一个字体对象(第15-16行)。
- 准备初始得分图像和最高得分图像。(第17-18行)。
接着,方法
prep_score()(第20-29行)得分转换为字符串,然后将这个字符串传递给创建图像的
render()以将得分转换为一幅渲染的图像。最后,将玩家的得分放置在屏幕右上角。
同理,方法
prep_high_score()(第36-44行)将玩家的最高得分转换为一幅渲染的图像并放在屏幕顶部中央。
第31-34行中,方法
show_score()让我们能够在屏幕上显示玩家的当前得分与历史最高得分。
7. button:
这是一个用于设置游戏的 “Play”按钮的类,以下是其全部内容:
import pygame.font class Button(): def __init__(self, ai_settings, screen, msg): #初始化按钮的属性 self.screen = screen self.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.center self.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.center def 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行)绘制一个用颜色填充的按钮,再绘制文本。
相关文章推荐
- 2020-08-25 写python函数的参数一些注意事项
- Python学习之路日志—《外星人入侵》游戏项目总结回顾(3)
- leetcode_111. 二叉树的最小深度 python
- python 正则表达式
- leetcode_491. 递增子序列 python3
- 2020-08-25 python 爬虫,pyecharts 画图(网站链接,百度)
- python-pandas11-数据聚合-分组计算
- Python学习之路日志—《外星人入侵》游戏项目总结回顾(2)
- python——scrapy中Request参数
- 从几百个Excel中查找数据,用Python一分钟搞定
- Python基础知识都在这里!(python学习资料赠送)
- python-pandas模块10-pandas读取与写入文件
- python3数据分析之Pandas
- numpy 第二次作业
- java/php/net/python海洋食品销售网设计
- java/php/net/python广东阳光外国语学校新闻发布设计
- (爬虫二)Python爬虫入门二
- python-pandas模块9-数据拆分-异常值筛选-过滤
- java/php/net/pythont果蔬预约种植管理系统设计
- java/php/net/python郎朗球鞋交易系统设计