Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简化版植物大战僵尸

一个使用 Python + Pygame 编写的 2D 塔防 Demo。项目以单文件 pvz.py 为核心,完成了从菜单、难度选择、种植防守到五波结算的完整可玩流程,适合学习 Pygame 游戏循环、状态管理与基础塔防逻辑。

本项目是学习与作品集用途的非官方 Demo,不包含原版游戏资源,也不具备商业用途授权。

当前玩法

  • 5 行草坪、阳光经济、植物卡片与卡片冷却。
  • 三档难度:Easy、Normal、Hard;难度会调整僵尸数量、血量与波次间隔。
  • 五波僵尸进攻:开局倒计时、波次预警、进度条,以及普通/路障/铁桶僵尸。
  • 四张植物卡:
    • Sunflower:定期生产阳光。
    • Peashooter:发现同路前方僵尸后发射豌豆。
    • Wallnut:高生命值的阻挡植物。
    • Cherry Bomb:短暂预警后清除 3×3 区域内的僵尸。
  • 双发射手合成:选中豌豆射手卡后点击场上的普通豌豆射手,会消耗 100 阳光并将其原地合成为双发射手。它保留已有护具,生命值在原值基础上增加 100、最高为 200,并以 0.15 秒间隔连发两颗豌豆。
  • 护具掉落与装备:击败带路障或铁桶的僵尸时有概率掉落对应护具;拾取后可从顶部库存栏选中,为向日葵、豌豆射手、双发射手或坚果墙装备。护具会先吸收伤害,伤害不会溢出到植物本体。
  • 每行一辆一次性小推车:僵尸进入房屋列时自动启动并清理该行僵尸。
  • 铲子、右键取消选择、暂停、胜利/失败与重开流程。
  • 顶部倍速按钮:可循环切换 x1.0x1.25x1.5x2.0;仅游戏模拟加速,菜单与暂停保持正常速度。
  • 植物、僵尸与樱桃炸弹拥有状态动画;窗口可自由缩放,画面会保持原始宽高比。

环境要求

  • Python 3
  • Pygame 2

启动游戏

首次运行时,在项目根目录执行:

python -m pip install pygame
python pvz.py

Windows 用户也可以直接双击项目根目录的 启动游戏.bat。它会自动切换到脚本所在目录再启动游戏;若 Python 或 Pygame 缺失,窗口会保留错误信息,按上方命令安装后重试即可。

操作说明

操作 说明
左键植物卡 选择/取消选择植物。
左键草坪空格 种下已选植物。
左键场上普通豌豆射手(已选豌豆卡) 合成为双发射手。
左键阳光或掉落护具 收集资源或护具。
左键顶部护具库存 选择/取消选择护具;再点击可装备的植物即可使用。
左键铲子 进入/退出铲除模式;铲除模式下点击植物可移除它。
左键顶部 xN.N 面板 循环切换游戏倍速。
右键 取消当前植物、铲子或护具选择。
Esc 暂停/继续;在难度选择界面返回菜单。
R 在胜利或失败界面重新开始。

运行回归测试

测试会自动使用 Pygame 的 dummy SDL 驱动,不会打开游戏窗口:

python -m unittest discover -s tests -v

当前测试覆盖开局与波次计时、各难度波次数量、僵尸阻挡与豌豆目标、小推车、阳光、护具掉落与装备、双发射手合成与连发、倍速、窗口映射,以及动画资源等核心逻辑。

项目结构

.
├── pvz.py                 # 主程序:玩法、状态、资源加载与渲染
├── 启动游戏.bat           # Windows 双击启动入口
├── tests/
│   └── test_game_logic.py # 无窗口回归测试
├── assets/
│   ├── animations/        # 植物、僵尸的动画帧与 manifest
│   └── static/            # 棋盘、植物、僵尸、道具与特效贴图
├── artifacts/             # 已生成的双发射手预览图
├── DEVLOG.md              # 项目开发记录与待办
└── AGENTS.md              # 协作约定

实现要点

  • 保持单文件结构,便于阅读、演示和快速迭代。
  • dt 驱动移动、攻击、冷却、阳光、波次与动画;倍速通过统一缩放游戏模拟时间实现。
  • WaveManager 管理五波敌人的倒计时、保底护具和难度缩放。
  • 路障/铁桶采用“普通僵尸或植物本体 + 独立护具”的组合模型;护具可掉落并重新装备给植物。
  • 游戏以固定逻辑尺寸绘制,再按窗口大小等比映射;较大窗口会使用高分辨率渲染路径,减少放大时的锯齿。

当前范围

核心玩法链路已经完整可玩,但它仍是训练 Demo,并非原版《植物大战僵尸》的完整复刻。后续可继续根据实机体验调整数值与护具落点,并扩展更多植物、僵尸和关卡内容。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages