CodeCombat 教研室

PYTHON v3.0
Level 1

守卫的职责 (Guard's Duty)

任务目标:防止食人魔穿过通道

战术思路分析

指挥官!我们的城门没人看守,这样很危险。你需要做两件事:

  • 第一步:召唤守卫

    使用 game.spawnXY 在坐标 (42, 48) 变出一个士兵。

  • 第二步:植入“大脑”

    士兵虽然强壮,但是需要你教他怎么做。我们需要定义一个 函数,告诉他:"如果看到敌人就攻击,否则就乖乖站岗"。

VS

一旦看到(if enemy) -> 攻击(attack)

Python 参考程序

solution.py
1
def soldierLogic():
定义名为 soldierLogic 的函数(大脑)
2
while True:
进入无限循环,保持时刻警惕
3
enemy = soldier.findNearestEnemy()
士兵侦查:寻找最近的敌人并赋值给变量
4
if enemy:
判断:如果发现了敌人(enemy存在)
5
soldier.attack(enemy)
那就发起攻击!
6
else:
否则(如果没有敌人)
7
soldier.moveXY(42, 48)
回到坐标 (42, 48) 继续站岗
8
9
# 生成士兵并绑定逻辑
10
soldier = game.spawnXY("soldier", 42, 48)
在地图上创造一个士兵实体
11
soldier.on("spawn", soldierLogic)
当士兵出生(spawn)时,运行他的大脑代码
教官提示: 这里使用了 soldier.on("spawn", ...),这意味着这个士兵一出生,就会自动开始执行我们写的 while True 循环。
Level 2

军事训练 2 (Military Training 2)

任务目标:指挥整支军队击败食人魔

战术思路分析

这一次我们要指挥一整个小队!如果你有100个士兵,一个一个告诉他们怎么打仗会累死人的。
我们需要使用“广播指令”技术:

神器:setActionFor

game.setActionFor("soldier", "spawn", fightEnemies)
这句话的意思是:“听好了!所有的士兵!你们一出生,就都给我去执行打架逻辑!”

event.target 是谁?

因为这个函数是给所有人用的,代码不知道具体是哪个兵在执行。
event.target 就像是举手的那个人说:“就是!”。谁在执行代码,谁就是 target。

Soldier
Soldier
Archer
Archer
统一指挥

Python 参考程序

solution_v2.py
1
game.spawnXY("soldier", 35, 20)
生成第1个士兵
2
game.spawnXY("soldier", 45, 20)
生成第2个士兵
3
game.spawnXY("archer", 35, 10)
生成第1个弓箭手
4
game.spawnXY("archer", 45, 10)
生成第2个弓箭手
5
6
def fightEnemies(event):
定义通用的战斗逻辑,接收 event 参数
7
while True:
保持战斗状态
8
friendUnit = event.target
关键点:获取当前是谁在执行这个任务
9
enemy = friendUnit.findNearestEnemy()
让这个单位去找它附近的敌人
10
if enemy:
如果找到了敌人
11
friendUnit.attack(enemy)
让这个单位发起攻击
12
13
# 批量指派任务
14
game.setActionFor("soldier", "spawn", fightEnemies)
命令所有"soldier"出生时执行fightEnemies
15
game.setActionFor("archer", "spawn", fightEnemies)
命令所有"archer"出生时执行fightEnemies