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

谁说胖子不能爱 提交于 2020-08-08 19:06:28
(点击图片进入关卡)

通过使用嵌套 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)

 

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

https://codecombat.163.com/news/jikezhanji-yijingzhidong

极客战记——学编程,用玩的!

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