冰猎人
# 追捕4只牦牛。 只选择小的。
# 小牦牛名称包含一个"bos"子字符串。
# 这个函数检查一个单词是否包含一个子字符串。
def isSubstring(word, substring):
# 我们通过迭代开始索引。
rightEdge = len(word) - len(substring)
# 循环访问单词的索引。
for i in range(rightEdge + 1):
# 对于它们中的每一个循环通过子字符串
for j in range(len(substring)):
# 为单词的索引使用偏移量。
shiftedIndex = i + j
# 如果字母不一样:
if word[shiftedIndex] != substring[j]:
# 检查Word中的下一个开始索引。
break
# 如果它是子字符串中的最后一个字母:
if j == len(substring) - 1:
# 然后子字符串在单词中。
return True
# 我们还没有找到这个词的子字符串。
return False
# 循环通过所有敌人。
spyLetter = "bos"
enemies = hero.findEnemies()
for e in range(len(enemies)):
enemy = enemies[e]
# 使用函数isSubstring来检查
# 37/5000 如果敌方名称(id)包含“"bos":
enemyName = enemy.id
while isSubstring(enemyName, spyLetter) and enemy.health >= 0:
# 然后打败它。
hero.attack(enemyName)
雾岛矿
# 明智地指挥农民,有效地收集黄金!
# 农民们应该收集硬币并建造诱饵。
# 函数应该返回每个目标的最佳项
# 使用ID的数组来确保,没有两个农民以同一项目作为目标。
def findBestItem(friend, excludedItems):
items = friend.findItems()
bestItem = None
bestItemValue = 0
for item in items:
# 使用in来检查元素是否位于excludedItems数组中。
# 在这种情况下,跳过这个项目,因为它已经是另一个农民的目标。
if item in excludedItems:
continue
# 完成函数!
# 记住,bestItemValue应该是最高的item.value / distanceTo
distance = friend.distanceTo(item)
if item.value/ distance > bestItemValue:
bestItemValue = item.value / distance
bestItem = item
return bestItem
# 这个函数检查你是否有用于诱饵的足够黄金。
def enoughGoldForDecoy():
return hero.gold >= 25
while True:
peasants = hero.findByType("peasant")
# 在每个循环中创建一个新数组。
claimedItems = []
for peasant in peasants:
enemy = peasant.findNearestEnemy()
if enemy:
# 如果农民是敌人的目标
# “且”英雄有足够的黄金用于诱饵
if enemy.target == peasant and hero.gold > 25:
# 命令一个农民来建造"decoy":
hero.command(peasant, "buildXY", "decoy", peasant.pos.x -2, peasant.pos.y)
# 添加一个continue,这样农民在建造时就不会收集硬币。
continue
pass
item = findBestItem(peasant, claimedItems)
if item:
# 项目已经名花有主后,将它放入claimedItems数组中。
claimedItems.append(item)
# 命令农民收集硬币:
hero.command(peasant, "move", item.pos)
不安的休战
# 对于南方多出的每个食人魔,你都需要对应招募一名士兵。
# 不要把北方的食人魔算入!
# 接受作战单位组成的数组作为参数。
# 只返回英雄南方的单位。
def findSouthernUnits(units):
southernUnits = []
for unit in units:
if unit.pos.y < hero.pos.y:
# 将单位添加到数组中: append()
southernUnits.append(unit)
return southernUnits
while True:
friends = hero.findFriends()
enemies = hero.findEnemies()
# 使用findSouthernUnits来获得南方敌人数量。
enemy = findSouthernUnits(enemies)
# 如果南方食人魔数量比友军数量多。
if len(enemy) > len(friends):
# 然后招募另一个"soldier"。
hero.summon("soldier")
以我的名义
# 你必须出发去找到宝藏.
# 这个函数应该返回一个字母的索引:
def letterIndex(word, letter):
# 把每一个字母作为单词的索引。
for i in range(len(word)):
# 用当前索引存储单词中的字符。
character = word[i]
# 如果是必填字母:
if character == letter:
# 然后返回当前索引(数字)。
return i
# 如果没有,返回默认值
return -1
ogreLetter = "z"
shaman = hero.findByType("thoktar")[0]
# 到索引并用它来寻找宝藏。
chestIndex = letterIndex(shaman.id, ogreLetter)
hero.moveXY(16 + chestIndex * 8, 36)
讨厌的牦牛
# 好多牦牛!
# 想要存活,你需要筛选出牦牛…
def removeByType(enemies, excludedType):
tempList = []
# 遍历每一个敌人,检查其类型是不是excludedtype。
for enemy in enemies:
# 如果它不是,把它'append'到列表。
if enemy.type != excludedType:
tempList.append(enemy)
pass
return tempList
while True:
# 找出敌人!
enemies = hero.findEnemies()
# 清除那些讨厌的“牦牛”。
enemies = removeByType(enemies, "sand-yak")
enemy = hero.findNearest(enemies)
if enemy:
# 现在...'remove'(清除)那些敌人。
hero.attack(enemy)