# Recruit soldiers and archers to fill out each squadron.
# Each paladin has a decimal number stored in her deployment attribute.
# Convert these to binary and represent them with lines of soldiers and archers next to each paladin.
# Soldiers are 0s, archers are 1s.
# For the bonus goal, add griffins as 2s for trinary number lines next to the warlocks.
# Check the guide for help with binary numbers.
def binary(number):
string = ""
if number > 128:
number = number - 128
string = string +"1"
else:
string = string +"0"
if number > 64:
number = number - 64
string = string +"1"
else:
string = string + "0"
if number > 32:
number = number - 32
string = string + "1"
else:
string = string + "0"
if number > 16:
number = number - 16
string = string + "1"
else:
string = string + "0"
if number > 8:
number = number - 8
string = string + "1"
else:
string = string + "0"
if number > 4:
number = number - 4
string = string + "1"
else:
string = string + "0"
if number > 2:
number = number - 2
string = string + "1"
else:
string = string + "0"
if number > 1:
number = number - 1
string = string + "1"
else:
string = string + "0"
return string
while True:
paladins = hero.findByType("paladin")
for i in range(len(paladins)):
paladin = paladins[i]
number = paladin.deployment
binaryNum = binary(number+1)
for j in range(len(binaryNum)):
n = binaryNum[j]
sol = hero.findByType("soldier")
arc = hero.findByType("archer")
nearestSol = hero.findNearest(sol)
nearestArc = hero.findNearest(arc)
if n == "0":
hero.summon("soldier")
hero.command(nearestSol, "move", {'x':14+2*j, 'y':58-7*i})
elif n == "1":
hero.summon("archer")
hero.command(nearestArc, "move", {'x':14+2*j,'y':58-7*i})
I get the error hero placeholder needs something to command.
A unit only exists after it is summoned. At the moment, you’re finding nearestSolbefore summoning the soldier, so of course it can’t be assigned to the newly summoned soldier. The same is true with archers.
One option is to move hero.findNearest(hero.findByType(...))) after the summon command. Another is to instead reference the latest unit by finding the last unit in hero.built.
I tried it, but it doesn’t work. I still get the same error message
Code:
# Recruit soldiers and archers to fill out each squadron.
# Each paladin has a decimal number stored in her deployment attribute.
# Convert these to binary and represent them with lines of soldiers and archers next to each paladin.
# Soldiers are 0s, archers are 1s.
# For the bonus goal, add griffins as 2s for trinary number lines next to the warlocks.
# Check the guide for help with binary numbers.
def binary(number):
string = ""
if number > 128:
number = number - 128
string = string +"1"
else:
string = string +"0"
if number > 64:
number = number - 64
string = string +"1"
else:
string = string + "0"
if number > 32:
number = number - 32
string = string + "1"
else:
string = string + "0"
if number > 16:
number = number - 16
string = string + "1"
else:
string = string + "0"
if number > 8:
number = number - 8
string = string + "1"
else:
string = string + "0"
if number > 4:
number = number - 4
string = string + "1"
else:
string = string + "0"
if number > 2:
number = number - 2
string = string + "1"
else:
string = string + "0"
if number > 1:
number = number - 1
string = string + "1"
else:
string = string + "0"
return string
while True:
paladins = hero.findByType("paladin")
for i in range(len(paladins)):
paladin = paladins[i]
number = paladin.deployment
binaryNum = binary(number+1)
for j in range(len(binaryNum)):
n = binaryNum[j]
sol = hero.findByType("soldier")
arc = hero.findByType("archer")
if n == "0":
hero.summon("soldier")
nearestSol = hero.findNearest(sol)
hero.command(nearestSol, "move", {'x':14+2*j, 'y':58-7*i})
elif n == "1":
hero.summon("archer")
nearestArc = hero.findNearest(arc)
hero.command(nearestArc, "move", {'x':14+2*j,'y':58-7*i})
# Recruit soldiers and archers to fill out each squadron.
# Each paladin has a decimal number stored in her deployment attribute.
# Convert these to binary and represent them with lines of soldiers and archers next to each paladin.
# Soldiers are 0s, archers are 1s.
# For the bonus goal, add griffins as 2s for trinary number lines next to the warlocks.
# Check the guide for help with binary numbers.
def binary(number):
string = ""
if number > 128:
number = number - 128
string = string +"1"
else:
string = string +"0"
if number > 64:
number = number - 64
string = string +"1"
else:
string = string + "0"
if number > 32:
number = number - 32
string = string + "1"
else:
string = string + "0"
if number > 16:
number = number - 16
string = string + "1"
else:
string = string + "0"
if number > 8:
number = number - 8
string = string + "1"
else:
string = string + "0"
if number > 4:
number = number - 4
string = string + "1"
else:
string = string + "0"
if number > 2:
number = number - 2
string = string + "1"
else:
string = string + "0"
if number > 1:
number = number - 1
string = string + "1"
else:
string = string + "0"
return string
while True:
paladins = hero.findByType("paladin")
for i in range(len(paladins)):
paladin = paladins[i]
number = paladin.deployment
binaryNum = binary(number+1)
for j in range(len(binaryNum)):
n = binaryNum[j]
sol = hero.findByType("soldier")
arc = hero.findByType("archer")
if n == "0":
hero.summon("soldier")
nearestSol = hero.findNearest(sol)
if nearestSol:
hero.command(nearestSol, "move", {'x':14+8*j, 'y':58-8*i})
elif n == "1":
hero.summon("archer")
nearestArc = hero.findNearest(arc)
if nearestArc:
hero.command(nearestArc, "move", {'x':14+8*j,'y':58-8*i})
but it still doesn’t work. There is no error message but some troops
get to the wrong spot
I changed the code but the same thing happens.
Code:
# Each paladin has a decimal number stored in her deployment attribute.
# Convert these to binary and represent them with lines of soldiers and archers next to each paladin.
# Soldiers are 0s, archers are 1s.
# For the bonus goal, add griffins as 2s for trinary number lines next to the warlocks.
# Check the guide for help with binary numbers.
def binary(number):
string = ""
if number > 128:
number = number - 128
string = string +"1"
else:
string = string +"0"
if number > 64:
number = number - 64
string = string +"1"
else:
string = string + "0"
if number > 32:
number = number - 32
string = string + "1"
else:
string = string + "0"
if number > 16:
number = number - 16
string = string + "1"
else:
string = string + "0"
if number > 8:
number = number - 8
string = string + "1"
else:
string = string + "0"
if number > 4:
number = number - 4
string = string + "1"
else:
string = string + "0"
if number > 2:
number = number - 2
string = string + "1"
else:
string = string + "0"
if number > 1:
number = number - 1
string = string + "1"
else:
string = string + "0"
return string
paladins = hero.findByType("paladin")
for i in range(5):
paladin = paladins[i]
number = paladin.deployment
binaryNum = binary(number+1)
for j in range(8):
n = binaryNum[j]
if n == "0":
hero.summon("soldier")
sol = hero.findByType("soldier")
nearestSol = hero.findNearest(sol)
if nearestSol:
hero.command(nearestSol, "move", {'x':14+8*j, 'y':58-8*i})
elif n == "1":
hero.summon("archer")
arc = hero.findByType("archer")
nearestArc = hero.findNearest(arc)
if nearestArc:
hero.command(nearestArc, "move", {'x':14+8*j,'y':58-8*i})