CodeCombat 森林篇

逻辑判断:如果...就...

IF 语句 (条件判断)
if enemy:
如果敌人存在,就攻击。
如果敌人不存在,就跳过。
安全检查
防止英雄对着空气乱打!
先检查 findNearestEnemy() 是否找到了东西。
No.6-6a

林地小屋 & 边地伏击战

没有敌人别乱打

这些小屋里**可能**藏着敌人,也**可能**是空的。
如果你对着空气挥剑,看起来会很傻。

逻辑流程:
1 走到位置
2 看看有没有敌人 (find)
3 如果(if) 有敌人 -> 攻击
solution.py
1
hero.moveXY(19, 33)
前往第1个点。
2
enemy = hero.findNearestEnemy()
侦察周围。
3
if enemy:
如果有敌人...
4
hero.attack(enemy)
那就攻击它!
5
hero.attack(enemy)
再次攻击。
6
hero.moveXY(49, 51)
前往第2个点。
7
enemy = hero.findNearestEnemy()
侦察。
8
if enemy:
检查。
9
hero.attack(enemy)
攻击(缩进!)。
10
hero.attack(enemy)
攻击(缩进!)。
No.7-9

巡逻兵克星 & 野餐毁灭者 & 鹰眼

循环中的判断

现在我们要把 if 放到 while True 循环里。
这叫嵌套 (Nesting)。

英雄会一直重复做这几件事:
1. 找敌人。
2. 如果有 -> 打。
3. 如果没 -> 没事发生,继续找。

注意缩进:
if 要在 while 里缩进。
attack 要在 if 里**再**缩进一次!
solution.py
1
while True:
无限循环。
2
enemy = hero.findNearestEnemy()
在循环里持续侦察。
3
if enemy:
如果找到了...
4
hero.attack(enemy)
双重缩进:攻击!
如果没敌人,什么都不做,直接下一轮循环。
No.10

村庄守护者

两点巡逻

村子有两个入口(左边和右边)。 你需要来回巡逻。

策略: 1. 走到左边 -> 检查敌人 -> 有就打。 2. 走到右边 -> 检查敌人 -> 有就打。 3. (循环重复)

solution.py
1
while True:
巡逻开始。
2
hero.moveXY(35, 34)
1. 去左边。
3
leftEnemy = hero.findNearestEnemy()
2. 左边有怪吗?
4
if leftEnemy:
3. 如果有...
5
hero.attack(leftEnemy)
4. 打!
6
hero.attack(leftEnemy)
5. 再打!
7
hero.moveXY(60, 31)
6. 去右边。
8
rightEnemy = hero.findNearestEnemy()
7. 右边有怪吗?
9
if rightEnemy:
8. 如果有...
10
hero.attack(rightEnemy)
9. 打!
11
hero.attack(rightEnemy)
10. 再打!
No.11

荆棘农场

按需建造

这次我们不攻击,而是**建造陷阱**。
有三个入口:上 (Top)、左 (Left)、下 (Bottom)。

警告: 不要乱造陷阱!可能会误伤农民。
必须用 if 确认有敌人来了,才能在那个位置造陷阱。

solution.py
1
while True:
三点巡逻。
2
hero.moveXY(43, 50)
去上方。
3
top = hero.findNearestEnemy()
检查上方敌人。
4
if top:
如果有...
5
hero.buildXY("fire-trap", 43, 50)
造陷阱!
6
hero.moveXY(25, 34)
去左方。
7
left = hero.findNearestEnemy()
检查左方敌人。
8
if left:
如果有...
9
hero.buildXY("fire-trap", 25, 34)
造陷阱!
10
hero.moveXY(43, 20)
去下方。
11
bottom = hero.findNearestEnemy()
检查下方敌人。
12
if bottom:
如果有...
13
hero.buildXY("fire-trap", 43, 20)
造陷阱!
No.12-13

概念挑战:清除 & 中点

综合测试

这是对逻辑判断的最终测试。
你需要结合 moveXY, findNearestEnemy, ifattack/buildXY

清除: 走到4个角落,有怪就打,没怪就走。
中点: 上下中三路巡逻,有怪就造陷阱。
solution.py (中点)
1
while True:
循环开始。
2
hero.moveXY(32, 52)
上路。
3
top = hero.findNearestEnemy()
检查。
4
if top:
有怪?
5
hero.buildXY("fire-trap", 35, 52)
造陷阱。
6
hero.moveXY(32, 34)
中路。
7
mid = hero.findNearestEnemy()
检查。
8
if mid:
有怪?
9
hero.buildXY("fire-trap", 35, 34)
造陷阱。
10
hero.moveXY(32, 16)
下路。
11
bot = hero.findNearestEnemy()
检查。
12
if bot:
有怪?
13
hero.buildXY("fire-trap", 35, 16)
造陷阱。