HOME / 第 7 部分 · 完整游戏项目实战 / 第 85 课
MODULE 7 · 完整游戏项目实战
第 85 课 · 塔防游戏实战(三):经济、升级与完成
🎯 本课学习目标
- 实现金币经济系统
- 炮塔升级与出售
- 整合通关/失败与 UI
塔防收官:经济系统、炮塔升级、完整游戏流程。
📖 详细教学步骤
金币系统代码
金币是塔防的货币:
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 面板实操
- 点击炮塔:给炮塔加 Area2D 点击检测,选中时显示升级按钮
- 升级按钮 → 调 upgrade()
- 金币显示在 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}
]
}
完整整合与打磨收尾
- 主菜单 → 游戏 → 通关/失败 → 结算
- 音效:放置/射击/爆炸/金币
- 特效:炮塔开火闪光、敌人死亡粒子
- 平衡:调整价格/伤害/敌人血量,让游戏「好玩且可通」
- 测试 3 遍完整流程
🎉 完整塔防游戏完成!
⚠️
金币负数?
购买前用 buy_turret 判断,不够就 return false,别直接减。
⚠️
升级没效果?
upgrade 里要真的改 damage/fire_rate,且敌人掉血逻辑读取的是最新值。
🧪 动手试一试
🏋️ 课后练习
做 3 波递增敌人(数量/血量/速度都增加),撑过 3 波算通关,漏 20 只算失败。
wave_data.json 驱动 + lives 计数 + 波次完成判定。
💡
塔防平衡最难,用数据驱动(JSON)方便调参。
💡
给炮塔不同等级换外观,反馈更直观。
🎓 本课小结
塔防完整版:金币经济 + 炮塔升级 + 波次数据驱动 + 生命/通关判定 + UI 音效特效;一个可玩性完整的塔防游戏。