CodeCombat For 循环入门

高效迭代与团队调度(32-34关)

第 32 关

木材守卫 (Timber Guard)

战术思路分析:自动化命令

`for` 循环是 `while` 循环的升级版,专为**遍历列表**而设计。它会自动处理初始化、条件判断和索引步进。

核心:`for X in Y`

- `Y`:要遍历的列表 (`hero.findFriends()`)。
- `X`:列表中的当前元素 (`friend`)。
无需手动 `friendIndex += 1`!

for Unit in Friends: Command(Unit, ...)

Python 程序解法

1
while True:
外层无限循环
2-5
# ... 收集金钱和召唤士兵 ...
英雄负责资源管理和召唤
6
# 使用 for 循环来命令每个士兵。
7
for friend in hero.findFriends():
遍历盟友列表
8
if friend.type == "soldier":
只对士兵下达命令
9
enemy = friend.findNearestEnemy()
士兵寻找最近敌人
10
if enemy:
如果敌人存在
11
hero.command(friend, "attack", enemy)
命令攻击
12
else:
否则(没有敌人)
13
rightPos = {"x": 83, "y": 45}
14
hero.command(friend, "move", rightPos)
命令向右移动(前进)
第 33 关

动物园管理员 (Zoo Keeper)

战术思路分析:定点防御

英雄需要将 4 个士兵分别派往 4 个固定的防御点。

关键:`for j in range(len(friends))`

使用 `range(len(friends))` 产生索引 `j`,通过索引 `j` 同时访问 `friends[j]` 和 `points[j]`,实现士兵与地点的精确配对。

for j in range(len(F)):
  Command(F[j], "move", P[j])

Python 程序解法

1
points = []
防御点坐标列表
2-5
points[0] = {"x": 33, "y": 42} # ... 初始化所有 4 个点 ...
6
7
while hero.gold < 80:
1. 收集 80 金钱
8-10
# ... 收集逻辑 ...
11
12
for i in range(4):
2. 建造 4 个士兵
13
hero.summon("soldier")
召唤士兵
14
15
while True:
3. 派你的士兵到特定位置上
16
friends = hero.findFriends()
获取盟友列表
17
for j in range(len(friends)):
使用索引遍历所有盟友
18
point = points[j]
获取对应点
19
friend = friends[j]
获取对应士兵
20
enemy = friend.findNearestEnemy()
士兵寻找最近敌人
21
if enemy and enemy.team == "ogres" and friend.distanceTo(enemy) < 5:
条件:敌人是兽人且距离小于 5 米
22
hero.command(friend, "attack", enemy)
命令攻击
23
else:
否则
24
hero.command(friend, "move", point)
命令移动到定点
第 34 关

壮烈牺牲 (Glorious Sacrifice)

战术思路分析:诱饵移动

英雄需要将诱饵士兵派往远处的不同死亡地点,为英雄开路。

循环与配对

使用 `for j in range(len(friends))` 结合索引 `j`,将士兵 `friends[j]` 命令移动到对应的地点 `points[j]`。

for j in range: Command(F[j], "move", P[j])

Python 程序解法

1
# 收集 80 金钱。
2-4
while hero.gold < 80: # ... 收集逻辑 ...
收集金币
5
6
for i in range(4):
召唤 4 个士兵
7
hero.summon("soldier")
8
9-13
# ... points 数组初始化 ...
定义死亡地点坐标
14
friends = hero.findFriends()
获取士兵列表
15
16
for j in range(len(friends)):
遍历士兵和地点
17
point = points[j]
获取当前地点
18
friend = friends[j]
获取当前士兵
19
hero.command(friend, "move", point)
命令士兵移动到死亡地点