codecombat极客战记森林41-60通关代码

codecombat极客战记森林41-60通关代码

所有代码均使用python编写。

41.以静制动

codecombat极客战记森林41-60通关代码_第1张图片

# 你可以将一个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:
            ready= hero.shield()
        # 否则(没有敌人)...
    else:
        hero.moveXY(40, 34)

42.AGRIPPA守卫战

codecombat极客战记森林41-60通关代码_第2张图片

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # 用 distanceTo 获取与敌人的距离。
        distance = hero.distanceTo(enemy)
        # 如果距离小于5米...
        if distance <5:
            # ...如果
            ready = hero.isReady("cleave")
            if ready:
               hero.cleave(enemy) 
            #“cleave”技能准备好了,就用“cleave”干掉他们!
            else:
            # ...否则,仅仅进行普通攻击。
                hero.attack(enemy)

43.AGRIPPA守卫战Acodecombat极客战记森林41-60通关代码_第3张图片

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # 用 distanceTo 获取与敌人的距离。
        distance = hero.distanceTo(enemy)
        # 如果距离小于5米...
        if distance <5:
            ready = hero.isReady("cleave")
            # ...如果 “cleave”技能准备好了,就用“cleave”干掉他们!
            if ready:
                hero.cleave(enemy)
            # ...否则,仅仅进行普通攻击。
            else:
                hero.attack(enemy)

44.

codecombat极客战记森林41-60通关代码_第4张图片

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # 用 distanceTo 获取与敌人的距离。
        distance = hero.distanceTo(enemy)
        # 如果距离小于5米...
        if distance <5:
            ready = hero.isReady("cleave")
            if ready:
                hero.cleave(enemy)
            # ...如果 “cleave”技能准备好了,就用“cleave”干掉他们!
            
            # ...否则,仅仅进行普通攻击。
            else:
                hero.attack(enemy)

45.村庄守护神

codecombat极客战记森林41-60通关代码_第5张图片

# 矮人来袭!保护镇子!
# 定义你自己的函数来对抗敌人!
def cleaveOrAttack():
    # 在函数中找到敌人,然后劈斩或是攻击它。
    enemy = hero.findNearestEnemy()
    distance = hero.isReady("cleave")
    if enemy:
        if distance:
            hero.cleave(enemy)
        hero.attack(enemy)
# 在巡逻点之间移动并调用函数。
while True:
    hero.moveXY(35, 34)
    # 使用上面定义的cleaveOrAttack函数。
    cleaveOrAttack()
    hero.moveXY(47, 27)
    # 再次调用函数。
    cleaveOrAttack()
    hero.moveXY(60, 31)
    # 再次调用函数。
    cleaveOrAttack()

46.乡村漫游者codecombat极客战记森林41-60通关代码_第6张图片

# 这定义了findAndAttackEnemy函数
def findAndAttackEnemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)
# 这段代码不是函数的一部分。
while True:
    # 现在你可以使用findAndAttackEnemy在村子里巡逻
    hero.moveXY(35, 34)
    findAndAttackEnemy()
    # 现在移动到右侧入口。
    hero.moveXY(60, 31)
    # 使用findAndAttackEnemy
    findAndAttackEnemy()

47.村庄守卫

codecombat极客战记森林41-60通关代码_第7张图片

# 这个函数攻击最近的敌人。
def findAndAttackEnemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)

# 定义一个函数来劈斩敌人(只在劈斩就绪时)
def findAndCleaveEnemy():
    # 找到最近的敌人:
    enemy = hero.findNearestEnemy()
    # 如果敌人存在:
    if enemy:
        # 如果"cleave"就绪了:
        ready = hero.isReady("cleave")
        if ready:
            # 是时候使用劈斩了!
            hero.cleave(enemy)
    pass

# 在主循环中,巡逻、劈斩和攻击。
while True:
    # 移动到巡逻点,劈斩并攻击。
    hero.moveXY(35, 34)
    findAndCleaveEnemy()
    findAndAttackEnemy()
    
    # 移动到另一点:
    hero.moveXY(35, 34)
    # 使用findAndCleaveEnemy函数:
    findAndCleaveEnemy()
    # 使用findAndAttackEnemy函数:
    findAndAttackEnemy()

48.造币厂

codecombat极客战记森林41-60通关代码_第8张图片

# 差役试图偷取金币
# 编写一个函数,在差役盗取金币前将其干掉

def pickUpCoin():
    coin = hero.findNearestItem()
    if coin:
        hero.moveXY(coin.pos.x, coin.pos.y)

# 在下方写一个攻击敌人的函数attackEnemy。
# 寻找最近的敌人,如果出现敌人就进行攻击
def attackenemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)
while True:
    #attackEnemy() # ∆ 在写好 attackEnemy 函数后消除这里的注释。
    pickUpCoin()
    attackenemy()

49. SHORT-SIGHTED BURLcodecombat极客战记森林41-60通关代码_第9张图片

# Collect coins and run lest the burl will find you.

# The function allows your hero take an item.
def takeItem(item):
    hero.moveXY(item.pos.x, item.pos.y)
# Write the function "checkTakeRu
def checkTakeRun(item1):
    if item1:
        takeItem(item1)
        hero.moveXY(40, 12)
    else:
        hero.moveXY(40, 12)

# If the item exists, use "takeItem" function to take it.
# Move to the start point (the green mark) whether the item or no.

# Don't change this code.
while True:
    hero.moveXY(16, 56)
    coin = hero.findNearestItem()
    checkTakeRun(coin)
    hero.moveXY(64, 56)
    coin = hero.findNearestItem()
    checkTakeRun(coin)

50.森林矿工

codecombat极客战记森林41-60通关代码_第10张图片

def checkEnemyOrSafe(target):
    # 如果目标(参数)存在:
    if target:
        # 然后攻击目标
        hero.attack(target)
    # 否则:
    else:
        # 使用say()来叫农民。
        hero.say("来人呢来人呢")

while True:
    # 移动到并检查右上的X标记。
    hero.moveXY(64, 54)
    enemy1 = hero.findNearestEnemy()
    checkEnemyOrSafe(enemy1)
    
    # 移动到左下的X标记处。
    hero.moveXY(16, 15)
    # 将findNearestEnemy()的结果存到一个变量中。
    enemy2 = hero.findNearestEnemy();
    # 调用checkEnemyOrSafe,并传递
    checkEnemyOrSafe(enemy2)
    # findNearestEnemy的结果作为参数

51.捉迷藏codecombat极客战记森林41-60通关代码_第11张图片

# 收集4个发光石,用来打败食人魔斗士。
# 如果发现发光石的话,藏起来。

def checkTakeHide(item):
    if item:
        # 物品在此,拿着它。
        hero.moveXY(item.pos.x, item.pos.y)
        # 然后移动到营地中央(40, 34)
        hero.moveXY(40, 34)

while True:
    # 移动到右上的X标记。
    hero.moveXY(68, 56)
    # 在那里搜索一块发光石。
    lightstone = hero.findNearestItem()
    # 调用checkTakeHide,并使用参数:lightstone
    checkTakeHide(lightstone)
    # 移动到左上角的标记。
    hero.moveXY(12, 56)
    # 搜索发光石。
    lightstone = hero.findNearestItem()
    # 调用checkTakeHide函数。
    checkTakeHide(lightstone)
    # 将搜索的结果作为参数传入。
    

52.MAIL INTERCEPTORcodecombat极客战记森林41-60通关代码_第12张图片

# Intercept all ogre messengers from ambush. 

def ambushAttack(target):
    #  Attack the target if it exists and return to the mark.
    # Write the function:
    if target:
        hero.attack(target)
    hero.moveXY(52, 36)

while True:
    ogre = hero.findNearestEnemy()
    ambushAttack(ogre)

53.墓地阴魂codecombat极客战记森林41-60通关代码_第13张图片

# 唯一的出口被食人魔堵住了。
# 躲着骷髅怪,并一个个击败食人魔

# 这个函数需要攻击敌人并隐藏。
def hitOrHide(target):
    # 如果'目标'存在:
    if target:
        # 攻击'目标'
        hero.attack(target)
        # 然后移动到红色标记。
        hero.moveXY(32, 16)        

while True:
    enemy = hero.findNearestEnemy()
    hitOrHide(enemy)

54.盗墓者

codecombat极客战记森林41-60通关代码_第14张图片

# 森林中一座被遗忘的墓地!
# 但是食人魔紧追不舍。
# 在防御矮人的同时破开坟墓

# 这个函数应该在敌人存在时攻击,否则攻击门!
def checkToDefend():
    # 检查目标是否存在
    enemy = hero.findNearestEnemy()
        # 如果是这样,攻击目标。
    if enemy:
        hero.attack(enemy)
    # 如果没有目标,使用else去做点别的事
    else:
        hero.attack("Door")
        # 否则攻击 "Door"
        
while True:
    checkToDefend()

55.边地之叉codecombat极客战记森林41-60通关代码_第15张图片

# 一大波食人魔正在到来!
# 使用 checkAndAttack 函数让代码易读。
# 这个函数有一个参数。
# 参数是一种给函数传递信息的方式。
def checkAndAttack(target):
    # target参数只是一个变量!
    # 它包含了函数调用时的参数。
    if target:
        hero.attack(target)
    hero.moveXY(43, 34)

while True:
    hero.moveXY(58, 52)
    topEnemy = hero.findNearestEnemy()
    checkAndAttack(topEnemy)
    # 移动到底部的X标记处。
    hero.moveXY(58, 17)
    # 创建名为 bottomEnemy 的变量,寻找最近敌人。
    bottomenemy = hero.findNearestEnemy()
    # 使用 checkAndAttack 函数,并使用 bottomEnemy 变量。
    checkAndAttack(bottomenemy)

56.AGRIPPA重构codecombat极客战记森林41-60通关代码_第16张图片

def cleaveOrAttack(enemy):
    # 如果 “cleave” 技能冷却完毕,那就使用它!否则,使用普通攻击。
    em = hero.isReady("cleave")
    if em:
        hero.cleave(enemy)
    else:
        hero.attack(enemy)
        
        
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        distance = hero.distanceTo(enemy)
        if distance < 5:
            # 调用上面定义的 “cleaveOrAttack” 函数
            cleaveOrAttack(enemy)

57.交给屠夫codecombat极客战记森林41-60通关代码_第17张图片

# 这里展示了如何定义一个叫作cleaveWhenClose的函数
# 函数定义了一个参数,名为target
def cleaveWhenClose(target):
    if hero.distanceTo(target) < 5:
        # 将你的攻击代码放到这里。
        # 如果cleave准备就绪,那就劈斩目标
        ready = hero.isReady("cleave")
        if ready:
            hero.cleave(target)
        # 否则,使用attack攻击目标!
        else:
            hero.attack(target)
# 这段代码不是函数的一部分。
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # 注意在cleaveWhenClose内部,我们用target指向敌人。
        cleaveWhenClose(enemy)

58.边地好伙伴

codecombat极客战记森林41-60通关代码_第18张图片

# 你现在拥有一个宠物!

def speak(event):
    # 你的宠物需要用pet.say()进行回应
    pet.say("hello kitty")
# 这将告诉你的宠物,在听到声音时运行speak()函数
pet.on("hear", speak)

# 和你的宠物交谈!
#pet.say("Hello")
hero.say("message")

59.BACKWOODS AMBUSH Acodecombat极客战记森林41-60通关代码_第19张图片

# In this level you will use functions with two parameters.
# Look at the structure below, notice how there are two arguments.
# These are both accessible within the function. 

def checkAndAttack(x, y):
    # First move to the coordinates provided by the parameters.
    hero.moveXY(x, y)
    # Then check for an enemy.
    enemy = hero.findNearestEnemy()
        # If there is one, attack it!
    if enemy:
        hero.attack(enemy)
    
checkAndAttack(24, 42)
checkAndAttack(27, 60)
# Navigate to the last 3 x-marks and defeat any remaining munchkins.
checkAndAttack(42, 50)
checkAndAttack(39, 24)
checkAndAttack(55, 29)

60.友人和敌人

codecombat极客战记森林41-60通关代码_第20张图片

# 农民和士兵聚集在森林。
# 命令农民战斗,敌人滚蛋!

while True:
    friend = hero.findNearestFriend()
    if friend:
        hero.say("战斗, " + friend.id + "!")
    # 寻找最近的敌人,然后让他们滚蛋
        enemy = hero.findNearestEnemy()
        if enemy:
            hero.say("滚蛋," + enemy.id + "!")

你可能感兴趣的:(codecombat)