您的位置:首页 > 编程语言 > Python开发

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

2020-08-26 21:32 1056 查看

在今晚的这篇博客中,我将简单回顾《外星人入侵》游戏项目的最后两个文件:settings.pyalien_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__()
中,我们初始化了随游戏进行而不会变化的设置:

  1. 屏幕的大小和颜色 (第7-9行)
  2. 玩家拥有的飞船数(第12行)
  3. 飞船发射的子弹的大小,颜色及所允许的最大子弹数(第15-18行)
  4. 外星人群向下移动的速度(第22行)
  5. 提高游戏速度的倍数(第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()
来初始化游戏并开始主循环。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: