美文网首页Python知识锦集
Python:飞机大战游戏3:框架搭建

Python:飞机大战游戏3:框架搭建

作者: IIronMan | 来源:发表于2018-11-18 23:26 被阅读17次

    一、总体目录

    • 明确主程序的指责
    • 实现飞机大战主程序类
    • 准备游戏精灵组

    二、明确主程序的指责

    • 2.1、一个主程序的 职责 可以分为两个部分:初始化游戏循环
    • 2.2、根据明确的指责,设计 PlanGame 类如下:
      PlanGame

      提示:根据 职责 封装私有方法,可以避免某一个方法的代码写得太过冗长,如果某一个方法编写的太长,既不好看,也不容易维护!

    • 2.3、游戏初始化__init__() 会调用以下方法
      方法 职责
      __event_handler(self) 事件监听
      __check_collide(self) 碰撞检测---子弹销毁敌机、敌机撞毁英雄
      __update_sprites(self) 精灵组更新和绘制
      __game_over(self) 游戏结束

    三、实现飞机大战主程序类

    • 3.1、明确文件职责


      明确文件职责
      • plane_main:封装 主游戏类;创建 游戏对象;启动游戏

      • plane_sprites : 封装游戏中 所有 需要使用的 精灵子类;提供游戏的 相关工具

      • 创建 plane_main.py 模块

        import pygame
        from plan_sprites import *
        
        class PlanGame(object):
                 """飞机大战主游戏"""
        
        def __init__(self):
        
               print("游戏初始化")
        
        def start_game(self):
        
               print("开始游戏")
        
        # 在主模块里面编写测试代码
        if __name__ == '__main__':
        
                # 1、创建游戏对象
                game = PlanGame()
        
                # 2、启动游戏
                game.start_game()
        
    • 3.2、plane_main.py 模块 初始化内容的完善(SCREEN_RECT是屏幕 Rect的常量:常量相约是所有字母大写,字母之间用_下划线)

      def __init__(self):
      
            print("游戏初始化")
            # 1、设置游戏窗口
            self.screen = pygame.display.set_mode(SCREEN_RECT.size)
      
            # 2、创建游戏时钟
            self.lock = pygame.time.Clock()
      
           # 3、创建精灵和精灵组(私有方法)
           self. __create_plan_sprites()
        
           def __create_plan_sprites(self):
        
                       print("创建游戏精灵")
      
    • 3.3、plane_main.py 模块 开始游戏的代码完善

      def start_game(self):
      
        while True:
            print("开始游戏")
            # 1、设置刷新帧率
            self.lock.tick(FRAME_PER_SEC)
      
            # 2、事件监听
            self.__event_handler()
      
            # 3、碰撞检测
            self.__check_collide()
      
            # 4、更新/绘制精灵组
            self.__update_sprites()
      
            # 5、更新显示
            pygame.display.update()
      
      def __event_handler(self):
      
        print("处理用户的操作事件")
      
        for event in pygame.event.get():
      
            if event.type == pygame.QUIT:
                # 游戏关闭(结束)
                self.__game_over()
      
      def __check_collide(self):
      
          print("碰撞检测")
      
      def __update_sprites(self):
      
          print("更新/绘制精灵组")
      
      @staticmethod
      def __game_over():
      
           print("游戏结束")
      
           # 退出游戏,卸载加载的所有模块,
           pygame.quit()
           # 直接退出系统(终止当前正在执行的程序)
           exit()
      
    • 3.4、上面的代码用到了常量,比如上面的屏幕的Rect: SCREEN_RECT和时钟刷新帧率FRAME_PER_SEC,下面就介绍一下常量

      常量:不变化的量(没有真正意义的常量)
      变量:不可以变化的量

      • 应用场景:
        • 在开发时候,可能会需要使用 固定的数值,例如:屏幕的高度 是 700
        • 这个时候,建议 不要 直接使用固定数值,而是应该使用 常量
        • 在开发时,为了保证代码的可维护性,尽量不要使用 魔法数字
      • 常量的定义
        • 定义 常量 和定义 变量 的语法完全一样,都是使用 赋值语句
        • 常量命名 应该 所有字母都使用大写,单词与单词之间使用下划线连接起来
      • 常量的好处
        • 阅读代码时,通过 常量名 见名之意,不需要猜测数字的含义
        • 如果需要 调整值,只需要 修改常量定义 就可以实现 统一修改

    三、准备游戏精灵组

    • 3.1、先在 __init__方法里面完善

       def __init__(self):
        
        # 新增精灵组属性
        self.enemy_group = None
        # 3、创建精灵和精灵组(私有方法),传精灵的个数
        self.__create_plan_sprites(4)
      
    • 3.2、 def __create_plan_sprites(self, enemy_num)方法里面完善, enemy_num精灵的个数

      def __create_plan_sprites(self,enemy_num):
            enemy_list = []
            num = 0
            while num < enemy_num:
                  # 创建敌机的精灵对象
                  enemy = GameSprites("./images/enemy1.png")
                  enemy_list.append(enemy)
                  num += 1
      
            enemy_tuple = tuple(enemy_list)
            # 创建敌机的精灵组
            self.enemy_group = pygame.sprite.Group(*enemy_tuple)
      
            print("enemy_list的数量 %d",len(enemy_list))
      
    • 3.3、 更新/绘制精灵组 self.__update_sprites()

      def __update_sprites(self):
      
          print("更新/绘制精灵组")
          # 让精灵组调用两个方法
          # update - 让组中的所有精灵更新位置
          self.enemy_group.update()
      
          # draw - 在screen上绘制所有的精灵
          self.enemy_group.draw(self.screen)
      

    相关文章

      网友评论

        本文标题:Python:飞机大战游戏3:框架搭建

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