【网易官方】极客战记(codecombat)攻略-森林-以静制动stillness-in-motion

房东的猫 提交于 2020-01-13 12:31:23

(点击图片进入关卡)

通过使用嵌套 if 语句停留在中间。

简介

将每个 if/else 考虑成一个容器,其中又可以容纳另一个 if/else 结构!参见:

enemy = hero.findNearestEnemy()
if enemy:
    if enemy.type == "munchkin":
        hero.say("我看到一个矮人!")
    else:
        hero.say("我看见其他类型的敌人!")
else:
    hero.say("我没有看见任何敌人...")

缩进 一定要小心。

默认代码

# 你可以将一个if语句放到另一个if语句当中。
# 你必须注意这些if语句是如何互相影响的。
# 请确保代码缩进正确!
# 从外层if/else结构开始会有帮助
# 使用注释为内层if/else占位预留空间:
while True:
    enemy = hero.findNearestEnemy()
    # 如果有敌人出现,那么就...
    if enemy:
        # 使用distanceTo创建一个距离变量
        # 如果敌人与你的距离小于5米,那么就攻击它
        # 否则(这名敌人还离得很远),就使用shield
        pass
    # 否则(没有敌人)...
    else:
        # …那么,回到X位置。
        hero.moveXY(40, 34)

概览

在这一关中,为了不让猎头者看见你,你必需停留在中间的区域!

你将会使用 嵌套 if 语句。

在写嵌套 if 语句时,你需要仔细注意如何设置程序的流程。

如果你的 if 语句很复杂,你可以一步步来,先用注释写下想法,然后再修改成代码。 比如在这一关,我们可以先开始写以下内容:

#如果敌人出现,然后....
    # 做些什么
# 否则 (没有敌人的话)...
    # 就移回到X

下一步,修改注释并把想法转成 if/else 语句和移动函数的代码:

if enemy:
    # 做些什么
else:
    hero.moveXY(40, 34)

现在可以再细化 "做些什么" 那句,添加更多详细的想法

if enemy:
    # 如果敌人在5米内,那么就攻击他
    # 否则 (敌人在远处外), 使用shield()函数防御
else:
    hero.moveXY(40, 34)

最后,把 if/else 语句中的注释转化成代码,并且确保缩进正确:

if enemy:
    if hero.distanceTo(enemy) < 5:
        hero.attack(enemy)
    else:
        hero.shield()
else:
    hero.moveXY(40, 34)

还有,在 while true 循环这样的循环语句下,if 和 else 等语句也要缩进:

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        if hero.distanceTo(enemy) < 5:
            hero.attack(enemy)
        else:
            hero.shield()
    else:
        hero.moveXY(40, 34)

小贴士: 你可以选中一块代码,然后按 Tab 增加缩进,或者按 Shift+Tab 减少缩进。

以静制动 解法

    # 你可以将一个if语句放到另一个if语句当中。
    # 你必须注意这些if语句是如何互相影响的。
    # 请确保代码缩进正确!
    # 从外层if/else结构开始会有帮助
    # 使用注释为内层if/else占位预留空间:
while True:
    enemy = hero.findNearestEnemy()
    # 如果有敌人出现,那么就...
    if enemy:
        # 使用distanceTo创建一个距离变量
        distance = hero.distanceTo(enemy)
        # 如果敌人与你的距离小于5米,那么就攻击它
        if distance < 5:
            hero.attack(enemy)
        # 否则(这名敌人还离得很远),就使用shield
        else:
            hero.shield()
    # 否则(没有敌人)...
    else:
        # …那么,回到X位置。
        hero.moveXY(40, 34)
 
 
本攻略发于极客战记官方教学栏目,原文地址为:

 

 
 
本攻略发于极客战记官方教学栏目,原文地址为:

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!