Python学习之路日志—《外星人入侵》游戏项目总结回顾(5)
2020-08-26 21:32
1056 查看
在今晚的这篇博客中,我将简单回顾《外星人入侵》游戏项目的最后两个文件:settings.py 和 alien_invasion.py。
8. settings :
文件settings.py包含
Settings类,这个类包含方法
__init__(),
initialize_dynamic_settings()和
increase_speed()。它存储着所有关于游戏的设置,以下是其全部内容:
class Settings(): '''存储所有设置的类''' def __init__(self): '''屏幕的设置''' self.screen_width = 1200 #屏幕设置 self.screen_height = 800 self.bg_color = (210,230,230) '''飞船的设置''' self.ship_limit = 1 '''子弹的设置''' self.bullet_width = 9 #宽9像素 self.bullet_height = 9 #高9像素 self.bullet_color = 60,60,60 #深灰色子弹 self.bullets_allowed = 4 #所允许的最大子弹数 '''外星人的设置''' self.fleet_drop_speed = 12 #外星人群向下移动的速度 self.speedup_scale = 1.2 self.initialize_dynamic_settings() def initialize_dynamic_settings(self): #初始化随游戏进行而变化的设置 self.ship_speed_factor = 1.1 self.bullet_speed_factor = 1.4 self.alien_speed_factor = 1.3 self.fleet_direction = 1 # fleet_direction为1表示向右;为-1表示向左 self.alien_points = 1 def increase_speed(self): #提高速度设置 self.ship_speed_factor *= self.speedup_scale self.bullet_speed_factor *= self.speedup_scale self.alien_speed_factor *= self.speedup_scale
可以看到,在方法
__init__()中,我们初始化了随游戏进行而不会变化的设置:
- 屏幕的大小和颜色 (第7-9行)
- 玩家拥有的飞船数(第12行)
- 飞船发射的子弹的大小,颜色及所允许的最大子弹数(第15-18行)
- 外星人群向下移动的速度(第22行)
- 提高游戏速度的倍数(第25行)
而在方法
initialize_dynamic_settings()中,我们初始化随游戏进行而变化的设置,包括飞船,子弹和外星人的速度,外星人群的移动方向以及每击杀一个外星人玩家获得的分数。
最后,在
increase_speed()这个方法中,我们用飞船,子弹和外星人的速度乘以
self.speedup_scale的值来提高游戏中各个元素的移动速度以增加游戏难度。
9. alien_invasion :
主文件alien_invasion.py创建一系列整个游戏都要用到的对象,还包含游戏的主循环,这是一个调用
check_events()、
ship.update()和
update_screen()等函数的 while 循环:
import sys import pygame from pygame.sprite import Group from settings import Settings from button import Button #导入Button类 from ship import Ship #导入ship类 from scoreboard import Scoreboard from game_stats import GameStats import game_functions as gf 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('鱼飞大作战') ship = Ship(ai_settings,screen)# 创建一艘飞船 stats = GameStats(ai_settings)# 创建了一个名为 stats 的实例 sb =Scoreboard(ai_settings, screen, stats) play_button = Button(ai_settings, screen, 'Play') # 创建Play按钮 bullets = Group() #用于存储全部子弹 aliens = Group() #创建一个名为aliens的空编组,用于存储全部外星人 #创建外星人群 gf.create_fleet(ai_settings,screen,ship,aliens) while True: gf.check_events(ai_settings, screen, stats, play_button, ship, aliens, bullets) #检查玩家的输入 if stats.game_active: ship.update() #更新飞船的位置 gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) #更新未消失的子弹的位置 gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)#使用更新后的位置来绘制新屏幕 run_game() #初始化游戏并开始主循环
首先 alien_invasion.py 从之前的那些模块中导入了相应的类为
run_game()做准备(第1-10行),
接着,在函数
run_game()中,我们针对那些导入的类创建了各种我们需要的实例(第12-21行)。
然后,我们创建空编组
bullets和
aliens,分别用于存储全部子弹和外星人(第23-24行)。在第27行,我们调用
create_fleet()来创建外星人群。
在 while 循环里,我们用
check_events()来检查玩家的输入。若游戏处于活动状态,就调用
ship.update()来更新飞船的位置,用
update_bullets()来更新未消失的子弹的位置,用
update_aliens()来更新未消失的外星人的位置。然后再用
update_screen()来使用更新后的位置来绘制新屏幕。
最后,在第41行处,我们用
run_game()来初始化游戏并开始主循环。
相关文章推荐
- 文件操作——Python
- 用 Python 读取文件和照片的创建日期
- (数据科学学习手札94)QGIS+Conda+jupyter玩转Python GIS
- python 字典
- 2020收好这447集Python入门到进阶视频,课件+笔记+代码+工具资料
- java/php/net/python会员健身系统管理设计
- java/php/net/python 黑龙江人民出版社管理系统设计
- java/php/net/python海信集团售后管理系统设计
- Python(opencv)常见错误
- java/php/net/python个性化教学系统设计
- java/php/net/python高校实验室管理系统设计
- java/php/net/python服装style分享平台设计
- java/php/net/python代驾管理系统设计
- java/php/net/python大学生交互自助旅游平台的设计
- java/php/net/python大学生创新项目管理系统设计
- java/php/net/python车辆销售管理系统设计
- java/php/net/python白茶销售系统设计
- Python学习第四课:运算符
- leetcode_529. 扫雷游戏 python
- 用Python网络爬虫获取Mikan动漫资源