CodeCombat 变量与建造篇

第17关 - 第25关:更聪明的英雄

变量 (Variables)
enemy = hero.findNearestEnemy()
用眼镜寻找敌人,并给它贴上标签。
建造 (Build)
hero.buildXY("fence", x, y)
改变地形,阻挡敌人。
No.17

第17关 恐惧之门

关卡思路

这扇门 ("Door") 很坚固,需要打很多很多下才能打破。
如果我们写 100 行 attack("Door"),那太蠢了。

循环的力量 使用 while True,你只需要写一行攻击代码,英雄就会不知疲倦地一直打下去,直到门破为止。
solution.py
1
while True:
开启无限循环模式。
2
hero.attack("Door")
一直攻击大门!
No.18

第18关 攻破突袭

关卡思路

小精灵跑得很快!你需要速度药水。 药水藏在箱子 ("Chest") 里。

策略顺序:
1. 走到箱子前。
2. 打破箱子拿到药水。
3. 回到主路。
4. 开启循环,大跨步逃跑!

solution.py
1
hero.moveRight()
起步。
2
hero.moveUp()
走向箱子。
3
hero.attack("Chest")
打破箱子拿药水。
4
hero.moveDown()
回到主路。
5
while True:
药效发作,开始冲刺!
6
hero.moveRight(3)
大步右移。
7
hero.moveDown(3)
大步下移。
No.19

第19关 橱柜里的骷髅

关卡思路

你需要打开橱柜 ("Cupboard") 寻找盟友。

注意: 橱柜在远处,你需要先走过去(不在循环里),然后站在旁边不停地攻击(在循环里)。

solution.py
1
hero.moveUp()
移动。
2
hero.moveRight(2)
参数:移动2步。
3
hero.moveDown(2)
到达橱柜旁。
4
while True:
开始砸柜子。
5
hero.attack("Cupboard")
攻击!
No.20

第20关 老对手

新概念:变量 (Variable)

每次都输入敌人的名字 "Kratt" 很麻烦,而且容易写错。
我们可以把名字存到一个**变量**里,就像给它贴个标签。

enemy1 = "Kratt"

以后只要说 enemy1,英雄就知道是指 "Kratt"。

solution.py
1
enemy1 = "Kratt"
定义变量1。
2
enemy2 = "Gert"
定义变量2。
3
enemy3 = "Ursa"
定义变量3。
4
hero.attack(enemy1)
攻击变量 enemy1 (Kratt)。
5
hero.attack(enemy1)
注意:变量不用引号!
6
hero.attack(enemy2)
攻击变量 enemy2 (Gert)。
7
hero.attack(enemy2)
再次攻击。
8
hero.attack(enemy3)
攻击变量 enemy3 (Ursa)。
9
hero.attack(enemy3)
再次攻击。
No.21

第21关 名称大师

新装备:眼镜

你不知道敌人的名字了怎么办?
这副眼镜赋予了你 findNearestEnemy() 的能力。

enemy1 = hero.findNearestEnemy()

这句话的意思是:英雄,去看看谁最近,然后把他的名字存在 enemy1 这个变量里。

solution.py
1
enemy1 = hero.findNearestEnemy()
扫描并锁定敌人1。
2
hero.attack(enemy1)
攻击刚才锁定的目标。
3
hero.attack(enemy1)
再次攻击。
4
enemy2 = hero.findNearestEnemy()
扫描并锁定新敌人。
5
hero.attack(enemy2)
攻击敌人2。
6
hero.attack(enemy2)
再次攻击。
7
enemy3 = hero.findNearestEnemy()
扫描并锁定敌人3。
8
hero.attack(enemy3)
攻击。
9
hero.attack(enemy3)
攻击。
No.22

第22关 名称大师调试

找茬时间 (Debug)

这段代码里有错误!
记住,如果你把敌人存在 enemy1 里,你就不能去打 enemy2,因为 enemy2 是空的!

错误示范:
var = findEnemy()
attack(var2) // 错误!var2 是谁?
solution.py
1
enemy1 = hero.findNearestEnemy()
找到敌人1。
2
hero.attack(enemy1)
修复:攻击 enemy1。
3
hero.attack(enemy1)
修复:攻击 enemy1。
4
enemy2 = hero.findNearestEnemy()
找到敌人2。
5
hero.attack(enemy2)
修复:攻击 enemy2。
6
hero.attack(enemy2)
修复:攻击 enemy2。
7
enemy3 = hero.findNearestEnemy()
找到敌人3。
8
hero.attack(enemy3)
修复:攻击 enemy3。
9
hero.attack(enemy3)
修复:攻击 enemy3。
No.23

第23关 Kithmaze最终历险

关卡思路:循环+变量

这是大招!我们在 while True 循环里使用 findNearestEnemy

这样英雄每走一圈,都会自动重新扫描最近的敌人并攻击,实现了自动化战斗

solution.py
1
while True:
自动化循环。
2
hero.moveRight()
移动。
3
hero.moveUp()
移动。
4
enemy = hero.findNearestEnemy()
每次循环都重新找敌人!
5
hero.attack(enemy)
攻击变量。
6
hero.attack(enemy)
攻击变量。
7
hero.moveRight()
继续移动。
8
hero.moveDown(2)
下移2步。
9
hero.moveUp()
上移。
No.25

第25关 Kithgard之门

新技能:建造 (Build)

食人魔从左边冲过来了!不要打,要造**围栏**挡住他们。

hero.buildXY("fence", x, y)

把鼠标移到地图上查看坐标 x 和 y。

solution.py
1
hero.moveDown()
调整位置。
2
hero.buildXY("fence", 36, 34)
在(36,34)造围栏1。
3
hero.buildXY("fence", 36, 30)
在(36,30)造围栏2。
4
hero.buildXY("fence", 36, 26)
在(36,26)造围栏3。
5
hero.moveRight(3)
围栏造好了,快跑!