zoukankan      html  css  js  c++  java
  • 【网易官方】极客战记(codecombat)攻略-森林-Agrippa 重构agrippa-refactored

    通过将它重构入函数来改善代码。

    简介

    有没有发现 "Agrippa 守卫战" 很难?函数能够帮你简化代码,使代码更易读。

    这一关里,你将重玩相同场景,不过这次你要用到接受参数的函数,这会让问题简单很多!要让函数接受参数,你需要在函数声明中将其列出:

    def valentine(a, b):
        hero.say(a + " loves " + b)
    valentine("Angie", "Bobby")
    valentine("Bobby", "Carla")

    默认代码

    def cleaveOrAttack(enemy):
        # 如果 “cleave” 技能冷却完毕,那就使用它!否则,使用普通攻击。

     

        pass
    while True:
        enemy = hero.findNearestEnemy()
        if enemy:
            distance = hero.distanceTo(enemy)
            if distance < 5:
                # 调用上面定义的 “cleaveOrAttack” 函数
                cleaveOrAttack(enemy)

    概览

    之前在 "乡村漫游者" 中,我们使用函数来避免重复编写相同代码。这里,我们将使用函数简化代码,让其更为简洁。

    你的 "Agrippa 守卫战" 解决方案可能是下面这样:

    while True:
        enemy = hero.findNearestEnemy()
        if enemy:
            distance = hero.distanceTo(enemy)
            if distance < 5:
                if hero.isReady("cleave"):
                    hero.cleave(enemy)
                else:
                    hero.attack(enemy)

    这里有很多嵌套 if 语句!为了更方便处理所有这些 if ,你可以将最内层的代码块放到一个单独的函数中,然后只用一行来调用它:

    while True:
        enemy = hero.findNearestEnemy()
        if enemy:
            distance = hero.distanceTo(enemy)
            if distance < 5:
                cleaveOrAttack(enemy)

    注意到,当我们调用 cleaveOrAttack 时,我们将敌人传递给它作为参数。在函数需要参数时,我们需要在函数声明中进行声明:

    def valentine(a, b):
        hero.say(a + " loves " + b)
    valentine("Angie", "Bobby")
    valentine("Bobby", "Carla")

    Agrippa 重构 解法

    def cleaveOrAttack(enemy):
        # 如果 “cleave” 技能冷却完毕,那就使用它!否则,使用普通攻击。
        if hero.isReady("cleave"):
            hero.cleave(enemy)
        else:
            hero.attack(enemy)
    while True:
        enemy = hero.findNearestEnemy()
        if enemy:
            distance = hero.distanceTo(enemy)
            if distance < 5:
                # 调用上面定义的 “cleaveOrAttack” 函数
                cleaveOrAttack(enemy)
     
     
    本攻略发于极客战记官方教学栏目,原文地址为:
  • 相关阅读:
    EF6 在原有数据库中使用 CodeFirst 总复习(三、重建迁移)
    EF6 在原有数据库中使用 CodeFirst 总复习(四、新建实体对象)
    EF6 在原有数据库中使用 CodeFirst 总复习(五、生成发帖页面)
    实体框架 (EF) 入门 => 一、我该用哪个工作流?
    实体框架 (EF) 入门 => 二、在全新的数据库中使用 Code First
    asp.net core 2.0 webapi集成signalr
    实体框架 (EF) 入门 => 三、CodeFirst 支持的完整特性列表
    ORM框架之------Dapper,Net下无敌的ORM
    Dapper Helper
    .NET平台微服务项目汇集
  • 原文地址:https://www.cnblogs.com/codecombat/p/12212572.html
Copyright © 2011-2022 走看看