游戏开发 2 | 第 11-12 关
📜

自定义游戏目标

Custom Game Goals

✍️ 手动添加
✅ 标记完成
🎯

游戏目标:内置 vs 自定义

以前我们用内置目标(系统帮我们改作业):

  • 🛡️ survive (活下来)
  • ⚔️ defeat (打倒几个)
  • 💎 collect (收集几个)
自定义目标 (Manual Goal):
你自己写“任务说明”,自己写代码判断“完成没”。
就像你自己给自己列的任务清单!
系统自动批改
🆚
我的任务单
打败那个大魔王!
✍️
📌

添加任务卡: addManualGoal

我们要先在屏幕上贴一张“任务卡”。

// 返回一个目标对象(Goal Object) auto bossGoal = game.addManualGoal("打败大魔王!");

1. 显示文字给玩家看。
2. 把这张“卡”存到变量 bossGoal 里,以后要用它来盖章。

任务目标
打败大魔王!
变量 bossGoal 拿着这张卡
💮

盖章:setGoalState

当任务达成时,我们要告诉游戏:这张卡完成了!

// 目标, 状态(true=完成) game.setGoalState(bossGoal, true);
true = ✅ 完成
false = ⬜ 未完成
任务目标
打败大魔王!
SUCCESS
点击卡片模拟代码执行
🏹

实例 I:打光侦察兵 (计数器)

任务:打败 3 个侦察兵。

auto count = 0; auto onDefeat(auto event) { if(event.target.type == "scout") { count += 1; } if(count >= 3) { game.setGoalState(scoutGoal, true); } }

每次打倒一个,计数器 +1,够了就盖章!

💂‍♂️ 💂‍♂️ 💂‍♂️ ➡️ ✅
👹

实例 II:打败大 Boss

任务:只要打倒那个大家伙!

auto onDefeat(auto event) { auto unit = event.target; // 检查类型是不是 Boss if(unit.type == "ogre") { game.setGoalState(bossGoal, true); hero.say("Boss已死!"); } }
👹 💀
🛑

实例 III:目标依赖 (别碰他们)

有些目标需要等到最后才算赢。

任务:不要打矮人 (munchkin)。

auto checkGoals() { // 1. 如果如果不小心打了矮人 -> 失败 if (game.killedMunchkins > 0) { game.setGoalState(dontTouchGoal, false); } // 2. 只有当其他目标都完成了,这个才算赢 if (otherGoal.success) { game.setGoalState(dontTouchGoal, true); } }
🔗 ✅ -> ✅ -> 🏆
📜

任务大师口诀

"先写 ManualGoal 任务卡,
写上说明挂墙上。"
"写好判断 if 条件,
达成条件 true 盖章!"
🏅