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

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

一、总体目录



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


二、明确主程序的指责



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


image.png

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

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


方法 职责
__event_handler(self) 事件监听
__check_collide(self) 碰撞检测---子弹销毁敌机、敌机撞毁英雄
__update_sprites(self) 精灵组更新和绘制
__game_over(self) 游戏结束


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



  • 3.1、明确文件职责


image.png


  • 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)


目录
相关文章
|
2月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
121 6
|
4天前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
49 33
|
1天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
19天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
51 7
|
16天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
53 2
|
2月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
203 45
|
2月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
123 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
2月前
|
缓存 API 数据库
Python哪个框架合适开发速卖通商品详情api?
在跨境电商平台速卖通的商品详情数据获取与整合中,Python 语言及其多种框架(如 Flask、Django、Tornado 和 FastAPI)提供了高效解决方案。Flask 简洁灵活,适合快速开发;Django 功能全面,适用于大型项目;Tornado 性能卓越,擅长处理高并发;FastAPI 结合类型提示和异步编程,开发体验优秀。选择合适的框架需综合考虑项目规模、性能要求和团队技术栈。
30 2
|
2月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
100 4