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)


目录
打赏
0
0
0
0
18
分享
相关文章
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
278 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
90 7
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
240 6
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
185 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
296 9
|
3月前
|
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
93 33
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
159 15
Python流行orm框架对比
Python中有多个流行的ORM框架,如SQLAlchemy、Django ORM、Peewee、Tortoise ORM、Pony ORM、SQLModel和GINO。每个框架各有特点,适用于不同的项目需求。SQLAlchemy功能强大且灵活,适合复杂项目;Django ORM与Django框架无缝集成,易用性强;Peewee轻量级且简单,适合小型项目;Tortoise ORM专为异步框架设计;Pony ORM查询语法直观;SQLModel结合Pydantic,适合FastAPI;GINO则适合异步环境开发。初学者推荐使用Django ORM或Peewee,因其易学易用。
182 4
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等