CodeCombat 嵌套循环练习

属性筛选与资源管理(19-20关)

第 19 关

捡闪亮东西的人 (Shine Getter)

战术思路分析:价值筛选

英雄必须在有限时间内最大化收益,因此只收集价值最高的金币(`coin.value == 3`)。

遍历 + 属性比较

使用 `while` 循环遍历数组。在循环内部,通过 `if coin.value == 3:` 来筛选目标。只有满足条件的金币才会被收集。

IF Coin.Value == 3: Move()

Python 程序解法

1
while True:
外层无限循环
2
coins = hero.findItems()
获取物品列表
3
coinIndex = 0
初始化索引
4
# 遍历所有硬币
5
while coinIndex < len(coins):
**内层循环:** 遍历所有硬币
6
coin = coins[coinIndex]
获取当前硬币
7
# 金币价值 3 点。
8
if coin.value == 3:
判断:价值是否为 3 (金币)
9
# 只捡金币。
10
hero.moveXY(coin.pos.x, coin.pos.y)
移动收集
11
coinIndex += 1
索引步进 +1
第 20 关

掠夺者 (Pillager)

战术思路分析:资源优先

英雄必须先清理掉所有硬币,然后才能攻击敌人。硬币的收集是一个**内层循环**。

对象存在性循环 (`while coin:`)

- **收集循环:** `while coin:` 只要最近的硬币存在(视为 `True`),就持续收集,并在循环末尾**更新 `coin` 变量**。
- **战斗循环:** `while enemy.health > 0:` 只要敌人活着,就持续攻击。

WHILE Coin: Collect()
WHILE Enemy.HP > 0: Attack()

Python 程序解法

1
while True:
外层无限循环
2
coin = hero.findNearestItem()
寻找最近的硬币
3
# 当金币存在时:
4
while coin:
**内层循环 1:** 当硬币对象存在时
5
# 移动到金币处。
6
hero.moveXY(coin.pos.x, coin.pos.y)
移动收集
7
# 重新给 coin 变量赋值为距离最近的物品。
8
coin = hero.findNearest(hero.findItems())
**关键:** 再次查找最近硬币(更新循环条件)
9
enemy = hero.findNearest(hero.findEnemies())
寻找最近的敌人
10
if enemy:
如果敌人存在
11
# 当敌人的生命值大于 0 时
12
while enemy.health > 0:
**内层循环 2:** 持续攻击直到死亡
13
hero.attack(enemy)
攻击敌人