Python飞机大战pygame游戏框架搭建详解

追风的人
追风的人
发布时间:2026-10-14| 6人浏览过
原创

本文详细解析Python pygame飞机大战游戏的主程序搭建流程。内容涵盖PlaneGame类的职责划分、私有方法封装、常量定义规范以及游戏初始化与循环逻辑。通过代码示例展示如何创建窗口、管理精灵组及处理事件监听,帮助开发者构建清晰的游戏架构。

本文详细介绍Python中使用pygame库开发飞机大战游戏的框架搭建过程,旨在为读者提供清晰的开发思路与代码实现参考。

  • 明确主程序职责
  • 实现主程序类
  • 准备游戏精灵组
  • 回顾快速入门案例,一个游戏主程序的职责可分为两个部分:
    • 游戏初始化
    • 游戏循环
  • 基于上述职责划分,设计PlaneGame类结构如下: 提示:通过封装私有方法明确职责,可以有效避免单个方法代码过长的问题。

若某个方法代码过于冗长,将导致代码可读性差且难以维护。

  • 游戏初始化方法init()负责调用以下内部方法: 游戏启动方法start_game()则负责调用以下逻辑:

2.1 明确文件职责

  • plane_main
    1. 封装主游戏类
    2. 创建游戏对象
    3. 启动游戏
  • plane_sprites
    • 封装游戏中所有使用的精灵子类
    • 提供游戏相关工具

代码实现

  • 新建plane_main.py文件,并将其设置为可执行模块。
  • 编写基础代码框架。

import pygame
from plane_sprites import *


class PlaneGame(object):
  """飞机大战主游戏"""

  def __init__(self):
    print("游戏初始化")

  def start_game(self):
    print("开始游戏...")


if __name__ == '__main__':
  # 创建游戏对象
  game = PlaneGame()

  # 开始游戏
  game.start_game()

完成init()方法的代码如下:


def __init__(self):
  print("游戏初始化")
  
  # 1. 创建游戏的窗口
  self.screen = pygame.display.set_mode((480, 700))
  # 2. 创建游戏的时钟
  self.clock = pygame.time.Clock()
  # 3. 调用私有方法,精灵和精灵组的创建
  self.__create_sprites()

def __create_sprites(self):
  pass

使用常量替代代码中的固定数值。

  • 常量是指程序中保持不变的数据量。
  • 变量是指程序运行过程中可以变化的数据量。

应用场景

  • 在开发过程中,常需使用固定数值,例如屏幕高度设定为700。
  • 此时建议不要直接硬编码固定数值,而应使用常量定义。
  • 为提升代码可维护性,开发时应尽量避免使用“魔法数字”。

常量的定义

  • 定义常量与定义变量的语法相同,均使用赋值语句。
  • 常量命名建议全部使用大写字母,单词间以下划线连接。

常量的好处

  • 阅读代码时,通过常量名即可直观理解其含义,无需猜测数字代表的具体意义。
  • 若需调整数值,仅需修改常量定义一处,即可实现全局统一修改。

注意:Python中并无严格意义上的常量,这仅是通过命名约定(全大写)来标识常量,开发时不应随意修改其值。

代码调整

  • 在plane_sprites.py文件中增加常量定义。

import pygame

# 游戏屏幕大小
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)

修改plane_main.py中的窗口大小设置以引用常量。


self.screen = pygame.display.set_mode(SCREEN_RECT.size)

完成start_game()的基础代码如下:


def start_game(self):
  """开始游戏"""
  
  print("开始游戏...")
    
  while True:
  
    # 1. 设置刷新帧率
    self.clock.tick(60)
    
    # 2. 事件监听
    self.__event_handler()
    
    # 3. 碰撞检测
    self.__check_collide()
    
    # 4. 更新精灵组
    self.__update_sprites()
    
    # 5. 更新屏幕显示
    pygame.display.update()

def __event_handler(self):
  """事件监听"""
  
  for event in pygame.event.get():
  
    if event.type == pygame.QUIT:
      PlaneGame.__game_over()

def __check_collide(self):
  """碰撞检测"""
  pass

def __update_sprites(self):
  """更新精灵组"""
  pass
  
@staticmethod
def __game_over():
  """游戏结束"""

  print("游戏结束")
  pygame.quit()
  exit()

3.1 确定精灵组

创建精灵组方法


def __create_sprites(self):
  """创建精灵组"""
  
  # 背景组
  self.back_group = pygame.sprite.Group()
  # 敌机组
  self.enemy_group = pygame.sprite.Group()
  # 英雄组
  self.hero_group = pygame.sprite.Group()

更新精灵组方法


def __update_sprites(self):
  """更新精灵组"""
  
  for group in [self.back_group, self.enemy_group, self.hero_group]:
  
    group.update()
    group.draw(self.screen)

更多关于Python相关内容可查看本站专题:《Python游戏开发技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。