【python3小白上路系列】提高等级

2020-09-01  本文已影响0人  Charles_DT

3.2 提高等级

当前,将整群外星人都消灭干净后,玩家将提高一个等级,但游戏的难度并没有变。下面来增加一点趣味性:每当玩家将屏幕上的外星人都消灭干净后,加快游戏的节奏,让游戏玩起来更难。

3.2.1 修改速度设置

我们首先重新组织Settings 类,将游戏设置划分成静态的和动态的两组。对于随着游戏进行而变化的设置,我们还确保它们在开始新游戏时被重置。settings.py的方 法init() 如下:

class Settings():
    #存储游戏设置
    def __init__(self):
        #初始化游戏设置

        #屏幕设置
        self.screen_width = 1200
        self.screen_height = 800
        self.bg_color = (230,230,230)

        #飞船设置
        self.ship_speed_factor = 1.5
        self.ship_limit = 3

        #子弹设置
        self.bullet_speed_factor = 3
        self.bullet_width = 3
        self.bullet_height = 15
        self.bullet_color = 60,60,60
        self.bullets_allowed = 3

        #敌人设置
        #self.alien_speed_factor = 10
        self.fleet_drop_speed = 10
        #fleet_direction为1表示向右移,-1表示向左移
        #以什么样的速度加快游戏节奏
        self.speedup_scale = 1.1
        # self.fleet_direction = 1
        self.initialize_dynamic_settings()

我们依然在init() 中初始化静态设置。shouxian 我们添加了设置speedup_scale ,用于控制游戏节奏的加快速度:2表示玩家每提高一个等级,游戏的节奏就翻倍;1 表示游戏节奏始终不变。将其设置为1.1能够将游戏节奏提高到够快,让游戏既有难度,又并非不可完成。最后,我们调用initialize_dynamic_settings() ,以初始化随游戏进行而变化的属性。

下面是initialize_dynamic_settings()的代码:

def initialize_dynamic_settings(self):
        #初始化随游戏进行而变化的设置
        self.ship_speed_factor = 1.5
        self.bullet_speed_factor = 3
        self.alien_speed_factor = 1

        #fleet_direction为1表示向右移,-1表示向左移
        self.fleet_direction = 1

这个方法设置了飞船、子弹和外星人的初始速度。随游戏的进行,我们将提高这些速度,而每当玩家开始新游戏时,都将重置这些速度。在这个方法中,我们还设置了fleet_direction ,使得游戏刚开始时,外星人总是向右移动。每当玩家提高一个等级时,我们都使用increase_speed() 来提高飞船、子弹和外星人的速度:

  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

为提高这些游戏元素的速度,我们将每个速度设置都乘以speedup_scale 的值。

在check_bullet_alien_collisions() 中,我们在整群敌人都被消灭后调用increase_speed() 来加快游戏的节奏,再创建一群新的敌人:

def check_bullet_alien_collisions(ai_settings,screen,ship,aliens,bullets):
    collisions = pygame.sprite.groupcollide(bullets,aliens,True,True)

    if len(aliens) == 0:
        # 删除现有子弹并新建一群敌人
        bullets.empty()
        ai_settings.increase_speed()
        create_fleet(ai_settings,screen,ship,aliens)

通过修改速度设置ship_speed_factor 、alien_speed_factor 和bullet_speed_factor 的值,足以加快整个游戏的节奏!

3.2.2 重置速度

每当玩家开始新游戏时,我们都需要将发生了变化的设置重置为初始值,否则新游戏开始时,速度设置将是前一次游戏增加了的值:

def check_play_button(ai_settings,screen,bullets,aliens,ship,stats,play_button,mouse_x,mouse_y):
    # 在玩家单击play按钮时,开始新游戏
    button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)
    if button_clicked and not stats.game_active:
        # 重置游戏设置
        ai_settings.initialize_dynamic_settings()
        # 隐藏光标
        pygame.mouse.set_visible(False)
        # 重置游戏统计信息
        stats.reset_stats()
        stats.game_active = True

        # 清空敌人列表和子弹列表
        aliens.empty()
        bullets.empty()

        # 创建一群新的敌人,并让飞船居中
        create_fleet(ai_settings,screen,ship,aliens)
        ship.center_ship()

现在,游戏《外星人入侵》玩起来更有趣,也更有挑战性。每当玩家将屏幕上的外星人消灭干净后,游戏都将加快节奏,因此难度会更大些。如果游戏的难度提高得太快,可降低settings.speedup_scale 的值;如果游戏的挑战性不足,可稍微提高这个设置的值。找出这个设置的最佳值,让难度的提高速度相对合理:一开始的几群外星人很容易消灭干净;接下来的几群消灭起来有一定难度,但也不是不可能;而要将更靠后的外星人群消灭干净几乎不可能。

上一篇 下一篇

猜你喜欢

热点阅读