用Rust语言实现的植物大战僵尸游戏。是为南京大学《Rust语言程序设计》课程的课程项目。项目报告在: 课程报告 中。
English | 简体中文
这是一个使用Rust语言和ggez游戏引擎开发的植物大战僵尸风格游戏。本项目旨在展示如何使用Rust构建具有良好架构和模式的游戏应用,采用了工厂模式等设计模式使代码更易于扩展和维护。
- 植物系统: 包含豌豆射手、向日葵、坚果墙等可种植角色,每种植物具有独特的攻击方式和防御能力
- 僵尸系统: 包括普通僵尸和路障僵尸,未来可轻松添加更多种类
- 资源管理: 阳光收集和使用系统,购买和放置植物
- 关卡系统: 波次进攻,随着时间增加难度
- 用户交互: 植物选择、铲子功能、暂停功能
- 碰撞检测: 完善的实体间交互系统
- 模块化设计: 代码按照功能清晰地组织为核心、实体、机制、植物、UI和僵尸等模块
- 设计模式: 使用工厂模式实现植物和僵尸的创建,便于扩展新类型
- 良好的注释: 详细的文档注释,便于理解代码结构和功能
- 固定帧率: 游戏以固定的帧率运行,确保游戏体验一致性
- 事件处理: 完整的用户输入处理系统
- Rust 2021版本或更高
- 支持图形显示的操作系统(Windows/macOS/Linux)
- 建议分辨率:1400 x 600或更高
- 克隆仓库:
git clone https://github.com/iamwsll/PVZbyRust.git
cd PVZbyRust- 编译和运行游戏:
cargo run --release- 收集阳光: 点击屏幕上落下的阳光以收集资源
- 种植植物:
- 点击商店中的植物卡片
- 点击草坪网格中的位置放置植物
- 铲除植物:
- 点击铲子图标
- 点击要移除的植物
- 暂停游戏: 点击屏幕右上角的暂停按钮
src/
├── core/ # 核心游戏引擎
│ ├── game.rs # 游戏主循环和状态
│ ├── renderer.rs # 渲染系统
│ ├── resources.rs # 资源加载和管理
│ └── states.rs # 游戏状态定义
├── entities/ # 游戏实体
│ ├── pea.rs # 豌豆弹药
│ └── sun.rs # 阳光资源
├── mechanics/ # 游戏机制
│ ├── collision.rs # 碰撞检测
│ ├── entity_manager.rs # 实体管理
│ └── level_controller.rs # 关卡控制
├── plants/ # 植物相关功能
│ ├── peashooter.rs # 豌豆射手
│ ├── plant_factory.rs # 植物工厂
│ ├── plant_trait.rs # 植物特性接口
│ ├── sunflower.rs # 向日葵
│ └── wallnut.rs # 坚果墙
├── ui/ # 用户界面
│ ├── grid.rs # 游戏网格
│ ├── input_handler.rs # 输入处理
│ ├── shop.rs # 植物商店
│ └── shovel.rs # 铲子功能
├── zombies/ # 僵尸相关功能
│ ├── conehead_zombie.rs # 路障僵尸
│ ├── normal_zombie.rs # 普通僵尸
│ ├── zombie_factory.rs # 僵尸工厂
│ └── zombie_trait.rs # 僵尸特性接口
├── lib.rs # 库入口
└── main.rs # 程序入口
- 在
plants/目录中创建新植物的实现文件 - 实现
PlantTrait特性 - 在
plant_factory.rs中的PlantType枚举中添加新植物类型 - 在
PlantType.cost()方法中添加新植物的成本 - 在
PlantFactory.create_plant()中添加新植物的创建逻辑 - 在
shop.rs中添加新植物的商店卡片
- 在
zombies/目录中创建新僵尸的实现文件 - 实现
ZombieTrait特性 - 在
zombie_factory.rs中的ZombieType枚举中添加新僵尸类型 - 在
ZombieFactory.create_zombie()中添加新僵尸的创建逻辑
本项目使用MIT许可证 - 详见 LICENSE 文件。
- ggez游戏引擎
- Rust社区的支持
- 原版植物大战僵尸游戏的灵感
如有任何问题或建议,请发送邮件至 1481121704@qq.com
