CodeCombat 逻辑与运算

逻辑运算符 AND 系列(38-41关)

第 38 关

春雷 (Thunderstorm)

战术思路分析:安全寻宝

暴风雨中,只有特定的银币和蓝宝石是安全的,其他的都会引来闪电!我们需要**同时**验证两件事:**物品类型** 和 **物品价值**。

核心概念:逻辑 AND (`and`)

`A and B` 的结果是:**只有当 A 和 B 都为 `True` 时**,结果才是 `True`。
- 银币条件:`item.type == "coin" and item.value == 2`
- 蓝宝石条件:`item.type == "gem" and item.value == 10`

IF (Type AND Value): Collect!

Python 程序解法

1
while True:
2
item = hero.findNearestItem()
寻找最近物品
3
# 一枚银币的价值是2。
4
# 如果item.type等于"coin",则收集
5
# 且item.value等于2。
6
if item.type == "coin" and item.value == 2:
条件 1 **AND** 条件 2 (安全银币)
7
hero.moveXY(item.pos.x, item.pos.y)
移动收集
8
# 一枚蓝宝石的价值是10。
9
# 如果item.type等于"gem",则收集
10
# 且item.value等于10。
11
if item.type == "gem" and item.value == 10:
条件 3 **AND** 条件 4 (安全蓝宝石)
12
hero.moveXY(item.pos.x, item.pos.y)
移动收集
第 39 关

传送套索 (Teleportation Lasso)

战术思路分析:瞄准弱点

传送过来的食人魔很快会消失,但你只能攻击**弱小的矮人("munchkin")**,而且必须在**20米以内**才能成功击晕他们。

AND 连接 类型 和 距离

两个条件缺一不可:
1. `enemy.type == "munchkin"` (类型检查)
2. `distance < 20` (距离检查)

Type AND Distance

Python 程序解法

1
while True:
2
enemy = hero.findNearestEnemy()
寻找最近敌人
3
distance = hero.distanceTo(enemy)
计算距离
4
# 如果enemy.type是"munchkin"
5
# 且距离小于20米。
6
if enemy.type == "munchkin" and distance < 20:
满足矮人 **且** 距离小于 20
7
# 则攻击它。
8
hero.attack(enemy)
攻击
第 40 关

狩猎斗士 (Brawler Hunt)

战术思路分析:大炮瞄准

弓箭手无法对付巨大的斗士("brawler"),必须呼叫大炮。为了节约炮弹,大炮只听从一个非常精确的命令:**必须是斗士**,且**必须在 50 米以内**。

双重 AND 检查

条件:`enemy.type == "brawler"` **AND** `distance < 50`

IF (Brawler AND Close): Say("Fire!")

Python 程序解法

1
while True:
2
# 找到最近的敌人,并确定与它的距离。
3
enemy = hero.findNearestEnemy()
4
distance = hero.distanceTo(enemy)
5
# 如果敌人的类型是"brawler"
6
# 且距离它不到50米,
7
if enemy.type == "brawler" and distance < 50:
满足斗士 **AND** 距离小于 50
8
# 那就说"Fire!",命令大炮开火。
9
hero.say("Fire!")
开火!
第 41 关

概念挑战. 有用的狩猎 (Useful Hunt)

战术思路分析:只打病号

你被派去清理生病的树精。你只攻击那些**类型是 `"burl"`** 且 **生命值 (`health`) 低于 10** 的目标。

AND 连接 类型 和 数值

条件:`enemy.type == "burl"` **AND** `enemy.health < 10`

(Burl AND HP < 10): Attack!

Python 程序解法

1
while True:
2
enemy = hero.findNearestEnemy()
寻找最近的单位
3
if enemy.type == "burl" and enemy.health < 10:
满足树精 **AND** 生命值小于 10
4
hero.attack(enemy)
攻击目标
5
else:
否则
6
hero.moveXY(30, 17)
回到地图中央待命