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

自定义游戏目标

Custom Game Goals

✍️ 手动添加
✅ 标记完成

本节课关卡

扣哒世界 · 游戏开发2 · C++ · 第11–12关

C++ · 本节课关卡

11 · 切换目标

先读关卡目标,观察地图,再运用本课知识。

12 · 别碰他们

先读关卡目标,观察地图,再运用本课知识。

学习路线:读目标 → 看图解 → 写代码 → 运行检查

🎯

游戏目标:内置 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 盖章!"
🏅

我的知识宝藏 · 一页复习

扣哒世界 · 游戏开发2 · C++ · 第11–12关

C++ · 知识点图
关键字方法 / 函数字符串数字

游戏目标:内置 vs 自定义

先创建玩家,再指定到达位置、收集数量或击败目标,形成通关规则。

添加任务卡: addManualGoal

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

auto bossGoal = game.addManualGoal("打败大魔王!");

盖章:setGoalState

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

game.setGoalState(bossGoal, true);

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

任务:打败 3 个侦察兵。

count += 1;

实例 II:打败大 Boss

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

game.setGoalState(bossGoal, true);

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

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

game.setGoalState(dontTouchGoal, false);

本节课关卡:11. 切换目标;12. 别碰他们