美文网首页
【python3小白上路系列】外星人入侵——重构

【python3小白上路系列】外星人入侵——重构

作者: Charles_DT | 来源:发表于2020-08-05 17:27 被阅读0次

    今天真是非常疲惫的一天,逻辑学的书到啦!正式入坑,赶紧学完今天的内容我要去入坑啦。

    1.3 重构

    在大型项目中,经常需要在添加新代码前重构既有代码。重构旨在简化既有代码的结构,使其更容易扩展。在本节中,我们将创建一个名为game_functions 的新模块,它将存储大量让游戏《外星人入侵》运行的函数。通过创建模块game_functions ,可避免alien_invasion.py太长,并使其逻辑更容易理解。

    1.3.1 函数check_events()

    我们将首先把管理事件的代码移到一个名为check_events() 的函数中,以简化run_game() 并隔离事件管理循环。通过隔离事件循环,可将事件管理与游戏的其他方面(如更新屏幕)分离。
    将check_events() 放在一个名为game_functions 的模块中:

    import sys
    import pygame
    
    def check_events():
        #响应案件和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
    

    这个模块中导入了事件检查循环要使用的sys 和pygame 。当前,函数check_events() 不需要任何形参,其函数体复制了alien_invasion.py的事件循环。

    下面来修改alien_invasion.py,使其导入模块game_functions ,并将事件循环替换为对函数check_events() 的调用:

    import pygame
    
    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(screen)
          
        #开始游戏主循环
        while True:
            gf.check_events()
    
            #每次循环时都重绘屏幕
            screen.fill(ai_settings.bg_color)
            # 屏幕上绘制飞船
            ship.blitme()
                
            #让最近绘制的屏幕可见#
            pygame.display.flip()
    
    rungame()
    

    导入自定义模块前一定要保存那个要导入的模块再导入!!!不然会报错!!!

    1.3.2 函数update_screen()

    为进一步简化run_game() ,下面将更新屏幕的代码移到一个名为update_screen() 的函数中,并将这个函数放在模块game_functions.py 中:

    import sys
    import pygame
    
    def check_events():
        #响应案件和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
    
    def update_screen(ai_settings,screen,ship):
        #每次循环时都重绘屏幕
            screen.fill(ai_settings.bg_color)
            # 屏幕上绘制飞船
            ship.blitme()
                
            #让最近绘制的屏幕可见#
            pygame.display.flip()
    

    新函数update_screen() 包含三个形参:ai_settings 、screen 和ship 。现在需要将alien_invasion.py的while 循环中更新屏幕的代码替换为对函数update_screen()
    的调用:

    import pygame
    
    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(screen)
          
        #开始游戏主循环
        while True:
            gf.check_events()
            gf.update_screen(ai_settings,screen,ship)
    
    rungame()
    

    这两个函数让while 循环更简单,并让后续开发更容易:在模块game_functions 而不是run_game() 中完成大部分工作。
    鉴于我们一开始只想使用一个文件,因此没有立刻引入模块game_functions 。这让你能够了解实际的开发过程:一开始将代码编写得尽可能简单,并在项目越来越复杂时进行重构。

    对代码进行重构使其更容易扩展后,明天可以开始处理游戏的动态方面了!
    溜了溜了!夯实基础去咯!

    相关文章

      网友评论

          本文标题:【python3小白上路系列】外星人入侵——重构

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