Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Python
Aprenda sintaxis básica, bucles mientras y el entorno CodeCombat.
Tabla de contenidos
1. Calabozos de Kithgard
2. Gemas en lo profundo.
3. Guardia de la sombra
3a. Sentido Antikorario
3b. Pasadizos de Kithgard
Concept Challenge. Careful Steps
4. Mina Enemiga
4a. Interrupción Ilusoria
4b. Joyero Olvidadizo
Concept Challenge. Long Steps
5. Nombres Verdaderos
5a. Ventajas a tu Favor
5b. La Espada en Alto
Concept Challenge. Dangerous Steps
Combo Challenge. Sleep Hour
6. Los comentarios de la celda
7. Bibliotecario de Kithgard
8. El prisionero
9. Baile de Fuego
10. Laberinto encantado
11. Descendiendo mas allá
11a. Riddling Kithmaze
11b. Aura Radiante
Concept Challenge. Loop Warehouse
12. La puerta del terror
13. Hack and Dash
14. Las Alacenas de Kithgard
14a. Cupboards of Kithgard A
14b. Cupboards of Kithgard B
15. Enemigo Conocido
16. Maestro de Nombres
16a. Humilde Kithmen
16b. Acortando Distancia
Concept Challenge. Master Of Names Debug
17. El Laberinto Final
Combo Challenge. Safe Place
18. Puertas de Kithgard
19. Wakka Maul
#1. Calabozos de Kithgard
Intro
Código predeterminado
# Muévete hacia la gema.
# ¡No toques las paredes!
# Escribe tu código abajo.
hero.moveRight()
Vista global
¡Empecemos! Si nuestro héroe (tú) no se mueve, tendremos un problema. Para escapar del calabozo, es necesario moverse.
Así que aprendamos a movernos
hero
Esto significa que cada vez que escribas esta palabra clave dentro del editor de código, te estas refiriendo a tí, el heroe del
juego.
Ahora que sabes como referirte a tí mismo en el juego, puedes darle instrucciones a tu heroe así:
hero.moveDown()
hero.moveRight()
Para completar este nivel: mueve a la derecha, abajo y a la derecha nuevamente para tomar la gema!
Solo necesitas tres líneas de código para vencer este nivel.
El código que escribes aquí es muy similar al código que escribirías para decir a la computadora como hacer todo tipo de cosas,
desde reproducir música a mostrar una página web. ¡Estás dando tus primeros pasos para convertirte en programador!
hero.moveRight()
hero.moveDown()
hero.moveRight()
#2. Gemas en lo profundo.
Intro
Código predeterminado
# Toma todas las gemas usando tus comandos de movimiento.
hero.moveRight()
Vista global
¿Puedes recordar la lección del último nivel? Esto será lo mismo, pero necesitarás moverte más. Recuerda,
hero
Cuando te mueves, sólo puedes ir hasta el siguiente cuadrado (mira por las pequeñas marcas en el suelo), por lo tanto
necesitarás hacer moveUp dos veces seguidos para llegar a lo alto del nivel desde el fondo.
O puedes ingresar un número como parámetro al comando de movimiento, para indicarle a tu héroe que se mueva más de un
espacio a la vez.
Intro
Vista global
Todo esto es acerca de las habilidades de sigilo. Todavía no tienes un arma, por lo que no puedes luchar contra el Ogro
munchkin que hace guardia en el camino.
En lugar de eso, intenta moverte por detras de la estatua para que no pueda verte. Entonces podras recolectar las gemas sin
ser detectado.
Intro
Código predeterminado
# Evita los ogros y recoge la gema.
Vista global
A veces todo depende de sincronización. Toma la gema, pero mueve de la misma manera de la ronda Orgo, para que no te
vean.
Puedes arrastrar la línea del tiempo para ver que paso la última vez ejecutaste tu código.
hero.moveDown(2)
hero.moveRight()
hero.moveUp()
hero.moveRight()
#3b. Pasadizos de Kithgard
Intro
Código predeterminado
# Evita ser visto por los ogros.
Vista global
Tal vez aún no tienes las habilidades wait o attack , así que tendrás que usar tu ingenio para resolver el puzzle. ¿Cómo te
puedes mover de forma que no cruzes el pasadizo al mismo tiempo que los ogros enanos?
Collect all the gems and return to the exit, which is marked with the red X mark.
Código predeterminado
# This is a CONCEPT challenge about basic syntax.
# Collect all gems and return to the exit (the red X).
# Avoid the spikes.
Vista global
This is where you use what you've learned in the previous levels.
If you have problems with this task, go back and review the past few levels to make sure you understand them!
Intro
Puedes usar:
hero.moveRight(2)
Código predeterminado
# Usa parámetros con declaraciones de movimiento para moverte más lejos.
hero.moveRight(3)
Vista global
El suelo está plagado de minas, pero hay un camino seguro hasta la gema.
Cuando llamas a una funcion cómo moveRight() a veces puedes darle información extra para cambiar lo que hace. Esta
información se conoce como "argumentos" o "parámetros".
Puedes darle un parámetro a moveRight() tal que así: moveRight(3) . Esto le dice a moveRight() que mueva a tu héroe 3
espacios a la derecha en vez de 1.
Intro
Código predeterminado
# Usa el señuelo para distraer a los guardias pisando la X.
Vista global
No podrás escabullirte de los guardias a menos que esten distraídos. Afortunadamente, alguien dejó un señuelo cerca.
Consejo: Puedes moverte varios espacios pasando parámetros al comando move, por ejemplo moveRight(3) .
Intro
Código predeterminado
# Recolecta las gemas y ve a la salida.
Vista global
Este nivel requiere varios comandos, asegurate de usar la funcion autocompletar para escribir tu código mas rapido. Puedes
escribir R, Enter para autocompletar un comando moveRight.
Después de que hayas practicado los movimiento simples con este nivel, ¡será tiempo de aprender a atacar!
Collect all the gems and escape from the dungeon (the red arrow marks the exit).
Código predeterminado
¡Próximamente!
Vista global
¡Próximamente!
Intro
Vista global
Intro
¡Próximamente!
Código predeterminado
# Ataca ambos ogros y toma la gema.
hero.moveRight()
hero.attack("Krug")
hero.attack("Krug")
Vista global
Recuerde a atacar ogros dos veces, y escribir su nombre con mayúscula en comillas: "Krug" y "Grump".
Intro
Ataca a cada ogro por nombre. ¡Recuerda, cada ogro necesita dos golpes!
Código predeterminado
# Vence a los ogros.
# Recuerda que cada uno necesita dos golpes.
Vista global
¡Asegurate de tener suficiente armadura para ganar esta batalla! Deberías comprar el Tarnished Bronze Breastplate en la
tienda.
Recuerda, cada ogro requiere dos golpes para matarlo. Intenta matarlos en el orden que vienen hacia tí asi no lanzaran golpes
extras.
Código predeterminado
# Defeat the ogres using their names.
hero.moveRight();
# Defeat the first pair of ogres.
hero.moveRight(2);
# Defeat the second pair of ogres.
Vista global
¡Próximamente!
This is a COMBO challenge level! Complete the level goals and at least one of the concept goals using the programming skills
you've learned so far:
Basic Commands
Movement Arguments
Strings
Código predeterminado
# This is a COMBO challenge level.
# Defeat ogres, collect gems, and escape to the red X
# using strings and movement arguments!
Vista global
This solution uses all concepts: basic syntax, movement arguments, and strings.
# This is a COMBO challenge level.
# Defeat ogres, collect gems, and escape to the red X
# using strings and movement arguments!
hero.moveRight(2)
hero.attack("Ursa")
hero.attack("Ursa")
hero.moveDown()
hero.moveLeft(2)
hero.moveUp(2)
hero.attack("Rexxar")
hero.attack("Rexxar")
hero.moveRight()
hero.attack("Brack")
hero.attack("Brack")
hero.moveRight(2)
#6. Los comentarios de la celda
Intro
Los comentarios son una herramienta para que un programador pueda explicarle a otro su código.
¡En CodeCombat, los comentarios son pistas útiles sobre cómo escribir y cómo estructurar tu codigo!
# En Python los comentarios empiezan con una #. ¡Léelos para obtener instrucciones!
` lua -- En Lua los comentarios empiezan con --. ¡Léelos para obtener instrucciones!
Código predeterminado
hero.say("¿Qué es la contraseña?")
# Usa la función "say()" para decir la contraseña.
# La contraseña es: "Achoo"
Vista global
Comentarios
Los comentarios son una herramienta para que dos programadores puedan comunicarse entre sí. Son también útiles para un
único programador para recordar qué estaban haciendo para continuar más tarde.
En CodeCombat, añadimos comentarios para ayudarte a estructurar tu código y te damos pistas importantes. Léelas para
entender el objetivo y qué código necesitas escribir para alcanzarlo.
En este nivel necesitas leer los comentarios que te proporcionamos para hallar la respuesta, ¡y escapar de la prisión!
Intro
La mayoría de los niveles tienen sugerencias que pueden ayudarte cuando estás atascado.
Haga clic en Siguiente para desplazarse por todas las sugerencias para un nivel.
Para este nivel, haz clic en 'Siguiente' para encontrar la contraseña de la puerta de la biblioteca.
Código predeterminado
# ¡Necesitas una contraseña para abrir la puerta de la biblioteca!
# ¡La contraseña está en la guía de Ayuda!
# Hace click sobre el botón "Ayuda" azul abajo del editor de código para abrir la guía de Ayuda del nivel.
# La mayoría de los niveles tienen una guía de Ayuda con información adicional. ¡Si te encuentras sin saber que
hacer, no olvides de hacer click sobre Ayuda!
hero.moveRight()
hero.say("¡No sé la contraseña!") # ∆
Vista global
Como esto:
Consejo: Recuerda usar comillas con la contraseña para que sea una cadena, y usa mayúsculas donde corresponde.
Miembros registrados de CodeCombat también consiguen acceso a videos explicativos en la guía para la mayoría de los
niveles.
¡Asegurate mirar la Ayuda en futuros nivels si te encuentras sin saber que hacer!
Intro
¡Próximamente!
Código predeterminado
¡Próximamente!
Vista global
Tu puedes atacar a la "Puerta Débil" para liberar a tu aliado, luego ayúdalo a pelear con el ogro "Dos".
Cuando tú atacas algo por su nombre, asegurate de incluir la comilla dobles al inicio y al final del nombre (así se especifica un
campo de texto String) y asegurate de capitalizar los nombres correctamente.
El prisionero Solución
# <%= goals %>
# <%= free_prisoner %>
hero.moveRight()
hero.attack("Weak Door");
# <%= kill_guard %>
hero.moveRight(2)
hero.moveDown(2)
hero.attack("Two")
hero.attack("Two")
hero.attack("Two")
hero.attack("Two")
hero.attack("Two")
hero.attack("Two")
# <%= get_gem %>
hero.moveRight()
hero.moveDown()
#9. Baile de Fuego
Intro
while True:
hero.moveLeft() # Va a ejecutar uno y otra vez.
Código predeterminado
# Normalmente el código se ejecuta en el orden que está escrito.
# Bucles repeten un bloque de código varios veces.
# Usa la tecla tab o 4 espacios para agregar sangria a las líneas de movimiento bajo el bucle.
while True:
hero.moveRight()
# Agrega un comando 'moveLeft' al bucle aquí
Vista global
Normalmente el código ejecuta en el orden que está escrito. Bucles te permiten repetir un bloque de código varios veces sin
tener que escribirlo de nuevo.
Por ahora queremos que nuestros bucles siguen para siempre, entonces vamos a usar un bucle 'while-true'. Porque 'true'
significa verdad (en inglés).
No se preocupen tanto por esto de verdad por ahora. Vamos a explicarlo más después. Sólo recuerda que un bucle 'while-true'
es un bucle que nunca termina.
Consejo: ¡Puedes poner lo que quieres dentro un bucle while-true! ¡Pero por este nivel, sólo necesitamos repetir dos comandos:
moveRight() y moveLeft() !
Intro
You only need one while-true loop containing four commands in this level.
Código predeterminado
# Los bucles son la mejor manera de hacer algo repetitivo.
while True:
# Añadir comandos aquí para repetirlos.
hero.moveRight()
hero.moveRight()
Vista global
Los Bucles "loops" permiten repetir el mismo código una y otra vez. Puedes hacer este nivel con tan solo 5 comandos en un
bucle.
Consejo: el pasillo necesita dos movimientos a la derecha, y luego dos movimientos hacia arriba. A partir de ahí, simplemente
deja que el bucle se repita para hacer el resto.
Asegúrate de que tus comandos de movimiento están dentro del bucle ¡para que se repitan! En Python y en CoffeeScript hazlo
con la sangría: todo lo que hay después de la palabra clave 'loop', en el mismo nivel de la sangría, forma parte del bucle. En
otros lenguajes, hay símbolos explícitos de inicio y fin para señalar el bucle.
Coloca el cursor sobre la documentación del "loop" si necesitas ayuda con la sintaxis.
Intro
¡Próximamente!
Código predeterminado
# Navega por el laberinto en menos de 4 líneas de código
Vista global
Para conseguir el bonus, usa un bucle para resolver este nivel en solo cuatro líneas de código. (Las líneas vacías y los
comentarios no cuentan, mientras que las instrucciones múltiples en la misma línea sí cuentan).
Coloca el cursor sobre la descripción del bucle en la parte inferior derecha para ver ejemplos de sintaxis de bucle.
¡Próximamente!
Código predeterminado
# Loops son la mejor forma de hacer cosas repetitivamente
while True:
# Añade sentencias aquí para ser repetidas.
hero.moveRight()
hero.moveDown()
Vista global
Count carefully how many movements you need inside your loop to solve the maze, and where you need to repeat your loop.
Remember, you should only use one loop per level, and make sure all your code is inside the loop.
Hover over the loop documentation to see an example of the loop syntax.
Intro
¡Próximamente!
Código predeterminado
# Recoge una gema luminosa para ahuyentar a los esqueletos brevemente.
Vista global
Los esqueletos son demasiado fuertes para pelear contra ellos. Las gemas luminosas los mantendrán alejados de ti, ¡pero por
poco tiempo!
Find a looping pattern to move through the warehouse, collect all gems, and exit at the white X mark.
Código predeterminado
# Collect all gems and escape at the white X mark.
# Use no more than 5 statements.
Vista global
¡Próximamente!
Intro
while True:
hero.moveRight()
hero.attack("Brak")
Código predeterminado
# Romper la puerta
# Tomará muchos éxitos, asique utiliza un bucle
Vista global
You can combine while-true loops and attack to easily destroy things that take more than one hit. Like this door.
while True:
hero.attack("Door")
With looping and attacking, you can do this level in just two lines of code.
There's danger in the air! You need to escape from the dungeon, but why not check that "Chest" before you go? Use
attack() it to open the "Chest" , then use a while-loop to escape.
Código predeterminado
# You can write code before a loop.
hero.moveRight()
# Break open the "Chest" before using the loop to escape the maze!
You're not fast enough to outrun the Sprite without drinking the Speed Potion.
Before the while-loop, you'll want to moveUp() and attack the "Chest" , then moveDown() back into the main hallway.
Inside the while-loop, you need to add moveDown() . Use an argument to moveDown() multiple times wthout having write more
lines of code.
Don't worry, the Sprite is activated by stepping on the X, so you'll have time to grab the potion!
Intro
hero.moveUp()
while True:
hero.attack("Brak")
Código predeterminado
# ¡Puede que haya algo por ahí para ayudarte!
# Primero, acércate a la Alacena.
# Luego, ataca la Alacena dentro de un bucle 'while-true'.
Vista global
Los guardias ogro pueden ser demasiado para tí. Tal vez encuentres algo útil en el "Cupboard"
Primero, acércate al "Cupboard" . Parece cerrado, así que tendrás que atacarlo repetidamente usando un while-true blucle
para romperlo.
hero.moveUp()
while True:
hero.attack("Brak")
Código predeterminado
# Puede que haya algo por ahi para ayudarte
# Primero, acércate al Armario.
# Luego, ataca el Armario dentro de un bucle.
Vista global
Los guardias ogro pueden ser demasiado para tí. Tal vez encuentres algo útil en el "Cupboard"
Primero, acércate al "Cupboard" . Parece cerrado, así que tendrás que atacar repetidamente usando un while-true loop para
abrirlo.
hero.moveUp()
while True:
hero.attack("Brak")
Código predeterminado
# Puede que haya algo por ahi para ayudarte
# Primero, acércate al Armario.
Los guardias ogro pueden ser demasiado para tí. Tal vez encuentres algo útil en el "Cupboard"
Primero, acércate al "Cupboard" . Parece cerrado, así que tendrás que atacar repetidamente usando un while-true loop para
abrirlo.
Intro
enemy1 = "Kratt"
Código predeterminado
# Puedes utilizar una variable como una etiqueta de nombre.
enemy1 = "Kratt"
enemy2 = "Gert"
enemy3 = "Ursa"
hero.attack(enemy1)
hero.attack(enemy1)
hero.attack(enemy2)
Vista global
Ahora vas a aprender a usar variables: simbolos que representan datos. El valor de la variable puede vary cuando almacenas
datos en el, por eso se llama variable.
Es una lata escribir los nombres de los ogros varias veces, asi que en esete nivel utilizarás tres variables para almacenar los
nombres de los ogros. Despues vas a atacar, ùedes usar la variable ( enemy1 ) para representar el texto que esta almacenado
en él ( "Kratt" ).
enemy1 = "Kratt"
enemy2 = "Gert"
enemy3 = "Ursa"
hero.attack(enemy1)
hero.attack(enemy1)
hero.attack(enemy2)
hero.attack(enemy2)
hero.attack(enemy3)
hero.attack(enemy3)
#16. Maestro de Nombres
Intro
Las variables contienen información a la que se hará referencia posteriormente. Puedes asignar un nuevo valor a una variable
en cualquier momento que desee.
closestEnemy = hero.findNearestEnemy()
Código predeterminado
¡Próximamente!
Vista global
Recuerda el útlimo nivel, las variables son símbolos que representan datos. El valor de la variable puede variar a medida que
introduces nuevos datos en ella, que es por lo que se le llama variable.
Ahora en vez de usar los nombres de los enemigos, puedes usar tus gafas y la función findNearestEnemy para almacenar
referencias a los ogros en variables. No necesitas usar sus nombres.
Cuando llames a la funcion findNearestEnemy , debes guardar el resultado de la variable, por ejemplo enemy3 (puedes
llamarla como quieras). La variable recordará cual era el enemigo más cercano cuando llamaste a findNearestEnemy , así que
asegurate de llamarla cuando veas a un enemigo cercano.
Recuerda: cuando usas comillas, por ejemplo "Kratt" , estas haciendo una cadena. Cuando no, por ejemplo enemy1 , te estas
refiriendo a la variable enemy1 .
Intro
¡Próximamente!
Código predeterminado
# ¡Crear una segunda variable y ataca!
enemy1 = hero.findNearestEnemy()
hero.attack(enemy1)
hero.attack(enemy1)
Vista global
Como no sabes el nombre de estos ogros, puedes usar el método findNearestEnemy desde tus gafas para almacenar las
referencias de los ogros en variables.
Cuando llamas al método findNearestEnemy , tu debes almacenar el resultado en una variable, como enemy2 (puedes
nombrarla como quieras). La variable te recordará quien era el enemigo más próximo cuando llamaste a findNearestEnemy ,
así que asegúrate de llamarlo cuando veas un enemigo cercano.
Recuerda: cuando usas comillas, como "Krat" , estás haciendo una cadena. Cuando no usas comillas como en enemy1 , te
estás refieriendo a una variable.
Intro
¡Próximamente!
Código predeterminado
hero.moveRight()
Vista global
Como en el nivel anterior, puedes usar el metodo findNearestEnemy de tus lentes para guardar referencias a los Ogros en
variables.
Cuando llamas al metodo findNearestEnemy , necesitas guardar el resultado en una variable, como enemigo2 (puedes
llamarla como quieras). La variable recordara cualfue el enemigo cercano cuando llamaste el metodo findNearestEnemy , asi
que asegurate de llamarlo cuando veas cerca a un enemigo.
Recuerda: cuando usas el metodo findNearestEnemy , necesitas estar en la vista del enemigo, o no seras capas de verla.
Este nivel te introduce un nuevo tipo de Ogro, el Ogro lanzador, quien hace un daño mucho mayor que los Ogros enanos con
los que has estado luchando. Hay muchos mas tipos de Ogros esperandote en mundos futuros.
hero.attack(enemy1)
hero.attack(enemy1)
hero.moveRight()
enemy1 = hero.findNearestEnemy()
hero.attack(enemy1)
hero.moveRight(2)
#Concept Challenge. Master Of Names Debug
The code for the level is given to you, but it contains one or more errors.
Your job is to figure out what the error is, and fix it!
Código predeterminado
# There is a mistake in the code below.
# Try to figure out what it is, then fix it!
enemy1 = hero.findNearestEnemy()
hero.attack(enemy1)
hero.attack(enemy1)
enemy2 = hero.findNearestEnemy()
hero.attack(enemy2)
hero.attack(enemy2)
enemy = hero.findNearestEnemy()
hero.attack(enemy3)
hero.attack(enemy3)
Vista global
Recuerda el útlimo nivel, las variables son símbolos que representan datos. El valor de la variable puede variar a medida que
introduces nuevos datos en ella, que es por lo que se le llama variable.
Ahora en vez de usar los nombres de los enemigos, puedes usar tus gafas y la función findNearestEnemy para almacenar
referencias a los ogros en variables. No necesitas usar sus nombres.
Cuando llames a la funcion findNearestEnemy , debes guardar el resultado de la variable, por ejemplo enemy3 (puedes
llamarla como quieras). La variable recordará cual era el enemigo más cercano cuando llamaste a findNearestEnemy , así que
asegurate de llamarla cuando veas a un enemigo cercano.
Recuerda: cuando usas comillas, por ejemplo "Kratt" , estas haciendo una cadena. Cuando no, por ejemplo enemy1 , te estas
refiriendo a la variable enemy1 .
Intro
while True:
pass
Vista global
Este nivel combina while-true loops y variables para resolver el laberinto y atacar enemigos.
Ahora veras que necesitas variables porqué de hecho variarás los datos en la variable. Dentro del bucle while-true si defines la
variable enemy , se referirá a cada uno de los tres ogros del nivel cuando se repita el bucle. Genial,¿no?
Pon atención donde se debe repetir el bucle while-true para que no te vayas más lejos de lo que necesitas.
while True:
hero.moveRight()
hero.moveUp()
enemy = hero.findNearestEnemy()
hero.attack(enemy)
hero.attack(enemy)
hero.moveRight()
hero.moveDown(2)
hero.moveUp()
#Combo Challenge. Safe Place
You need to defeat the ogres using at least one of the programming skills you've learned so far:
Variables
While Loops
Arguments
Código predeterminado
# Move to the treasure room and defeat all the ogres.
Vista global
¡Próximamente!
Safe Place Solución
Complete Solution Partial Solution 1 Partial Solution 2 Partial Solution 3
This solution uses all concepts: arguments, while loops, and variables.
Intro
Código predeterminado
# Construye 3 murallas para mantener a raya a los ogros!
hero.moveDown()
hero.buildXY("fence", 36, 34)
Vista global
Cuando se utiliza el martillo de constructor, en lugar del método attack , se obtiene el método buildXY . buildXY toma tres
argumentos, en lugar de uno: buildType , x y y . Para que pueda decidir qué construir y dónde construirlo.
buildType : o bien la cadena "fence" , para construir murallas, o la cadena "fire-trap" , para construir trampas
explosivas.
x : la posición horizontal en la que se construye. Se puede colocar el cursor sobre el mapa para encontrar las
coordenadas.
y : la posición vertical en la que se construye. x y y son en metros.
Solo tienes que construir tres murallas para detener a los ogros y escapar dela mazmorra por la derecha.
hero.moveDown()
hero.buildXY("fence", 36, 34)
hero.buildXY("fence", 36, 30)
hero.buildXY("fence", 36, 26)
hero.moveRight(3)
#19. Wakka Maul
Código predeterminado
# Welcome to Wakka Maul! Prepare for combat!
# Venture through the maze and pick up gems to fund your warchest.
# Break down doors to unleash allies (or enemies).
# For example, to attack the door labeled "g" use:
#hero.attack("g")
# If you have enough gold, you can call out for help by saying the type of unit you would like to summon!
#hero.say("soldier") to summon a Soldier at the cost of 20 gold!
#hero.say("archer") to summon an Archer at the cost of 25 gold!
hero.moveDown()
hero.moveRight()
hero.attack("g")
hero.say("soldier")
Vista global
Wakka Maul
Battle your friends, coworkers and classmates in this all out brawl through the Kithgard dungeons!
Break out allies, summon more units, and evade the enemy's advances!
The doors are labelled "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" . Use these strings to attack the specific door you
want!
The human side can summon soldier and archer while the ogre side can summon scout and thrower . All either side
needs to do is to say the unit name, and have enough gems, to summon the units. To summon units you'll want to say their
name:
hero.moveDown()
hero.moveRight()
hero.attack("g")
hero.moveRight(4)
hero.moveUp()
hero.attack("h")
hero.attack("i")
hero.moveUp(2)
while True:
hero.say("archer")