美文网首页
【python3小白上路系列】添加开炮功能~(三)

【python3小白上路系列】添加开炮功能~(三)

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

    今天我们要实现激动人心的开炮功能啦!

    1.5.4 开炮

    在game_functions.py中,我们需要修改check_keydown_events(),以便在玩家按空格键时发射一颗子弹。无需修改check_keyup_events(),原因很简单,因为松开空格键的时候什么都不会发生。最后还需要修改update_screen(),确保在调用flip()前在屏幕上重绘每颗子弹。

    import sys
    import pygame
    from bullet import Bullet
    
    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中
            new_bullet = Bullet(ai_settings,screen,ship)
            bullets.add(new_bullet)
    
    def check_keyup_events(event,ship):
        if event.key == pygame.K_RIGHT:
            ship.moving_right = False
        elif event.key == pygame.K_LEFT:
            ship.moving_left = False
    
    
    def check_events(ai_settings,screen,ship,bullets):
        #响应案件和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            #判断持续移动
            elif event.type == pygame.KEYDOWN:
                check_keydown_events(event,ai_settings,screen,ship,bullets)
            elif event.type == pygame.KEYUP:
                check_keyup_events(event,ship)
        
                
    def update_screen(ai_settings,screen,ship,bullets):
        #每次循环时都重绘屏幕
            screen.fill(ai_settings.bg_color)
            #在飞船和外星人后面重绘所有子弹
            for bullet in bullets.sprites():
                bullet.draw_bullet()
            # 屏幕上绘制飞船#
            ship.blitme()
            #让最近绘制的屏幕可见#
            pygame.display.flip()
    

    修改的时候一定要注意函数中新增加的参数。修改完game_function后,我们要修改一下主程序文件:

    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()
            bullets.update()
            gf.update_screen(ai_settings,screen,ship,bullets)
    
    rungame()
    

    运行,然后尽情开炮吧~~~


    相关文章

      网友评论

          本文标题:【python3小白上路系列】添加开炮功能~(三)

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