天天看點

[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

首頁:https://cn.codecombat.com/play

語言:Python

第二界面:遠邊的森林Forest(40關)

時間:2-6小時

内容:if/else、關系操作符、對象屬性、處理輸入

網頁:https://cn.codecombat.com/play/forest

闖關:

第1關:森林保衛戰

子網頁:https://cn.codecombat.com/play/level/defense-of-plainswood?

# 建立兩個圍欄保護村民
# 把滑鼠放在地圖上得到X,Y坐标

self.buildXY("fence", 40, 52);
self.buildXY("fence", 40, 20);      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第2關:羊腸小道

子網頁:https://cn.codecombat.com/play/level/winding-trail?

# 到小路的盡頭去,并在那兒修一個栅欄。
# 利用你的 moveXY(x, y)坐标移動功能。

# It's the first point of the path.
hero.moveXY(36, 59)
# Move at the next points of the path.
hero.moveXY(37, 12)
# Build a fence to stop the ogre.
hero.buildXY("fence", 72, 25)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第3關:叢林裡的間隔

子網頁:https://cn.codecombat.com/play/level/woodland-cubbies?

# 在叢林裡頭探索,但務必提高警覺!
# 這些叢林角落隔間可能會藏有ogres!

hero.moveXY(19, 33)
enemy = hero.findNearestEnemy()
# 條件判斷式将會檢查該變數是否參考到一個ogre
if enemy:
    hero.attack(enemy)
    hero.attack(enemy)

hero.moveXY(49, 51)
enemy = hero.findNearestEnemy()
if enemy:
    # 在這裡撰寫攻擊敵人指令
    hero.attack(enemy)
    hero.attack(enemy)
    # pass沒有特别的意思,隻是用來協助結束條件判斷式,寫不寫都可以
    pass

hero.moveXY(58, 14)
enemy = hero.findNearestEnemy()
# 使用條件判斷式來确認敵人是否存在
if enemy:
    # 如果敵人存在就攻擊他
    hero.attack(enemy)
    hero.attack(enemy)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第4關:If-stravaganza

子網頁:https://cn.codecombat.com/play/level/if-stravaganza?

# 消滅從他們自己的營地裡出來的食人魔

while True:
    enemy = hero.findNearestEnemy()
    # 使用一個 “if” 語句去檢查是否有敵人存在:
    if enemy:
        # 攻擊敵人如果它存在的話
        hero.attack(enemy)
        hero.attack(enemy)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第5關:背靠背

子網頁:https://cn.codecombat.com/play/level/back-to-back?

# 呆在中間防守!

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # 亦或主動出擊...
        hero.attack(enemy)
        hero.attack(enemy)
        pass
    else:
        # 亦或回到你的陣地防守。
        hero.moveXY(40, 34)
        pass      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第6關:森林劈裂者

子網頁:https://cn.codecombat.com/play/level/woodland-cleaver?

# 盡可能經常使用你的新技能“cleave”

hero.moveXY(23, 23)
while True:
    enemy = hero.findNearestEnemy()
    if hero.isReady("cleave"):
        # “Cleave”掉敵人!
        hero.cleave(enemy)
        pass
    else:
        # 否則(如果“cleave”還沒準備好),就用你的普通攻擊
        hero.attack(enemy)
        pass      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第7關:邊遠地區的對峙

子網頁:https://cn.codecombat.com/play/level/backwoods-standoff?

# 這些曼切堪食人魔害怕英雄!
# 說些什麼,他們會吓得往後退。
# 但是,有足夠的曼切堪食人魔,他們将聯合起來伏擊你!小心!
# 每當`cleave`(橫劈)冷卻時間完成,立即用它清除敵人。

while True:
    # 使用 ‘isReady’ 中的一個 “if-statement” 的語句來檢查 “cleave”
    if hero.isReady("cleave"):
        # 劈斬!
        hero.cleave()
    # 或者,如果 cleave 還沒準備好的話:
    else:
        # 說一點什麼來吓走曼切堪食人魔
        hero.say("Bool!")
    pass      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第8關:測距儀

子網頁:https://cn.codecombat.com/play/level/range-finder?

# 瘦人正在森林裡頭巡邏!
# 使用distanceTo方法來計算敵人與英雄間的距離
# 說出每個敵人和英雄間的距離以告知大砲要轟炸哪裡

enemy1 = "Gort"
distance1 = hero.distanceTo(enemy1)
hero.say(distance1)

enemy2 = "Smasher"
# 将distance2變數作為參數,傳入say()方法
distance2 = hero.distanceTo(enemy2)
# 測量并說出剩餘敵人與英雄間的距離
hero.say(distance2)

# 不要向你的友軍進行射擊!
enemy3 = "Charles"

enemy4 = "Gorgnub"
distance4 = hero.distanceTo(enemy4)
hero.say(distance4)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第9關:保護農民

子網頁:https://cn.codecombat.com/play/level/peasant-protection?

while True:
    enemy = hero.findNearestEnemy()
    distance = hero.distanceTo(enemy)
    if distance < 10:
        # 如果他們與農民太近,就攻擊他們
        hero.attack(enemy)
        pass
    # 否則的話,呆在農民旁邊!
    else:
        hero.moveXY(40, 37)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第10關:瘋狂的食人魔

子網頁:https://cn.codecombat.com/play/level/maniac-munchkins?

# 地上另一個讓英雄打開的寶箱!
# 攻擊寶箱以打開它
# 有些食人魔可不會呆呆地站着挨打!
# 當食人魔離你太近時,你得學着保護你自己

while True:
    enemy = hero.findNearestEnemy()
    distance = hero.distanceTo(enemy)
    # 首先,定期使用旋風斬(cleave)當技能就緒的時候:
    if hero.isReady("cleave"):
        hero.cleave(enemy)
        pass
    # 攻擊靠近并離你最近的食人魔
    elif distance < 5:
        hero.attack(enemy)
        pass
    # 否則,試着打破寶箱看看:
    else:
        hero.attack("Chest")
        pass      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第11關:躍火林中

子網頁:https://cn.codecombat.com/play/level/forest-fire-dancing?

# 在這關,别碰惡魔石!往其他方向移動避開它們!
while True:
    evilstone = hero.findNearestItem()
    if evilstone:
        pos = evilstone.pos
        # 如果惡魔石在左邊,走到右邊。
        if pos.x == 34:
            hero.moveXY(43, 17)
            pass
        else:
            # 如果惡魔石在右邊,走到左邊。
            if pos.x == 46:
                hero.moveXY(37, 17)
            pass
    else:
        # If there's no evilstone, go to the middle.
        if pos.x == '':
            hero.moveXY(43,22 )
        pass      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第12關:村莊漫遊者

子網頁:https://cn.codecombat.com/play/level/village-rover?

# This defines a function called findAndAttackEnemy
def findAndAttackEnemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)

# This code is not part of the function.
while True:
    # Now you can patrol the village using findAndAttackEnemy
    hero.moveXY(35, 34)
    findAndAttackEnemy()
    
    # Now move to the right entrance.
    hero.moveXY(60, 31)
    # Use findAndAttackEnemy
    findAndAttackEnemy()      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第13關:邊遠地區交叉口

子網頁:https://cn.codecombat.com/play/level/backwoods-fork?

# 一大波獸人正在到來!
# 使用 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, 16)
    # 建立名為 bottomEnemy 的變量,尋找最近敵人。
    bottomEnemy = hero.findNearestEnemy()
    # 使用 checkAndAttack 函數,并包括 bottomEnemy 變量。
    checkAndAttack(bottomEnemy)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第14關:無敵旋風斬

子網頁:https://cn.codecombat.com/play/level/leave-it-to-cleaver?

# 這裡顯示如何定義一個稱為cleaveWhenClose的函式
# 函式定義了一個參數稱為target
def cleaveWhenClose(target):
    if hero.distanceTo(target) < 5:
        pass
        # 把你的攻擊程式碼放在這裡
        # 如果旋風斬就緒,對目標施放旋風斬
        if hero.isReady("cleave"):
            hero.cleave(target)
        # 否則,直接攻擊目標!
        else:
            hero.attack(target)

# 這裡的程式碼不是函式的一部份.
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # 記得在cleaveWhenClose函式裡面,我們改用target作為指向敵人的變數.
        cleaveWhenClose(enemy)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第15關:邊遠地區小夥伴

子網頁:https://cn.codecombat.com/play/level/backwoods-buddy?

# You now have a pet!

def speak(event):
    # 你的寵物應該用pet.say()來回應
    pet.say("Meow!")
    pass

# 這告訴你的寵物去執行speak()函式當她聽到什麼
pet.on("hear", speak)
# 和你的寵物說話!
hero.say("Hello Kitty")      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第16關:去接住

子網頁:https://cn.codecombat.com/play/level/go-fetch? 

# 你被結實的陷阱給困住了!
# 派出你的寵物去拿回治療藥水!

def goFetch():
    # 你可以在事件處理函式裡面使用回圈.
    while True:
        potion = hero.findNearestItem()
        if potion:
            # 用 “pet.fetch()” 去讓你的寵物撿藥水:
            pet.fetch(potion)
            pass

# 當寵物被召喚出來時,會觸發 "spawn" 事件。
# 這讓你的寵物在關卡開始運作 goFetch()。
pet.on("spawn", goFetch)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第17關:朋友與敵人

子網頁:https://cn.codecombat.com/play/level/friend-and-foe?

# 農民和士兵聚集在森林。
# 指令農民戰鬥,苦工遠離!

while True:
    friend = hero.findNearestFriend()
    if friend:
        hero.say("To battle, " + friend.id + "!")
    # 尋找最近的敵人,然後讓他們滾蛋
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.say("Go away,"+enemy.id+"!")      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第18關:巫師之門

子網頁:https://cn.codecombat.com/play/level/the-wizards-door?

# 去找Laszlo并取得他的密碼數字.
hero.moveXY(30, 13)
las = hero.findNearestFriend().getSecret()

# 向 Laszlo 的數字中加7就能得到 Erzsebet的号碼
# 去找Erzsebet并告訴她魔法數字.
erz = las + 7
hero.moveXY(17, 26)
hero.say(erz)

# 将 Erzsebet 的數字除以 4 得到 Simoyi 的數字。
# 去找Simonyi并告訴他數字.
sim = erz / 4
hero.moveXY(30, 39)
hero.say(sim)

# 将 Simonyi 的數字乘以 Laszlo 的數字得到 Agata 的數字。
# 去找Agata并告訴她數字.
aga = sim * las
hero.moveXY(43, 26)
hero.say(aga)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第19關:寶庫追逐戰

子網頁:https://cn.codecombat.com/play/level/coincrumbs?

# 跟随硬币的軌迹來到紅色 X 标記的出口

while True:
    # 這能找到最近的敵人。
    item = hero.findNearestItem()
    if item:
        # 這将物品的 pos,就是坐标,存儲在變量中。
        itemPosition = item.pos
        # 将物品的 X 和 Y 坐标放進變量。
        itemX = itemPosition.x
        itemY = itemPosition.y
        # 現在,使用moveXY來移動到itemX和itemY:
        hero.moveXY(itemX, itemY)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第20關:看不見的距離

子網頁:https://cn.codecombat.com/play/level/blind-distance?

# 你的任務是告訴他獸人的距離。

# 這個函數尋找最近的敵人,并傳回距離。
# 假如沒有敵人,函式會回傳0.
def nearestEnemyDistance():
    enemy = hero.findNearestEnemy()
    result = 0
    if enemy:
        result = hero.distanceTo(enemy)
    return result

while True:
    # 呼叫 nearestEnemyDistance() 和
    # 儲存結果到 enemyDistance變數裡頭.
    enemyDistance = nearestEnemyDistance()
    # 假如 enemyDistance 大于0:
    if enemyDistance > 0:
        # 說出 enemyDistance變數的值.
        hero.say(enemyDistance)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第21關:困獸之鬥

子網頁:https://cn.codecombat.com/play/level/hit-and-freeze?

# 你掉進陷阱裡了!别動!你會受傷的!

# 這個函數檢查敵人是否在攻擊範圍。
def inAttackRange(enemy):
    distance = hero.distanceTo(enemy)
    # 幾乎所有的劍攻擊距離都是3.
    if distance <= 3:
        return True
    else:
        return False

# 隻有獸人在範圍内才攻擊他們.
while True:
    # 找到最近的敵人,并将其儲存在一個變量中。
    enemy = hero.findNearestEnemy()
    # 調用 inAttackRange(enemy),将 enemy 作為參數
    # 把結果儲存于 “canAttack” 變量中
    canAttack = inAttackRange(enemy)
    # 假如儲存在 canAttack的結果是 True, 然後下手!
    if canAttack:
        hero.attack(enemy)
    pass      

簡化版:

while True:
    enemy = hero.findNearestEnemy()
    if hero.distanceTo(enemy) <= 3:
        hero.attack(enemy)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第22關:鹽堿地

子網頁:https://cn.codecombat.com/play/level/salted-earth?

# 獸人正在攻擊附近的殖民地!
# 小心,獸人在地上放了毒藥。
# 收集硬币并打敗獸人,但是要避開毛怪(burls)和毒藥!

while True:
    enemy = hero.findNearestEnemy()
    if enemy.type == "munchkin" or enemy.type == "thrower":
        hero.attack(enemy)
        
    item = hero.findNearestItem()
    # 檢查物品類型,確定英雄不會撿起毒藥!
    # 尋找類型:'gem' 和 'coin'
    if item.type == "gem" or item.type == "coin":
        pos = item.pos
        x = pos.x
        y = pos.y
        hero.moveXY(x, y)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第23關:春雷

子網頁:https://cn.codecombat.com/play/level/spring-thunder?

# 某些金币和寶石會吸引閃電.
# 這個英雄應隻收集銀币和藍寶石

while True:
    item = hero.findNearestItem()
    # 銀币的價值為2.
    # 收集該物品,如果其類型等于"coin"
    # AND item.value 相等于2
    if item.type == "coin" and item.value == 2:
        hero.moveXY(item.pos.x, item.pos.y)
    # 一個藍寶石價值10
    # 收集該物品,如果其類型等于"gem"
    # AND item.value等于10.
    if item.type == "gem" and item.value == 10:
        hero.moveXY(item.pos.x, item.pos.y)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第24關:平常的一天

子網頁:https://cn.codecombat.com/play/level/usual-day?

# 打敗食人魔,收集金币。一切都那麼平常。
# 使用 與(AND) 在同一行檢查存在性和類型。

while True:
    enemy = hero.findNearestEnemy()
    # 有了與(AND),隻在敵人存在時檢查類型
    if enemy and enemy.type == "munchkin":
        hero.attack(enemy);
    # 尋找最近的物品
    item = hero.findNearestItem()
    # 如果有名為 “coin” (金币)的物品存在,那就快去收集它!
    if item and item.type == "coin":
        hero.moveXY(item.pos.x, item.pos.y)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第25關:穿越

子網頁:https://cn.codecombat.com/play/level/passing-through?

# 不要冒犯友善獸人的儀式

while True:
    item = hero.findNearestItem()
    if item:
        # 如果物品的類型不等于"gem"
        if item.type != "gem":
            # 然後跟随你的寵物。
            hero.moveXY(pet.pos.x, pet.pos.y)
        # 否則:
        else:
            # 移動到寶石的坐标。
            hero.moveXY(item.pos.x, item.pos.y)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第26關:有用的對手

子網頁:https://cn.codecombat.com/play/level/useful-competitors?

# 這片金币地中暗藏了緻命的毒藥。
# 獸人正在進攻,而苦力嘗試偷你的金币!
# 隻在敵人類型不是 "peon" 的時候攻擊。

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        if enemy.type != "peon":
            hero.attack(enemy)
    item = hero.findNearestItem()
    if item:
        # 隻在物品的類型不是 "poison" 的時候收集。
        if item.type != "poison":
            hero.moveXY(item.pos.x, item.pos.y)
        pass      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第27關:邏輯之路

子網頁:https://cn.codecombat.com/play/level/logical-path?

# 從巫師那得到兩個秘密的真假值
hero.moveXY(14, 24)
secretA = hero.findNearestFriend().getSecretA()
secretB = hero.findNearestFriend().getSecretB()

# 如果 secretA 和 secretB 都為真,走上面的路;否則,走下面。
# 檢視提示,學會寫邏輯表達式。
secretC = secretA and secretB
if secretC:
    hero.moveXY(20, 33)
else:
    hero.moveXY(20, 15)
hero.moveXY(26, 24)

# 如果 secretA 和 secretB 中有一個為真,走上面。
secretD = secretA or secretB
if secretD:
    hero.moveXY(32, 33)
else:
    hero.moveXY(32, 15)
hero.moveXY(38, 24)

# If secretB is NOT true, take the high path.
secretE = not secretB
if secretE:
    hero.moveXY(44, 33)
else:
    hero.moveXY(44, 15)
hero.moveXY(50, 24)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第28關:回到多刺疏林農場

子網頁:https://cn.codecombat.com/play/level/return-to-thornbush-farm?

# 這個函數 “maybeBuildTrap” 定義了兩個參數
def maybeBuildTrap(x, y):
    # 使用x和y作為座标來移動過去
    hero.moveXY(x, y)
    enemy = hero.findNearestEnemy()
    if enemy:
        pass
        # 使用 buildXY 在所給 x 和 y 坐标建造 "fire-trap".
        hero.buildXY("fire-trap", x, y)
        
while True:
    # 這叫做 maybeBuildTrap,帶有上方入口的坐标。
    maybeBuildTrap(43, 50)
    # 現在在左邊入口使用maybeBuildTrap
    maybeBuildTrap(25, 34)
    # 現在用 “maybeBuildTrap” 炸開底部的門口!
    maybeBuildTrap(43, 20)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第29關:收集金币

子網頁:https://cn.codecombat.com/play/level/coinucopia?

# 當你放好旗幟後點送出.
# 點選送出後,旗幟按鈕出現在左下角. 

while True:
    flag = hero.findFlag()
    if flag:
        hero.pickUpFlag(flag)
    else:
        hero.say("為英雄放置一面旗幟來移動.")      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第30關:金币草地

子網頁:https://cn.codecombat.com/play/level/copper-meadows?

# 收集每片草地的所有金币。
# 使用旗子在草地間移動。
# 當你準備好放置旗子時點選“送出”

while True:
    flag = hero.findFlag()
    if flag:
        pass  # “pass”是一個占位符,它沒有任何作用
        # Pick up the flag.
        hero.pickUpFlag(flag)
    else:
        # Automatically move to the nearest item you see.
        item = hero.findNearestItem()
        if item:
            position = item.pos
            x = position.x
            y = position.y
            hero.moveXY(x, y)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第31關:插旗子

子網頁:https://cn.codecombat.com/play/level/drop-the-flag?

# 在你想要建造陷阱的位置插旗
# 當你沒有在建造陷阱的時候,收集金币!

while True:
    flag = hero.findFlag()
    if flag:
        # 我們該如何通過旗子的位置得到 flagX 和 flagY 呢?
        # (向下看如何得到物品的 x 和 y)
        flagPos = flag.pos
        flagX = flagPos.x
        flagY = flagPos.y
        hero.buildXY("fire-trap", flagX, flagY)
        hero.pickUpFlag(flag)
    else:
        item = hero.findNearestItem()
        if item:
            itemPos = item.pos
            itemX = itemPos.x
            itemY = itemPos.y
            hero.moveXY(itemX, itemY)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第32關:小心陷阱

子網頁:https://cn.codecombat.com/play/level/mind-the-trap?

# 如果你試圖攻擊一個遠處的敵人,你的英雄會忽略掉所有的旗子而朝它沖過去。
# 你需要確定你隻攻擊靠近自己的敵人!

while True:
    flag = hero.findFlag()
    enemy = hero.findNearestEnemy()
if flag:
        # 去拔旗子。
        hero.pickUpFlag(flag)
        hero.say("我應該去把旗子拔起來。")
    elif enemy:
        # 僅當敵人的距離小于10米時才攻擊。
        distance = hero.distanceTo(enemy)
        if distance < 10:
            hero.attack(enemy)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第33關:通信屍體

子網頁:https://cn.codecombat.com/play/level/signal-corpse?

# 你可以使用旗子來選擇不同的政策
# 在這關,綠色旗子代表你要移動到旗子處。
# 遇到黑旗就意味着你要劈開旗子
# The doctor will heal you at the Red X

while True:
    green = hero.findFlag("green")
    black = hero.findFlag("black")
    nearest = hero.findNearestEnemy()    
    if green:
        hero.pickUpFlag(green)
    elif black and hero.isReady("cleave"):
        hero.pickUpFlag(black)
        # 劈斬!
        hero.cleave(black)
    elif nearest and hero.distanceTo(nearest) < 10:
        # 攻擊!
        hero.attack(nearest)
        pass      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第34關:豐富的覓食

子網頁:https://cn.codecombat.com/play/level/rich-forager?

# 使用 if 和 else if 來處理任何情況
# 放置它來防禦敵人,收集金币
# 確定你從物品商店買到偉大的盔甲,建議400點以上的健康。

while True:
    flag = hero.findFlag()
    enemy = hero.findNearestEnemy()
    item = hero.findNearestItem()
    if flag:
        # 當我發現旗子的時候發生了什麼?
        hero.pickUpFlag(flag)
    elif enemy:
        # 當我找到敵人的時候發生了什麼?
        if hero.isReady("cleave"):
            hero.cleave(enemy)
        else:
            hero.attack(enemy)
    elif item:
        # 當我找到一個物品的時候,發生了什麼?
        hero.moveXY(item.pos.x, item.pos.y)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

第35關:圍攻Stonehold

子網頁:https://cn.codecombat.com/play/level/siege-of-stonehold?

# 幫助你的朋友擊敗索科塔派出的手下。
# 你需要更好的裝備和政策去赢得戰鬥。
# 标記可能有用,不過這取決于你——要有創造性哦!
# 在圍欄後有位醫生。移動到 X 處得到治療!

while True:
    enemy = hero.findNearestEnemy()
    flag = hero.findFlag()
    ready = hero.isReady("cleave")
    if flag:
        hero.moveXY(flag.pos.x, flag.pos.y)
        hero.pickUpFlag(flag)
    elif enemy:
        distance = hero.distanceTo(enemy)
        if distance < 10 and ready:
            hero.cleave(enemy)
        else:
            hero.attack(enemy)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

【競技AI】第36關:競技場

子網頁:https://cn.codecombat.com/play/level/dueling-grounds?

第一次:

# 在決鬥中擊敗敵人的英雄!

while True:
    # 在一個循環中找到并攻擊敵人
    # 當你完成的時候,送出到多人天梯系統中!
    enemy = hero.findNearestEnemy()
    if hero.isReady("cleave"):
        hero.cleave(enemy)
    else:
        hero.attack(enemy)      

第二次:

# 在決鬥中擊敗敵人的英雄!

while True:
    # 在一個循環中找到并攻擊敵人
    # 當你完成的時候,送出到多人天梯系統中!
    enemy = hero.findNearestEnemy()
    if hero.isReady("cleave"):
        hero.cleave(enemy)
    elif hero.isReady("bash"):
        hero.bash(enemy)
    else:
        hero.attack(enemy)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

【挑戰更新】第37關:野外逃亡

子網頁:https://cn.codecombat.com/play/level/backwoods-brawl?

【未通關】

第38關:野馬

子網頁:https://cn.codecombat.com/play/level/wild-horses?

while True:
    # 你怎麼尋找最近的友好機關?
    # 馬=?
    horse = hero.findNearest(hero.findFriends())
    
    if horse:
        x1 = horse.pos.x - 7
        x2 = horse.pos.x + 7
        if x1 >= 1:
            # 移動到馬的y坐标,但使用x1作為x坐标。
            hero.moveXY(x1, horse.pos.y)
        elif x2 <= 79:
            # 移動到馬的y坐标,但使用x2作為x坐标。
            hero.moveXY(x2, horse.pos.y)
        distance = hero.distanceTo(horse)
        if distance <= 10:
            hero.say("Whoa")
            # 移到到紅色的x來使馬傳回農場。
            hero.moveXY(27, 54)
            # 移回牧場開始尋找下一匹馬。      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

【挑戰更新】第39關:邊遠寶藏

子網頁:https://cn.codecombat.com/play/level/backwoods-treasure?

# 從2~3個樹叢裡 收集100個金币
# 如果你赢了,接下來會變得更難,當然也會有更多獎勵。
# 如果你輸了,需要等待一天再次挑戰
# 記得,每一次送出都會獲得不同的地圖。

while True:
    enemy = hero.findNearestEnemy()
    item = hero.findNearestItem()
    flag = hero.findFlag("green")
    
    if flag:
        hero.pickUpFlag(flag)
    if enemy:  
        distance = hero.distanceTo(enemy)
        if distance < 8:
            if hero.isReady("cleave"):
                hero.cleave(enemy)
            elif hero.isReady("bash"):
                hero.bash(enemy)
            else:
                hero.attack(enemy)
    if item:
        hero.moveXY(item.pos.x, item.pos.y)      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

【競技AI】第40關:多人寶藏

子網頁:https://cn.codecombat.com/play/level/multiplayer-treasure-grove?

# 當第一個收集100個金币的人!
# 如果你死了,重生的時候隻有原來67%的金币

while True:
    # 找到金币并攻擊敵人
    # 使用旗子和特殊的移動政策來赢得比賽!
    flag = hero.findFlag()
    item = hero.findNearestItem()
    enemy = hero.findNearestEnemy()
    if flag:
        hero.pickUpFlag(flag)
    elif item:
        hero.moveXY(item.pos.x, item.pos.y)
    elif enemy:
        distance = hero.distanceTo(enemy)
        if distance < 5:
            hero.attack(enemy)
      
[Python] Codecombat攻略 遠邊的森林 Forest (1-40關)

初學Python。

請多指教。

-----轉載請注明出處,否則作者有權追究法律責任。

轉載于:https://www.cnblogs.com/learningpython-xinersubai/p/7661466.html