本项目是一个基于 Pygame 开发的植物大战僵尸游戏,包含完整的游戏循环、植物系统、僵尸系统、战斗系统和关卡系统。
文件结构
PlainText
zdj/├── 主程序.py # 核心游戏逻辑与主循环├── 物品.py # 动画加载与素材管理├── 菜单与界面.py # UI界面组件与背景管理├── music.py # 音效与背景音乐管理├── 关卡.txt # 关卡进度存储└── simhei.ttf # 字体文件
模块详细介绍
1. 主程序.py - 核心游戏逻辑
功能定位:游戏主循环、状态管理、战斗系统、交互逻辑
核心模块:
子系统 功能说明 关键变量/函数
游戏状态管理 控制菜单/游戏切换、胜利/失败判定 game, game_over, victory_time
关卡系统 最多50关,难度递进,动态网格 i(关卡数),rend_and_remove_file()
植物系统 8种植物的种植、攻击、生命周期 plant_list, plant_type, zwzl
僵尸系统 3种僵尸的生成、移动、攻击、死亡 js_list, js_move_state, jssw()
战斗系统 子弹发射、碰撞检测、伤害计算 wdzd_list, bz_list, wdfs(), bzfs()
资源系统 阳光收集与消耗,经济平衡 ygs, yg_list, djyg()
事件处理 鼠标点击、键盘输入、游戏退出 事件循环,键盘ESC返回菜单
植物类型对照表:
ID 植物名称 阳光消耗 解锁关卡 功能
1 向日葵 50 ≥2 生产阳光(每10-20秒)
2 豌豆射手 100 基础 单发子弹攻击
3 双发射手 200 ≥5 双发子弹攻击
5 四发射手 425 ≥7 四发子弹攻击
6 坚果 50 ≥6 高血量防御(300HP)
7 小蘑菇 0 ≥11(夜间) 发射爆炸攻击
8 阳光菇 25 ≥12(夜间) 生产少量阳光,60秒后成长为大阳光菇
9 大阳光菇 - 成长后 生产更多阳光(25→15)
僵尸类型对照表:
类型 生命值 说明
js1 10 普通僵尸
lzjs 30 路障僵尸,被打掉路障后变为普通僵尸
ttjs 40 铁桶僵尸,被打掉铁桶后变为普通僵尸
2. 物品.py - 动画与素材管理
功能定位:GIF动画加载、精灵素材管理、透明背景处理
核心类:
PlantAnimation(第6行):通用动画类
加载GIF文件并解析为逐帧图像
支持白色背景抠像(阈值>240)
自动帧切换(默认10FPS)
提供update()和get_surface()接口
素材分类:
类别 函数名 说明
植物动画 zw_wdss(), zw_xrk(), zw_
## 一、架构总览
本项目采用 分层式模块化架构 ,基于 Pygame 框架构建,分为四个核心模块,职责清晰但耦合度较高。
## 二、模块职责与调用关系
### 模块依赖图
### 各模块职责
模块 职责 输入 输出 主程序.py 游戏核心逻辑、状态管理、战斗系统 用户输入、时间 游戏状态更新 物品.py GIF动画加载、素材管理、透明处理 文件路径 动画对象/图像 菜单与界面.py UI组件渲染、背景管理、卡片展示 关卡数 界面图像 music.py 背景音乐、音效播放 无 音频输出
## 三、核心设计模式
### 1. 状态机模式(State Pattern)
应用场景 :游戏状态切换
状态转换 :
### 2. 工厂模式(Factory Pattern)
应用场景 :植物/僵尸创建
### 3. 观察者模式的简化实现
应用场景 :碰撞检测与伤害传递
### 4. 冷却机制(Cooldown Pattern)
应用场景 :攻击/资源生成频率控制
## 四、数据流分析
### 游戏循环数据流
### 关键数据结构
数据结构 类型 用途 plant_list dict 存储已种植植物(ID → 位置/血量/类型/动画) js_list list 存储活跃僵尸(位置/血量/类型/动画) wdzd_list list 存储飞行中的豌豆子弹 yg_list list 存储掉落的阳光 js_move_state dict 僵尸移动状态(对象ID → 时间/是否移动) wdss_last_hit_dict dict 植物攻击冷却记录
## 五、架构优缺点
### 优点
方面 优点说明 模块化划分 按功能划分为4个模块,职责明确 动画系统 PlantAnimation 类封装了GIF加载和帧切换逻辑 关卡系统 动态网格大小和场景切换,支持50关递进难度 音效管理 独立音效模块,便于扩展和维护