Hi,all
Through 2 days of time, constant adjustment and optimization, and finally through the clearance, the following code for your reference!
===========================================================
def commandSoldier(soldier, soldierIndex, numSoldiers):
angle = Math.PI * 2 * soldierIndex / numSoldiers
defendPos = {"x": 41, "y": 40}
defendPos.x += 8 * Math.cos(angle)
defendPos.y += 8 * Math.sin(angle)
hero.command(soldier, "defend", defendPos);
if soldier.health <=soldier.maxHealth/2:
defendPos = {"x": 38, "y": 39}
hero.command(soldier, "move", defendPos)
hero.command(soldier, "defend", defendPos)
def findStrongestTarget():
hero.buildXY(“archer”, hero .pos.x-2, hero .pos.y)
mostHealth = 0
bestTarget = None
enemies = hero.findEnemies()
# # i = 0
# # i < len(enemies)
# # enemy = enemies[i]
for enemy in enemies:
if enemy.health > mostHealth:
mostHealth = enemy.health
# bestTarget = enemies[i]
bestTarget = enemy
# hero.say(bestTarget)
# i = 0
# i < len(enemies)
# i += 1
# enemy = enemies[i]
# for enemy in enemies:
# if enemy.health > mostHealth:
# bestTarget = enemy
# mostHealth = enemy.health
# bestTarget = enemies[i]
# hero.say(bestTarget)
if bestTarget and bestTarget.health >0:
return bestTarget
else:
return None
def commandArcher(archer):
nearest = archer.findNearestEnemy()
if archerTarget:
hero.say(archerTarget)
hero.command(archer, "attack", archerTarget)
elif nearest:
hero.command(archer, "attack", nearest)
if archer.health < archer.maxHealth/3:
defendPos = {"x": 40, "y": 40}
hero.command(archer, "move", defendPos)
hero.command(archer, "defend", defendPos)
def commandArcher(archer):
nearest = archer.findNearestEnemy()
archers = archer.findByType(“archer”)
# hero.say(“message”)
for archer in archers:
if archerTarget:
hero.command(archer, “attack”, archerTarget)
elif nearest:
hero.command(archer, “attack”, nearest)
archerTarget = None
loop:
if not archerTarget or archerTarget.health <= 0:
archerTarget = findStrongestTarget()
friends = hero.findFriends()
soldiers = hero.findByType("soldier")
archers = hero.findByType("archer")
for i, soldier in enumerate(soldiers):
commandSoldier(soldier, i, len(soldiers));
for j, archer in enumerate(archers):
commandSoldier(archer,j,len(archers))
commandArcher(archer)
# hero.buildXY("decoy", hero .pos.x-1, hero .pos.y+2)
# hero.buildXY("archer", hero .pos.x-2, hero .pos.y)
# hero.buildXY("decoy", hero .pos.x-1, hero .pos.y+2)
# hero.buildXY("decoy", hero .pos.x-1, hero .pos.y-2)