CodeCombat代码全记录(Python学习利器)--SARVEN沙漠(第三章)代码7

游魂

学习内容:
Array LengthAccessing Properties变量While LoopsIterating Over ArraysWhile Loops with Conditionals

# 攻击骷髅捡走宝石

while True:
    enemies = hero.findEnemies()
    enemyIndex = 0
    while enemyIndex < len(enemies):
        enemy = enemies[enemyIndex]
        # 敌人有血量时进攻。
        while enemy.health > 0:
            hero.attack(enemy)
        enemyIndex += 1
    items = hero.findItems()
    itemIndex = 0
    # 遍历所有的物品。
    while itemIndex < len(items):
        item = items[itemIndex]
        #distance = hero.distanceTo(item)
        # 而距离大于2:        
        while hero.distanceTo(item) > 2:
            # 试着拿到物品
            hero.moveXY(item.pos.x, item.pos.y)
        # 别忘了让itemIndex变大 (itemIndex+=1)或(itemIndex=itemIndex+1)
        itemIndex += 1

潜伏

# 用findEnemies把敌人存在数组enemies中
# 只攻击萨满巫师,不要攻击牦牛!

enemies = hero.findEnemies()
enemyIndex = 0

# 把这段代码用一个while loop 功能循环遍历所有的敌人
# 当 enemyIndex 小于 enemies 的长度时:
while enemyIndex < len(enemies):
    enemy = enemies[enemyIndex]
    if enemy.type == 'shaman':
        while enemy.health > 0:
            hero.attack(enemy)
# 记得增加enemyIndex
    enemyIndex += 1

优待

# 首先,在所有的敌人中循环...

enemies = hero.findEnemies()
enemyIndex = 0
# ...但是仅攻击"thrower"类型的敌人。
while enemyIndex < len(enemies):
    enemy = enemies[enemyIndex]
    if enemy and enemy.type == "thrower":
        hero.attack(enemy)
    enemyIndex += 1
# 然后再到所有的敌人中循环...
enemies = hero.findEnemies()
enemyIndex = 0
# ...干掉仍然活着的每个
while enemyIndex < len(enemies):
    enemy = enemies[enemyIndex]
    if enemy and hero.isReady("cleave"):
        hero.cleave(enemy)
    else:
        hero.attack(enemy)
    enemyIndex += 1

Sarven 牧羊人

我们来学习下数组长度的几种使用方式:
在这里插入图片描述

# 使用 while 循环来对付食人魔。

while True:
    enemies = hero.findEnemies()
    enemyIndex = 0

    # 将攻击逻辑放到 while 循环里来攻击所有的敌人。
    # 查找数组的长度: len(enemies)
    while enemyIndex < len(enemies):
        enemy = enemies[enemyIndex]
        # "!=" 意思是 "不等于"
        if enemy.type != "sand-yak":
            # 当敌人的健康值大于0,攻击它!
            if enemy.health > 0:
                hero.attack(enemy)
        enemyIndex += 1

    # 在两波敌人之间,移动回中央。
hero.moveXY(40, 33)
    

掠夺者

# 打几下泡泡人捡走掉出的币

while True:
    coin = hero.findNearestItem()
    # 当存在金币时:
    if coin:
        # 移动到金币处。
        hero.moveXY(coin.pos.x, coin.pos.y)
        # ‘coin’应该是最近的那枚 捡到手以后要另找一枚最近的
        coin = hero.findNearestItem()
    enemy = hero.findNearestEnemy()
    if enemy:
        # 如果敌人还会动
        if enemy.health > 0:
            # 就打它
            hero.attack(enemy)

猛砸他们全家

自己多好好想想,不只这一种代码实现方式。

# 小心那些食人魔。
# 它们是特殊训练的低脂肪超强食人魔。
# 关键词是“低脂肪”
enemies = hero.findEnemies()
items = hero.findItems()
Index = 0
while Index < len(enemies):
    enemy = enemies[Index]
    if enemy:
        if hero.isReady("bash"):
            hero.bash(enemy)
            hero.moveXY(40, 33)
        if items:
            hero.moveXY(items[Index].pos.x, items[Index].pos.y)
        else:
            hero.say("The skill is not ready!!")
            hero.moveXY(40, 33)
        Index += 1
    hero.moveXY(40, 33)

捡闪亮东西的人

一定要注意换行后的空行!!!!

# 很快的获取最多的金币

while True:
    coins = hero.findItems()
    coinIndex = 0
    
    # 把这个封装进循环里枚举所有的硬币
    while coinIndex < len(coins):
        coin = coins[coinIndex]
    # 金币价值3点。
        if coin and coin.value == 3:
        # 只捡金币。
            coin = coins[coinIndex]
            hero.moveXY(coin.pos.x, coin.pos.y)
        coinIndex += 1

强壮的沙牦牛

# 当牦牛靠近时,向右移动10米来躲避。
# 躲避4头牦牛来通过此关。

while True:
    # 获取英雄当前位置的x和y坐标。
    x = hero.pos.x
    y = hero.pos.y
    
    # 找到最近的耗牛。
    yak = hero.findNearestEnemy()
    
    # 如果到牦牛的距离小于10:
    if hero.distanceTo(yak) < 10:
        # 向右移动,在英雄位置的x坐标值基础上加10。
        x = hero.pos.x + 10
        y = hero.pos.y
        # 使用moveXY(x, y)来移动!
        hero.moveXY(x, y)
    

沙丘

# 收集硬币,忽略"sand-yak"和"burl"。
while True:
    enemy = hero.findNearestEnemy()
    item = hero.findNearestItem()
    if enemy:
        if enemy.type == "sand-yak" or enemy.type == "burl":
            # 别攻击!赶紧收集硬币。
            if item:
                hero.moveXY(item.pos.x, item.pos.y)
        else:
            # 否则,攻击。
            hero.attack(enemy)
        
    elif item:
        # 收集硬币:移动到物品的位置。
        hero.moveXY(item.pos.x, item.pos.y)
    else:
        hero.moveXY(41, 31)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值