HOME / 第 7 部分 · 完整游戏项目实战 / 第 85 课
MODULE 7 · 完整游戏项目实战

第 85 课 · 塔防游戏实战(三):经济、升级与完成

⏱ 预计时长 50 分钟📊 难度 进阶📚 模块 第 7 部分 · 完整游戏项目实战

🎯 本课学习目标

塔防收官:经济系统、炮塔升级、完整游戏流程。

📖 详细教学步骤

金币系统代码

金币是塔防的货币:

GDSCRIPT# Globals.gd
var gold: int = 100

# 放塔
func buy_turret(cost: int) -> bool:
    if gold >= cost:
        gold -= cost
        return true
    return false

# 击杀得金币
func add_gold(amount: int):
    gold += amount

炮塔升级代码

点击炮塔 → 升级面板 → 花费金币提升属性:

GDSCRIPTextends Node2D

var level: int = 1
const UPGRADE_COST = 50

func upgrade():
    if Globals.gold >= UPGRADE_COST * level:
        Globals.gold -= UPGRADE_COST * level
        level += 1
        damage += 5
        fire_rate += 0.2
        update_visual()   # 换更高等级炮塔外观

export var damage: int = 10
var fire_rate: float = 1.0

选中与 UI 面板实操

  1. 点击炮塔:给炮塔加 Area2D 点击检测,选中时显示升级按钮
  2. 升级按钮 → 调 upgrade()
  3. 金币显示在 HUD(GoldLabel)

失败与通关代码

游戏流程:

GDSCRIPTvar lives: int = 20

# 敌人到达基地
func _on_enemy_reached():
    lives -= 1
    hud.update_lives(lives)
    if lives <= 0:
        game_over()

# 通关:撑过所有波次
func _on_all_waves_done():
    show_win()

多波次关卡设计进阶

用数据驱动波次:

GDSCRIPT# wave_data.json
{
  "waves": [
    {"enemies": 5, "hp": 100, "speed": 100, "interval": 1.0},
    {"enemies": 8, "hp": 150, "speed": 110, "interval": 0.8},
    {"enemies": 12, "hp": 200, "speed": 130, "interval": 0.6}
  ]
}

完整整合与打磨收尾

  1. 主菜单 → 游戏 → 通关/失败 → 结算
  2. 音效:放置/射击/爆炸/金币
  3. 特效:炮塔开火闪光、敌人死亡粒子
  4. 平衡:调整价格/伤害/敌人血量,让游戏「好玩且可通」
  5. 测试 3 遍完整流程

🎉 完整塔防游戏完成!

⚠️
金币负数?

购买前用 buy_turret 判断,不够就 return false,别直接减。

⚠️
升级没效果?

upgrade 里要真的改 damage/fire_rate,且敌人掉血逻辑读取的是最新值。

🧪 动手试一试

🏋️ 课后练习

做 3 波递增敌人(数量/血量/速度都增加),撑过 3 波算通关,漏 20 只算失败。

wave_data.json 驱动 + lives 计数 + 波次完成判定。

💡

塔防平衡最难,用数据驱动(JSON)方便调参。

💡

给炮塔不同等级换外观,反馈更直观。

🎓 本课小结

塔防完整版:金币经济 + 炮塔升级 + 波次数据驱动 + 生命/通关判定 + UI 音效特效;一个可玩性完整的塔防游戏。