CodeCombat 森林篇

进阶战斗:分支与测距

Else (否则)
if 条件不成立时执行的代码。
"如果有怪就打,否则就休息。"
Cleave (劈斩)
isReady("cleave")
检查大招是否冷却完毕。
Distance (距离)
distanceTo(enemy)
测量距离,只打身边的怪。
No.14-15

背靠背 & 食人魔营地

逻辑分支:Else

生活不总是“如果...就...”,还有“否则...”。
if enemy: 有敌人 -> 攻击。
else: 没敌人 -> 做点别的(比如回家,或者打箱子)。

注意:else 后面不加条件,直接跟冒号 :
solution.py (背靠背)
1
while True:
防守循环。
2
enemy = hero.findNearestEnemy()
侦察。
3
if enemy:
有敌人吗?
4
hero.attack(enemy)
有就打!
5
hero.attack(enemy)
往死里打!
6
else:
否则(没敌人)...
7
hero.moveXY(40, 34)
回防守点。
No.16

概念挑战:林间圣地

巩固练习

这是一个纯逻辑挑战。
保护圣地红叉点 (30, 24)。

  • 看到敌人 -> 攻击
  • 没看到 -> 回到 (30, 24)
solution.py
1
while True:
循环。
2
enemy = hero.findNearestEnemy()
找人。
3
if enemy:
有?
4
hero.attack(enemy)
打。
5
else:
无?
6
hero.moveXY(30, 24)
回撤。
No.17

森林劈斩者

大招:劈斩 (Cleave)

你装备了长剑,获得了技能 cleave
这招可以秒杀周围所有敌人!

冷却时间 (Cooldown)

大招不能一直用,需要时间恢复。
使用 hero.isReady("cleave") 来检查手表,看看技能好了没。

solution.py
1
hero.moveXY(23, 23)
进入战场。
2
while True:
战斗循环。
3
enemy = hero.findNearestEnemy()
找怪。
4
if hero.isReady("cleave"):
大招好了吗?
5
hero.cleave(enemy)
好了就放!
6
else:
没好...
7
hero.attack(enemy)
普攻凑合一下。
No.18-19

Else之战 & 边地僵局

节奏掌控

这几关是 cleave 的强化训练。
面对成群的敌人,如果大招在冷却,千万别发呆!

isReady("cleave") -> True : 放大招清场。
else : 普攻单个敌人,撑过冷却时间。

solution.py (边地僵局)
1
while True:
防守。
2
enemy = hero.findNearestEnemy()
找怪。
3
if hero.isReady("cleave"):
能劈吗?
4
hero.cleave(enemy)
劈!
5
else:
不能...
6
hero.attack(enemy)
普攻。
No.20

测距仪

精准打击

你是炮兵观察员。你需要告诉大炮敌人有多远。

dist = hero.distanceTo(target)

这会算出一个数字(米),然后用 say() 报出来。

solution.py
1
enemy1 = "Gort"
敌人1。
2
dist1 = hero.distanceTo(enemy1)
测量距离。
3
hero.say(dist1)
报数!
4
enemy2 = "Smasher"
敌人2。
5
dist2 = hero.distanceTo(enemy2)
测量距离。
6
hero.say(dist2)
报数!
7
# 不要攻击友方 Charles!
跳过朋友。
8
enemy4 = "Gorgnub"
敌人4。
9
dist4 = hero.distanceTo(enemy4)
测量。
10
hero.say(dist4)
报数!
No.21

贴身护卫

距离判断

我们要保护农夫 Victor。
只有当食人魔靠得很近(小于10米)时才攻击,否则就乖乖呆在农夫身边。

dist < 10
小于号 (Less than)
solution.py
1
while True:
护卫模式。
2
enemy = hero.findNearestEnemy()
监视。
3
dist = hero.distanceTo(enemy)
测距。
4
if dist < 10:
太近了吗?
5
hero.attack(enemy)
太近就打!
6
else:
否则(还远)...
7
hero.moveXY(40, 37)
回到防守位。
No.22

矮人蜂拥而至

综合战术

矮人成群结队地来了!
利用 distanceTocleave 的完美配合:

  • 如果怪很近 (<10m) -> Cleave (群攻)
  • 如果怪还远 -> 打宝箱 (拿钱)
solution.py
1
while True:
循环。
2
enemy = hero.findNearestEnemy()
找怪。
3
dist = hero.distanceTo(enemy)
测距。
4
if dist < 10:
如果贴脸了...
5
hero.cleave(enemy)
劈斩清场!
6
else:
否则...
7
hero.attack("Chest")
开箱子。
No.23-24

勇敢的食人魔 & 发狂的矮人

多重逻辑:Elif

逻辑越来越复杂了!我们需要 elif (else if)。

  1. isReady("cleave")? -> 优先用大招。
  2. elif dist < 5? -> 其次,如果太近就普攻。
  3. else -> 最后,没事就打箱子。
solution.py (发狂的矮人)
1
while True:
决策循环。
2
enemy = hero.findNearestEnemy()
找怪。
3
dist = hero.distanceTo(enemy)
测距。
4
if hero.isReady('cleave'):
大招就绪?
5
hero.cleave()
优先放大招!
6
elif dist < 5:
如果没大招但怪很近...
7
hero.attack(enemy)
那只能普攻自保。
8
else:
如果怪又远又没大招...
9
hero.attack("Chest")
赚钱去!