【网易官方】极客战记(codecombat)攻略-森林-Agrippa 重构agrippa-refactored

【网易官方】极客战记(codecombat)攻略-森林-Agrippa 重构agrippa-refactored

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

简介

【网易官方】极客战记(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)     本攻略发于极客战记官方教学栏目,原文地址为: https://codecombat.163.com/news/jikezhanji-agrippachonggou 极客战记——学编程,用玩的!
上一篇:【网易官方】极客战记(codecombat)攻略-森林-嘲弄taunting


下一篇:Egret学习-坦克大战开发(五)