本节课关卡

扣哒世界 · 游戏开发1 · C++ · 第7–12关

C++ · 本节课关卡

07 · 斩首鼠标

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

08 · 碾碎它

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

09 · 越狱

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

10 · 取舍

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

11 · 军事训练

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

12 · 漫游者危险

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

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

C++ 战斗基础 ⚔️

Ready for Battle?

👋 欢迎来到 C++ 战场!
在开始战斗前,请检查你的装备(代码格式):

  • ✅ int main() { ... }
    这是你的主基地,所有指令都要写在大括号里。
  • ✅ ; (分号)
    这就像挥剑后的收招动作,每一行结束都不能忘!
int main() {
    // 在这里指挥你的军队!
    
    game.spawnXY("hero", 40, 40);
    
    return 0;
}
💻
💡 知识加油站

神奇的坐标 (X, Y) 🗺️

Where am I?

🤔 电脑怎么知道把英雄放在哪?

这就要用到 spawnXY(生成在XY坐标)。想象地图是一张大方格纸:

  • X (横向): 数字越大,越靠右 👉
  • Y (纵向): 数字越大,越靠上 👆

spawnXY("hero", 40, 50)

0,0
🦸
X = 40
Y = 50

就像告诉出租车司机:“去第40条街,第50号楼!”

📍
🎮 游戏开发1 第 7 关

击败目标 ⚔️

Defeat Goal

👾 任务简报:
勇士,挡路的人太多了!在这一关,你需要告诉游戏系统:“除非打败所有敌人,否则不算赢!”

这就像是给游戏加了一个“通关条件”。只需点击地面移动和攻击即可!

🛡️ 🆚 👹👹👹
int main() {
    game.spawnPlayerXY("guardian", 40, 40);

    // 设置通关条件:击败所有敌人
    game.addDefeatGoal();
    game.addSurviveGoal();

    // 生成几个食人魔来测试
    game.spawnXY("munchkin", 40, 25);
    game.spawnXY("munchkin", 15, 15);

    return 0;
}
⚔️
💡 知识加油站

制定游戏规则 📜

Setting Goals

🤔 怎么才算赢?

做游戏就像当裁判,你需要告诉玩家怎么才能赢。

  • addSurviveGoal()
    意思是:只要活着就算赢!🏃‍♂️
  • addDefeatGoal()
    意思是:必须打败敌人才算赢!🥊
🏆

如果没有这些代码,
玩家就算打败了大魔王,
游戏也不会显示“胜利”哦!

(电脑是很笨的,你不说它就不知道)

🚩
🎮 游戏开发1 第 8 关

碾碎它 🔨

Crush It

🕹️ 战斗练习:
我们要制作一个简单的战斗游戏。这需要三个要素:

  • 1. 英雄 (Player)
  • 2. 目标 (Goal)
  • 3. 敌人 (Enemies)
int main() {
    game.spawnPlayerXY("champion", 20, 20);
    
    // 添加目标
    game.addSurviveGoal();
    game.addDefeatGoal();
    
    // 生成敌人
    game.spawnXY("munchkin", 40, 10);
    // 再生成至少3个食人魔矮人
    game.spawnXY("munchkin", 34, 49);
    game.spawnXY("munchkin", 51, 40);
    
    return 0;
}
🔨
🎮 游戏开发1 第 9 关

击败部分敌人 🎯

Defeat Some Enemies

🚪 越狱计划:
并不是每次都要打败所有人。有时候,你只需要打倒挡路的几个守卫就能逃跑!

重点: 在 addDefeatGoal 的括号里写上数字 4。

🎯 目标:4 个
int main() {
    // 玩家只需要打败部分敌人
    game.spawnPlayerXY("guardian", 62, 25);
    
    // 关键点来了!
    // 括号里的 4 代表:击败 4 个敌人就算赢
    game.addDefeatGoal(4);
    
    return 0;
}
🔓
🎮 游戏开发1 第 10 关

陷阱与药水 🧪

Fire Traps and Potions

⚖️ 风险与机遇:
游戏里不仅有敌人,还有环境元素。

  • 🔥 fire-trap: 踩上去会扣血 (HP -100!)
  • 🧪 potion-small: 喝下去会回血 (HP +50)
危险!
好东西!
int main() {
    game.spawnPlayerXY("samurai", 40, 50);
    
    // 生成一个陷阱
    game.spawnXY("fire-trap", 25, 40);
    
    // 生成一个药水来治疗玩家
    game.spawnXY("potion-small", 30, 39);
    game.spawnXY("potion-small", 40, 25);
    
    return 0;
}
🔥
💡 知识加油站

咒语要念对 🧙‍♂️

Magic Strings

🤔 为什么有些字要加双引号?

比如 "fire-trap" 或 "soldier"。这在编程里叫字符串。

这就像是物品的名牌。你必须把名字写得一字不差,电脑才能变出正确的东西。

正确:"soldier" ✅

错误:soldier ❌

如果没有双引号,
电脑会以为 soldier 是一个还没发明的命令,
然后它就晕了!😵
🔡
🎮 游戏开发1 第 11 关

军事训练 🏰

Military Training

🎪 集结部队:
我们需要更多种类的敌人来让游戏更有趣。不同的字符串 = 不同的兵种。

  • 🤠 thrower: 投矛手
  • 💂 soldier: 士兵
  • 🧝‍♀️ archer: 弓箭手
int main() {
    game.spawnPlayerXY("champion", 40, 15);
    
    // 生成至少2个投矛手
    game.spawnXY("thrower", 21, 34);
    game.spawnXY("thrower", 23, 46);
    
    // 生成至少2个士兵
    game.spawnXY("soldier", 52, 31);
    game.spawnXY("soldier", 51, 41);
    
    return 0;
}
🏰
🎮 游戏开发1 第 12 关

单位属性 📊

Unit Attributes

🧠 漫游者危险:
弓箭手 (archer) 是强力的远程攻击单位!虽然血量比士兵少,但攻击力很高。

策略: 用他们代替士兵,可以给予敌人大量伤害!

💂 士兵: ██████ (生命高)
🧝‍♀️ 弓手: ██ (生命低,攻击高)
int main() {
    // 士兵太多,弓箭手不够!
    game.spawnXY("soldier", 20, 40);
    
    game.spawnXY("archer", 10, 30);
    // 再添加2个弓箭手
    game.spawnXY("archer", 20, 30);
    game.spawnXY("archer", 20, 20);
    
    return 0;
}
🏹

我的知识宝藏 · 一页复习

扣哒世界 · 游戏开发1 · C++ · 第7–12关

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

C++ 战斗基础 ⚔️

👋 欢迎来到 C++ 战场! 在开始战斗前,请检查你的装备(代码格式):

神奇的坐标 (X, Y) 🗺️

🤔 电脑怎么知道把英雄放在哪?

击败目标 ⚔️

👾 任务简报: 勇士,挡路的人太多了!在这一关,你需要告诉游戏系统:“除非打败所有敌人,否则不算赢!”

制定游戏规则 📜

做游戏就像当裁判,你需要告诉玩家怎么才能赢。

碾碎它 🔨 / 击败部分敌人 🎯

🕹️ 战斗练习: 我们要制作一个简单的战斗游戏。这需要三个要素:;🚪 越狱计划: 并不是每次都要打败所有人。有时候,你只需要打倒挡路的几个守卫就能逃跑!

陷阱与药水 🧪

⚖️ 风险与机遇: 游戏里不仅有敌人,还有环境元素。

咒语要念对 🧙‍♂️

🤔 为什么有些字要加双引号?

军事训练 🏰

🎪 集结部队: 我们需要更多种类的敌人来让游戏更有趣。不同的字符串 = 不同的兵种。

单位属性 📊

🧠 漫游者危险: 弓箭手 (archer) 是强力的远程攻击单位!虽然血量比士兵少,但攻击力很高。

本节课关卡:7. 斩首鼠标;8. 碾碎它;9. 越狱;10. 取舍;11. 军事训练;12. 漫游者危险