美文网首页
【python3小白上路系列】限制子弹数量

【python3小白上路系列】限制子弹数量

作者: Charles_DT | 来源:发表于2020-08-18 18:55 被阅读0次

    作为一个有良心的游戏,我们不能让玩家沉迷下去,所以子弹的数量我们要限制一下,变相增加游戏难度。

    1.5.6 限制子弹数量

    首先,在settings.py中存储所允许的最大子弹数:这里我们设置为3发。

    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.bullet_speed_factor = 1
            self.bullet_width = 3
            self.bullet_height = 15
            self.bullet_color = 60,60,60
            self.bullets_allowed = 3
    

    下面我们需要在game_functions.py的check_keydown_events() 中,创建新子弹前检查未消失的子弹数是否小于该设置:

    def check_keydown_events(event,ai_settings,screen,ship,bullets):
        # 响应按键
        if event.key == pygame.K_RIGHT:
            #向右移动飞船
            ship.moving_right = True
        elif event.key == pygame.K_LEFT:
            #向左移动飞船
            ship.moving_left = True
        elif event.key == pygame.K_SPACE:
            #创建一颗子弹,并将其加入编组bullets中
            if len(bullets) < ai_settings.bullets_allowed:
                new_bullet = Bullet(ai_settings,screen,ship)
                bullets.add(new_bullet)
    

    玩家按空格键时,我们检查bullets 的长度。如果len(bullets) 小于3,我们就创建一个新子弹;但如果已有3颗未消失的子弹,则玩家按空格键时什么都不会发生。如果你 现在运行这个游戏,屏幕上最多只能有3颗子弹。

    1.5.7 创建函数update_bullets()

    编写并检查子弹管理代码后,可将其移到模块game_functions 中,以让主程序文件alien_invasion.py尽可能简单。我们创建一个名为update_bullets() 的新函数,并将其添加到game_functions.py的末尾:

    def update_bullets(bullets):
        # 更新子弹的位置
         bullets.update()   # 删除已消失的子弹
        for bullet in bullets.copy():
            if bullet.rect.bottom <= 0:
                bullets.remove(bullet)
        #print(len(bullets))
    

    现在我们主程序的代码就更加简洁了:

    import pygame
    from pygame.sprite import Group
    from setting import Settings
    from ship import Ship
    import game_functions as gf
    
    def rungame():
        #初始化游戏并创建一个屏幕对象
        pygame.init()
    
        #实例化设置对象
        ai_settings = Settings()
        screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
        pygame.display.set_caption("Alien Invasion")
    
        #创建一只飞船
        ship = Ship(ai_settings,screen)
    
        #创建一个用于存储子弹的编组
        bullets = Group()
          
        #开始游戏主循环
        while True:
            gf.check_events(ai_settings,screen,ship,bullets)
            ship.update()
            gf.update_bullets(bullets)
            gf.update_screen(ai_settings,screen,ship,bullets)
    
    rungame()
    
    1.5.8 创建函数fire_bullet()

    下面将发射子弹的代码移到一个独立的函数中,这样,在check_keydown_events() 中只需使用一行代码来发射子弹,让elif 代码块变得非常简单:

    def fire_bullet(ai_settings,screen,ship,bullets):
        #创建一颗子弹,并将其加入编组bullets中
        if len(bullets) < ai_settings.bullets_allowed:
            new_bullet = Bullet(ai_settings,screen,ship)
            bullets.add(new_bullet)
    

    函数fire_bullet() 只包含玩家按空格键时用于发射子弹的代码;在check_keydown_events() 中,我们在玩家按空格键时调用fire_bullet() 。

    相关文章

      网友评论

          本文标题:【python3小白上路系列】限制子弹数量

          本文链接:https://www.haomeiwen.com/subject/tuahjktx.html