博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
24飞机大战_面向对象设计类
阅读量:5817 次
发布时间:2019-06-18

本文共 2565 字,大约阅读时间需要 8 分钟。

目录

1.  明确主程序职责

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

2.1  明确文件职责

 

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         pass16  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 pygamefrom plane_sprites import *# 定义屏幕大小常量SCREEN_RECT = pygame.Rect(0, 0, 480, 700)# 刷新的帧率FRAME_PER_SEC = 60class 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()

 

转载于:https://www.cnblogs.com/xinmomoyan/p/10353966.html

你可能感兴趣的文章
shell编程前言(一)
查看>>
5、centos7.*配置yum的EPEL源及其它源
查看>>
JSON前后台简单操作
查看>>
shell中一些常见的文件操作符
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
使用第三方类、库需要注意的正则类RegexKitLite的使用
查看>>
iOS \U7ea2 乱码 转换
查看>>
FCN图像分割
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
数据库事务隔离级别
查看>>
os模块大全详情
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
kali linux 更新问题
查看>>
HDU1576 A/B【扩展欧几里得算法】
查看>>
廖雪峰javascript教程学习记录
查看>>
WebApi系列~目录
查看>>
Java访问文件夹中文件的递归遍历代码Demo
查看>>
项目笔记:测试类的编写
查看>>