zoukankan      html  css  js  c++  java
  • 24飞机大战_面向对象设计类

     

    1.  明确主程序职责


      • 一个游戏主程序的 职责 可以分为两个部分:

        游戏初始化

        游戏循环
      • 根据明确的职责,  设计 PlaneGame 类如下:

     提示 根据 职责 封装私有方法,  可以避免某一个方法的代码写得太过冗长

    如果某一个方法编写的太长,  既不好阅读,  也不好维护!

    • 游戏初始化  ----  __init__() 会调用以下方法:
     

    2.  实现飞机大战主游戏类 


    2.1  明确文件职责

    • plane_main
    1. 封装 主游戏类
    2. 创建 游戏对象
    3. 启动游戏
    • plane_sprites

      封装游戏中 所有 需要使用的 精灵子类

      提供游戏的 相关工具

    代码实现

    • 新建 plane_main.py 文件,  并且设置为可执行
    • 编写 继承代码
     1 class PlaneGame(object):
     2     """飞机大战祝游戏"""
     3  
     4     def __init__(self):
     5         print("游戏初始化")
     6  
     7         # 1. 创建游戏的窗口
     8         self.screen = pygame.display.set_mode((480, 700))
     9         # 2. 创建游戏的失踪
    10         self.clock = pygame.time.Clock()
    11         # 3. 调用私有方法, 精灵和精灵组的创建
    12         self.__create_sprites()
    13  
    14     def __create_sprites(self):
    15         pass
    16  
    17     def start_game(self):
    18         print("游戏开始...")

    使用 常量 代替固定的数值

    • 变量 ---- 不变化的量
    • 变量 ---- 可以变化的量

    应用场景

    • 在开发时,  可能会需要使用 固定的数值,  例如 屏幕的高度 是 700
    • 这个时候,  建议 不要 直接使用固定数值,  而应该使用 常量
    • 在开发时,  为了保证代码的可维护性,  尽量不要使用 魔法数字

    常量的定义

    • 定义 常量 和 定义 变量 的语法完全一样,  都是使用 赋值语句
    • 常量 的 命名 应该 所有字母都使用大写,  单词与单词之间使用下划线连接

    常量的好处

    • 阅读代码时,  通过 常量名 见名知意,  不需要猜测数字的含义
    • 如果需要 调整值,  只需要 修改常量定义 就可以实现 统一修改

    提示:  Python 中并没有真正意义的常量,  只是通过命名的约定 ---- 所有字母都是大写的就是常量,  开发时不要轻易的修改!

    代码调整

    • 在 plane_sprites.py 中增加常量定义
    1 # 定义屏幕大小常量
    2 SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
    3 # 刷新的帧率
    4 FRAME_PER_SEC = 60

    2.2搭建游戏启动结构

    import pygame
    from plane_sprites import *
    
    # 定义屏幕大小常量
    SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
    # 刷新的帧率
    FRAME_PER_SEC = 60
    
    
    class PlaneGame(object):
        """飞机大战祝游戏"""
    
        def __init__(self):
            print("游戏初始化")
    
            # 1. 创建游戏的窗口
            self.screen = pygame.display.set_mode(SCREEN_RECT.size)
            # 2. 创建游戏的失踪
            self.clock = pygame.time.Clock()
            # 3. 调用私有方法, 精灵和精灵组的创建
            self.__create_sprites()
    
        def __create_sprites(self):
            pass
    
        def start_game(self):
            print("游戏开始...")
            while True:
                # 1.设置刷新帧率
                self.clock.tick(FRAME_PER_SEC)
                # 2.事件监听
                self.__event_handler()
                # 3.碰撞检测
                self.__check_collide()
                # 4.更新/绘制精灵组
                self.__create_sprites()
                # 5.更新显示
                pygame.display.update()
                pass
    
        def __event_handler(self):
            for event in pygame.event.get():
                # 判断是否退出游戏
                if event.type is pygame.QUIT:
                    PlaneGame.__game_over()
    
        def __check_collide(self):
            pass
    
        def __update_sprites(self):
            pass
    
        @staticmethod
        def __game_over():
            print("游戏结束")
            pygame.quit()
            exit()
    
    
    if __name__ == '__main__':
        game = PlaneGame()
        game.start_game()
  • 相关阅读:
    在Windows环境下搭建redis
    三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较
    ASP.NET Web API身份验证和授权
    quartz 设置时间格式
    服务端发post请求产生的编码问题
    大型网站的灵魂——性能
    大型网站系统架构的演化
    c# url自动解码解决方案
    C# RSA非对称加密实现
    .net上传图片之使用第三方平台七牛上传图片接口
  • 原文地址:https://www.cnblogs.com/xinmomoyan/p/10353966.html
Copyright © 2011-2022 走看看