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;
}
🏹