CodeCombat C++

第9关 - 第16关:循环与魔法语法

while(true) 循环
C++ 使用 while(true) { ... } 来实现无限循环。
别忘了花括号 {}!
注释与提示
使用 // 来写注释。
在关卡中寻找隐藏的密码和提示。
No.9

第9关 组合挑战:睡眠时刻

关卡思路

这是一个大综合关卡!不要惊动沉睡的食人魔(不要走碎石堆)。

你需要按顺序打败三个敌人:Ursa, Rexxar, Brack,最后到达红色 X 处。

关键技能复习

  • 移动参数:moveRight(2);
  • 字符串攻击:attack("Ursa");
  • 基础移动:moveDown();
solution.cpp
1
int main() {
2
hero.moveRight(2);
快速接近 Ursa。
3
hero.attack("Ursa");
攻击 x1。
4
hero.attack("Ursa");
攻击 x2。
5
hero.moveDown();
调整位置。
6
hero.moveLeft(2);
左移2格找 Rexxar。
7
hero.moveUp(2);
上移2格。
8
hero.attack("Rexxar");
攻击 Rexxar。
9
hero.attack("Rexxar");
再次攻击。
10
hero.moveRight();
接近 Brack。
11
hero.attack("Brack");
攻击 Brack。
12
hero.attack("Brack");
再次攻击。
13
hero.moveRight(2);
大跨步逃生!
14
return 0;
15
}
No.10

第10关 注释中的密语

关卡思路

你被关在监牢里。你需要**说出密码**让巫师放你出去。

注释 (Comment):
在 C++ 中,// 后面的文字是注释。电脑看不见,但你可以看见!

密码就藏在注释里:"Achoo"。

solution.cpp
1
int main() {
2
hero.say("密码是什么?");
询问巫师。
3
// 密码是: "Achoo"
找到了!
4
hero.say("Achoo");
大声说出密码!
5
hero.moveUp();
门开了。
6
hero.moveUp();
逃离。
7
return 0;
8
}
No.11

第11关 Kithgard 图书管理员

关卡思路

你需要密码才能通过图书馆大门。
但是密码不在代码注释里了,在哪里呢?

技巧:提示按钮 点击代码窗口右上角的蓝色 提示 按钮。
你会发现密码是:"Hush" (嘘!)
solution.cpp
1
int main() {
2
hero.moveRight();
走向大门。
3
hero.say("Hush");
说出提示里的密码。
4
hero.moveRight();
通过大门。
5
return 0;
6
}
No.12

第12关 囚犯

关卡思路

你需要解救盟友 Patrick,他被关在 "Weak Door" (弱门) 后面。

  1. 打破门: 攻击 "Weak Door"。
  2. 释放盟友: Patrick 会出来帮你打怪。
  3. 击败守卫: 守卫的名字叫 "Two"。
  4. 拿宝石: 战斗胜利后去拿宝石。
solution.cpp
1
int main() {
2
hero.moveRight();
接近牢门。
3
hero.attack("Weak Door");
攻击弱门。
4
hero.moveRight(2);
接近守卫 Two。
5
hero.moveDown(2);
向下走位。
6
hero.attack("Two");
攻击 Two x1。
7
hero.attack("Two");
攻击 Two x2。
8
// ... 继续攻击直到击败 ...
9
hero.attack("Two");
攻击 Two x6。
10
hero.moveRight();
去拿宝石。
11
hero.moveDown();
到达终点。
12
return 0;
13
}
No.13

第13关 焰中舞动

关卡思路:无限循环

你需要永远在火焰中跳舞:左、右、左、右……
手动写代码太累了,我们需要循环!

While(true) 循环

while(true) { ... } 就像一个“永动机”。
放在花括号 {} 里面的代码,会一遍又一遍地执行,永远不会停止。

solution.cpp
1
int main() {
2
while(true) {
循环开始。
3
hero.moveRight();
花括号内:向右移动。
4
// 在这里给循环里加 moveLeft 命令。
提示:不要忘了反向。
5
hero.moveLeft();
花括号内:向左移动。
6
}
循环结束,回到第2行。
7
return 0;
8
}
No.14

第14关 闹鬼的迷宫

关卡思路

这个迷宫的路径是重复的:
右 -> 右 -> 上 -> 上 -> (重复)

我们只需要写一次这个组合,然后把它放进 while(true) 循环里。
英雄就会自动重复这个路径,直到走出迷宫!

solution.cpp
1
int main() {
2
while(true) {
开启无限循环。
3
hero.moveRight();
第1步:向右。
4
hero.moveRight();
第2步:向右。
5
hero.moveUp();
第3步:向上。
6
hero.moveUp();
第4步:向上。
7
}
循环结束,重复。
8
return 0;
9
}
No.15

第15关 再下一步

关卡思路

限制: 只能使用 4 条语句!

迷宫的规律是:向右走 2 格,然后向下走 1 格。
为了节省代码行数,我们必须使用参数 moveRight(2)。

solution.cpp
1
int main() {
2
while(true) {
3
hero.moveRight(2);
参数优化:一步走2格。
4
hero.moveDown();
向下走。
5
}
6
return 0;
7
}
No.15a

第15a关 迷一般的 Kithmaze

关卡思路

观察这个迷宫的**重复模式**。

1. 向右
2. 向下
3. 向右(长: 2格)
4. 向上

把这一套动作放进循环,英雄就能不断重复这套动作穿过迷宫。

solution.cpp
1
int main() {
2
while(true) {
3
hero.moveRight();
R
4
hero.moveDown();
D
5
hero.moveRight(2);
R(2)
6
hero.moveUp();
U
7
}
8
return 0;
9
}
No.15b

第15b关 辐射光环

关卡思路

骷髅怪太强了,不能打!
但是你捡起了发光石,骷髅会害怕光。

策略: 1. 向上走吓跑上面的骷髅。 2. 向下走吓跑下面的骷髅。 3. 趁机向右冲刺。 4. 重复这个过程。

solution.cpp
1
int main() {
2
while(true) {
保持光环移动。
3
hero.moveUp();
向上驱散。
4
hero.moveDown();
向下驱散。
5
hero.moveRight(2);
趁机推进2格。
6
}
7
return 0;
8
}
No.16

第16关 概念挑战:循环仓库

关卡思路

这是一个概念挑战关卡。
找到能穿过仓库并收集所有宝石的**单一循环模式**。

限制: 不超过 5 条语句。
路径:上(2) -> 右(2) -> 下 -> 左。
这个形状就像是一个个倒着的 "U" 字形连接起来。

solution.cpp
1
int main() {
2
while(true) {
循环开始。
3
hero.moveUp(2);
上2格。
4
hero.moveRight(2);
右2格。
5
hero.moveDown();
下1格。
6
hero.moveLeft();
左1格。
7
}
8
return 0;
9
}