CodeCombat代码全记录(Python学习利器)--边地森林(第二章)代码6

以静制动

# 你可以将一个if语句放到另一个if语句当中。
# 你必须注意这些if语句是如何互相影响的。
# 请确保代码缩进正确!
# 从外层if/else结构开始会有帮助。
# 使用注释为内层if/else占位预留空间:

while True:
    enemy = hero.findNearestEnemy()
    # 如果有敌人出现,那么就...
    if enemy:
        # 使用distanceTo创建一个距离变量。
        distanceToEnemy = hero.distanceTo(enemy)
        # 如果敌人与你的距离小于5米,那么就攻击。
        if distanceToEnemy < 5:
            hero.attack(enemy)
        # 否则(敌人还离得很远),那么就使用shield。
        else:
            hero.shield()
    # 否则(没有敌人)...
    else:
        # …那么,回到X位置。
        hero.moveXY(40, 34)

agrippa守卫战

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

agrippa守卫战A

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

agrippa守卫战B

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

村庄守卫

2个嵌套的if如果关联关系很近,那我们可以写成一句话,用and连起来!例如此代码中的如果发现了敌人,并且劈斩技能已经准备好。

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

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

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

边地之叉

你需要渐渐的学会定义你自己的函数,传递参数的函数!!并调用相关参数。

# 一大波食人魔正在到来!
# 使用 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)

村庄守护神

你需要渐渐的学会定义你自己的函数!!

# 食人魔矮人来袭!保护镇子!

# 定义你自己的函数来对抗敌人!
def cleaveOrAttack():
    # 在函数中,找到敌人,然后劈斩或是攻击它。
    ogre = hero.findNearestEnemy()
    if ogre:
        if hero.isReady("cleave"):
            hero.cleave(ogre)
        # 否则,攻击食人魔:
        else:
            hero.attack(ogre)

# 在巡逻点之间移动并调用函数。
while True:
    hero.moveXY(35, 34)
    # 使用上面定义的cleaveOrAttack函数。
    cleaveOrAttack()
    
    hero.moveXY(47, 27)
    # 再次调用函数。
    cleaveOrAttack()
    
    hero.moveXY(60, 31)
    # 再次调用函数。
    cleaveOrAttack()

造币场

你之前的鞋的速度可能跟不上了,时间是有限的,试着换双速度快的鞋!!

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

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()

你可能感兴趣的:(CodeCombat代码全记录(Python学习利器)--边地森林(第二章)代码6)