Sei sulla pagina 1di 90

Introducción a las Ciencias de la computación

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

Level Overview and Solutions


Toma la gema y escapa del calabozo, pero no toques nada más. En este nivel aprenderás los movimientos básicos de tu héroe.

Intro

¡Guia a tu héroe escribiendo un programa!


Escribe el código en el editor a la derecha, y tu héroe va a seguir tus instrucciones.

Mueve tu héroe por el corredor sin tocar las paredes.

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

Dado que tu eres el heroe, puedes referirte al heroe con:

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!

Calabozos de Kithgard Solución


# Muévete hacia la gema.
# ¡No toques las paredes!
# Escribe tu código abajo.

hero.moveRight()
hero.moveDown()
hero.moveRight()
#2. Gemas en lo profundo.

Level Overview and Solutions


Rápidamente recolecta las gemas; las necesitarás.

Intro

Recuerde cómo moverse, es importante:


self.moveRight()

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

se refieren a ti, el heroe.

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.

Por ejemplo, puedes mover dos veces así:


hero.moveUp(2)

Gemas en lo profundo. Solución


# Toma todas las gemas usando tus comandos de movimiento.
hero.moveRight()
hero.moveDown()
hero.moveUp()
hero.moveUp()
hero.moveRight()
#3. Guardia de la sombra

Level Overview and Solutions


Evade al ogro para coger las gemas y llegar al otro lado a salvo. ¡Cuidado con los pinchos!

Intro

Cúbrete para evitar ser visto.


Código predeterminado
# Mantente fuera de la vista del ogro. Recolecta las gemas.
hero.moveRight()

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.

Guardia de la sombra Solución


# Mantente fuera de la vista del ogro. Recolecta las gemas.
hero.moveRight()
hero.moveUp()
hero.moveRight()
hero.moveDown()
hero.moveRight()
#3a. Sentido Antikorario

Level Overview and Solutions


Mantene fuera de la vista de la ronda Orgo.

Intro

Avoid the Munchkins by picking your path carefully!

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.

Sentido Antikorario Solución


# Evita los ogros y recoge la gema.

hero.moveDown(2)
hero.moveRight()
hero.moveUp()
hero.moveRight()
#3b. Pasadizos de Kithgard

Level Overview and Solutions


Dos pasillos, una solución. El tiempo es esencial.

Intro

Time your movement carefully to avoid the patrol!

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?

Pasadizos de Kithgard Solución


# Evita ser visto por los ogros.
hero.moveRight()
hero.moveLeft()
hero.moveRight(2)
#Concept Challenge. Careful Steps

Level Overview and Solutions


Intro
This is a CONCEPT challenge.

It's time to check your knowledge of basic commands.

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

Sorry, no hints here :-(

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!

Careful Steps Solución


# This is a CONCEPT challenge about basic syntax.
# Collect all gems and return to the exit (the red X).
# Avoid the spikes.
hero.moveUp()
hero.moveRight()
hero.moveDown()
hero.moveRight()
hero.moveLeft()
hero.moveDown()
hero.moveUp()
hero.moveUp()
hero.moveLeft()
hero.moveDown()
hero.moveLeft()
hero.moveLeft()
#4. Mina Enemiga

Level Overview and Solutions


Avanza cauteloso, ¡el peligro está por doquier!

Intro

Puedes usar argumentos para optimizat tu codigo. En vez de:


hero.moveRight()
hero.moveRight()

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.

Mina Enemiga Solución


# Usa parámetros con declaraciones de movimiento para moverte más lejos.
hero.moveRight(3)
hero.moveUp()
hero.moveRight()
hero.moveDown(3)
hero.moveRight(2)
#4a. Interrupción Ilusoria

Level Overview and Solutions


Distrae a los guardias, después escapa.

Intro

Step on the Red X to launch the decoy.

Move to the gem and escape!

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.

Pisando la X activarás el señuelo.

Consejo: Puedes moverte varios espacios pasando parámetros al comando move, por ejemplo moveRight(3) .

Interrupción Ilusoria Solución


# Usa el señuelo para distraer a los guardias pisando la X.
hero.moveRight()
hero.moveDown(2)
hero.moveUp(2)
hero.moveRight(3)
#4b. Joyero Olvidadizo

Level Overview and Solutions


¡Existen gemas dispersas en todos los calabozos de Kithgard!

Intro

Collect the gems by using your move commands!


hero.moveRight()
hero.moveDown()

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!

Joyero Olvidadizo Solución


# Recolecta las gemas y ve a la salida.
hero.moveRight()
hero.moveDown()
hero.moveRight(2)
hero.moveUp()
hero.moveRight()
#Concept Challenge. Long Steps

Level Overview and Solutions


Intro
This is a CONCEPT Challenge about arguments.

Collect all the gems and escape from the dungeon (the red arrow marks the exit).

Use no more than 7 commands.

You will need to use arguments with your movement commands!

Código predeterminado

¡Próximamente!

Vista global

¡Próximamente!

Long Steps Solución


# <%= challenge %>
# <%= grab_gems_and_escape %>
# <%= limit7 %>
# <%= use_arg %>
hero.moveRight(1)
hero.moveUp(3)
hero.moveRight(2)
hero.moveDown(3)
hero.moveLeft(1)
hero.moveUp(2)
hero.moveRight(3)
#5. Nombres Verdaderos

Level Overview and Solutions


Conoce el verdadero nombre de los enemigos para vencerlos.

Intro

Asegurate de atacar a cada ogro dos veces.

¡Las mayúsculas y las minúsculas importan!


Código predeterminado
# ¡Defiendete de Brak y Treg!
# Necesitas atacar a los pequeños ogros dos veces.
hero.moveRight()
hero.attack("Brak")
hero.attack("Brak")

Vista global

Tene en mente algunas cosas para superar este nivel:

1. Necesitas atacar a cada ogro dos veces para derrotarlo.


2. Escribe el nombre apropiadamente, ¡con mayúscula donde corresponda! "Brak" y "Treg" .
3. Pon los nombres entre comillas para marcarlos como cadenas. Cadenas son un tipo de dato de programación. Representa
un texto.
4. Después de que mates a "Brak" y "Treg" , muevete a la derecha para recolectar la gema.
5. No es un problema si mueres; siempre puedes volver a intentarlo.

Nombres Verdaderos Solución


# ¡Defiendete de Brak y Treg!
# Necesitas atacar a los pequeños ogros dos veces.
hero.moveRight()
hero.attack("Brak")
hero.attack("Brak")
hero.moveRight()
hero.attack("Treg")
hero.attack("Treg")
#5a. Ventajas a tu Favor

Level Overview and Solutions


Dos ogros bloquean tu camino fuera del calabozo.

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".

Si compras una espada poderosa, podrías matar a ogros en solo un ataque.

Ventajas a tu Favor Solución


# Ataca ambos ogros y toma la gema.
hero.moveRight()
hero.attack("Krug")
hero.attack("Krug")
hero.moveRight()
hero.moveUp()
hero.attack("Grump")
hero.attack("Grump")
hero.moveLeft()
hero.moveLeft()
#5b. La Espada en Alto

Level Overview and Solutions


Aprende a equiparte para el combate.

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.

La Espada en Alto Solución


Complete Solution Partial Solution 1
# Vence a los ogros.
# Recuerda que cada uno necesita dos golpes.
hero.attack("Rig")
hero.attack("Rig")
hero.attack("Gurt")
hero.attack("Gurt")
hero.attack("Ack")
hero.attack("Ack")
#Concept Challenge. Dangerous Steps

Level Overview and Solutions


Intro

This is a Concept Challenge: use strings to defeat ogres by name.

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!

Dangerous Steps Solución


# Defeat the ogres using their names.
hero.moveRight();
# Defeat the first pair of ogres.
hero.attack("Sog");
hero.attack("Sog");
hero.attack("Gos");
hero.attack("Gos");
hero.moveRight(2);
# Defeat the second pair of ogres.
hero.attack("Kro");
hero.attack("Kro");
hero.attack("Ergo");
hero.attack("Ergo");
#Combo Challenge. Sleep Hour

Level Overview and Solutions


Intro

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

If you can, complete ALL the goals.

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

Don't walk over the piles of rubble!


Sleep Hour Solución

Complete Solution Partial Solution 1 Partial Solution 2

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

Level Overview and Solutions


¡Estás atrapado en una prisión con un mago famoso! Di la contraseña para conseguir su ayuda.

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!

Los comentarios de la celda Solución


hero.say("¿Qué es la contraseña?")
# Usa la función "say()" para decir la contraseña.
# La contraseña es: "Achoo"
hero.say("Achoo")
hero.moveUp()
hero.moveUp()
#7. Bibliotecario de Kithgard

Level Overview and Solutions


¡Busca ayuda de un Bibliotecario amable!

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

Bienvenidos al guía de Ayuda!


La mayoría de los niveles tienen guias que contienen información adicional para ayudarte en completar tus objectivos y
aprender nuevos conceptos.

Como esto:

La contraseña para la puerta de la biblioteca es "Hush" .

Consejo: El comando say te permite decir la contraseña!

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!

Bibliotecario de Kithgard Solución


# ¡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("Hush")
hero.moveRight()
#8. El prisionero

Level Overview and Solutions


Libera al prisionero y ganarás un aliado.

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.

Dependiendo de tu arma y tu estrategia, podrías atacar al ogro más de una vez.

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

Level Overview and Solutions


Ahorra al escribir (y rescata a tu heroe) con bucles!

Intro

Esquiva las bolas de fuego por bailar derecha y izquierda.


Usa un bucle 'while-true' para repetir para siempre así:

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.

Como usar los bucles 'while-true'


Primero, empezamos un bucle con la palabra clave while . Esto indica al programa mientras algo sea verdad, repite el bloque
del bucle.

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.

Así es como se escribe un bucle 'while-true':


# Empieza el bucle while-true con "while True:"
# Cualquier comando bajo el comando 'while' que tiene sangria (empieza con 4 espacios) se considera DENTRO del
    bucle.
while True:
hero.moveRight()
hero.moveLeft()
hero.say("¡Esa línea no está dentro del bucle!")

Consejo: ¡Puedes poner lo que quieres dentro un bucle while-true! ¡Pero por este nivel, sólo necesitamos repetir dos comandos:
moveRight() y moveLeft() !

Baile de Fuego Solución


# 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í
hero.moveLeft()
#10. Laberinto encantado

Level Overview and Solutions


Un laberinto construido para confundir a los viajeros.

Intro

Double check your indentation!

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.

Normalmente solo querrás tener un bucle en tu programa.

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.

Laberinto encantado Solución


# Los bucles son la mejor manera de hacer algo repetitivo.
while True:
# Añadir comandos aquí para repetirlos.
hero.moveRight()
hero.moveRight()
hero.moveUp()
hero.moveUp()
#11. Descendiendo mas allá

Level Overview and Solutions


Utiliza un bucle para navegar mas eficientemente.

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.

Descendiendo mas allá Solución


# Navega por el laberinto en menos de 4 líneas de código
while True:
hero.moveRight(2)
hero.moveDown()
#11a. Riddling Kithmaze

Level Overview and Solutions


Intro

¡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.

Riddling Kithmaze Solución


# Loops son la mejor forma de hacer cosas repetitivamente
while True:
# Añade sentencias aquí para ser repetidas.
hero.moveRight()
hero.moveDown()
hero.moveRight(2)
hero.moveUp()
#11b. Aura Radiante

Level Overview and Solutions


Esqueletos. ¿Temibles o temerosos?

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!

Todo lo que necesita hacer es:

Coge una Piedra de Luz


Mover más allá de un esqueleto
Repetir
Aura Radiante Solución
# Recoge una gema luminosa para ahuyentar a los esqueletos brevemente.
while True:
hero.moveUp()
hero.moveDown()
hero.moveRight(2)
#Concept Challenge. Loop Warehouse

Level Overview and Solutions


Intro

This is a Concept Challenge:

Find a looping pattern to move through the warehouse, collect all gems, and exit at the white X mark.

Use no more than 5 statements.

Código predeterminado
# Collect all gems and escape at the white X mark.
# Use no more than 5 statements.

Vista global

¡Próximamente!

Loop Warehouse Solución


# Collect all gems and escape at the white X mark.
# Use no more than 5 statements.
while True:
hero.moveUp(2)
hero.moveRight(2)
hero.moveDown()
hero.moveLeft()
#12. La puerta del terror

Level Overview and Solutions


Detrás de una puerta de terror se encuentra un cofre lleno de riquezas

Intro

You can use while-true loops with any method like:

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")

You can attack the door by its name, which is "Door" .

With looping and attacking, you can do this level in just two lines of code.

La puerta del terror Solución


# Romper la puerta
# Tomará muchos éxitos, asique utiliza un bucle
while True:
hero.attack("Door")
#13. Hack and Dash

Level Overview and Solutions


Intro

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!

# Return back back into the main hallway.


while True:
# Move 3 times.
hero.moveRight(3)
Vista global

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!

Hack and Dash Solución


# You can write code before a loop.
hero.moveRight()
# Break open the "Chest" before using the loop to escape the maze!
hero.moveUp()
hero.attack("Chest")
# Return back back into the main hallway.
hero.moveDown()
while True:
# Move 3 times.
hero.moveRight(3)
# Move 3 times more.
hero.moveDown(3)
#14. Las Alacenas de Kithgard

Level Overview and Solutions


¿Quién sabe que horrores acechan en Las Alacenas de Kithgard?

Intro

Puedes ejecutar cualquier accion antes del while-true bucle .

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.

Las Alacenas de Kithgard Solución


# ¡Puede que haya algo por ahí para ayudarte!
# Primero, acércate a la Alacena.
hero.moveUp()
hero.moveRight(2)
hero.moveDown(2)
# Luego, ataca la Alacena dentro de un bucle 'while-true'.
while True:
hero.attack("Cupboard")
#14a. Cupboards of Kithgard A

Level Overview and Solutions


Intro

Puedes ejecutar cualquier accion antes del while-true loop .

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.

Cupboards of Kithgard A Solución


# Puede que haya algo por ahi para ayudarte
# Primero, acércate al Armario.
hero.moveDown()
hero.moveLeft(2)
hero.moveUp(2)
# Luego, ataca el Armario dentro de un bucle.
while True:
hero.attack("Cupboard")
#14b. Cupboards of Kithgard B

Level Overview and Solutions


Intro

Puedes ejecutar cualquier accion antes del while-true loop .

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.

Cupboards of Kithgard B Solución


# Puede que haya algo por ahi para ayudarte

# Primero, acércate al Armario.


hero.moveRight()
hero.moveDown()
hero.moveRight()
hero.moveDown(2)

# Luego, ataca el Armario dentro de un bucle.


while True:
hero.attack("Cupboard")
#15. Enemigo Conocido

Level Overview and Solutions


Usa tu primera variable para lograr la victoria.

Intro

Declara las variables así:

enemy1 = "Kratt"

Cuando utilizas comillas: "Kratt" , estas haciendo una string.


Cuando no utilizas comillas: enemy1 , estas haciendo referencia a la variable enemy1 .

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

Hasta ahora has estado haciendo tres cosas:

1. Llamar methods (comandos como moveRight() )


2. Pasar strings (partes de texto entre comillas "Treg") como argumentos para los metodos o funciones
3. Usar while-true loops para repetir tus metodos eternamente.

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" ).

Declara las variables así:


enemy1 = "Kratt"

Cuando utilizas comillas: "Kratt" , estas haciendo una string.

Cuando no utilizas comillas: enemy1 , estas haciendo referencia a la variable enemy1 .

Enemigo Conocido Solución


# Puedes utilizar una variable como una etiqueta de nombre.

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

Level Overview and Solutions


Usa tus nuevos poderes de programación para identificar enemigos sin nombre.

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.

Use findNearestEnemy() para seleccionar el enemigo más cercano.

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 .

Maestro de Nombres Solución


# <%= unknown_names %>
# <%= glasses_ability %>
# <%= enemy1 %>
enemy1 = hero.findNearestEnemy()
# <%= enemy1_attack %>
hero.attack(enemy1)
hero.attack(enemy1)
# <%= enemy2 %>
enemy2 = hero.findNearestEnemy()
hero.attack(enemy2)
hero.attack(enemy2)
# <%= enemy3 %>
enemy3 = hero.findNearestEnemy()
# <%= enemy3_attack %>
hero.attack(enemy3)
hero.attack(enemy3)
#16a. Humilde Kithmen

Level Overview and Solutions


Usa tus las gafas para buscar y atacar a los Kithmen.

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.

Humilde Kithmen Solución


# ¡Crear una segunda variable y ataca!
enemy1 = hero.findNearestEnemy()
hero.attack(enemy1)
hero.attack(enemy1)
enemy1 = hero.findNearestEnemy()
hero.attack(enemy1)
hero.attack(enemy1)
hero.moveDown()
hero.moveRight()
hero.moveRight()
#16b. Acortando Distancia

Level Overview and Solutions


Algunos enemigos requeriran del uso de diferentes tacticas de batalla

Intro

¡Próximamente!

Código predeterminado
hero.moveRight()

# deberias reconocer esto del nivel anterior.


enemy1 = hero.findNearestEnemy()
# Ahora ataca al enemigo1 'enemy1'.

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.

Acortando Distancia Solución


hero.moveRight()

# deberias reconocer esto del nivel anterior.


enemy1 = hero.findNearestEnemy()
# Ahora ataca al enemigo1 'enemy1'.

hero.attack(enemy1)
hero.attack(enemy1)

hero.moveRight()
enemy1 = hero.findNearestEnemy()
hero.attack(enemy1)

hero.moveRight(2)
#Concept Challenge. Master Of Names Debug

Level Overview and Solutions


Intro

This is a Concept Challange about variables.

This is a special DEBUGGING level.

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 .

Master Of Names Debug Solución


# 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)
enemy3 = hero.findNearestEnemy()
hero.attack(enemy3)
hero.attack(enemy3)
#17. El Laberinto Final

Level Overview and Solutions


Para escapar necesitar encontrar tu camino a través de un antiguo laberinto de Kithman

Intro

Segúrate de llamar findNearestEnemy() sólo cuando el enemigo esté en tu línea de visión.


Código predeterminado
# Usa un solo bucle while-true para moverte y atacar

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.

Asegúrate de llamar a findNearestEnemy() cuando veas un ogro a simple vista.

El Laberinto Final Solución


# Usa un solo bucle while-true para moverte y atacar

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

Level Overview and Solutions


Intro

This is a COMBO challenge!

You need to defeat the ogres using at least one of the programming skills you've learned so far:

Variables
While Loops
Arguments

If you can, complete ALL the goals!

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.

# Move to the treasure room and defeat all the ogres.


hero.moveUp(4)
hero.moveRight(4)
hero.moveDown(3)
hero.moveLeft(2)
while True:
enemy = hero.findNearestEnemy()
hero.attack(enemy)
hero.attack(enemy)
#18. Puertas de Kithgard

Level Overview and Solutions


Escapa del calabozo de Kithgard y no dejes que los guardianes te atrapen.

Intro

buildXY("fence", x, y) te permite construir una muralla en cierto lugar, como esto:

hero.buildXY("fence", 40, 20)


Mueve el ratón sobre el mapa para encontrar dónde quieres colocar la muralla, y reemplaza los argumentos x y y de
buildXY con esos números.

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.

buildXY("fence", x, y) te permite construir una muralla en cierto lugar, como esto:

hero.buildXY("fence", 40, 20)


Este nivel es mas fácil de superar con murallas "fence" que con trampas explosivas "fire-trap" . Es casi imposible usar
trampas de fuego para derrotar a los ogros. Si quiere intentarlo, esta bien, pero nos tomó quince minutos entenderlo, y
construimos este nivel.

Solo tienes que construir tres murallas para detener a los ogros y escapar dela mazmorra por la derecha.

Puertas de Kithgard Solución


# Construye 3 murallas para mantener a raya a los ogros!

hero.moveDown()
hero.buildXY("fence", 36, 34)
hero.buildXY("fence", 36, 30)
hero.buildXY("fence", 36, 26)
hero.moveRight(3)
#19. Wakka Maul

Level Overview and Solutions


Intro

Walk over gems to collect them.

say() unit names to summon them.

attack() doors to break out your friends.

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:

# If on the human side:


hero.say("soldier") # To summon a soldier for 20 gold.
hero.say("archer") # To summon an archer for 25 gold.
# If on the ogre side:
hero.say("scout") # To summon a scout for 18 gold.
hero.say("thrower") # To summon 2 throwers for 9 gold each.
Wakka Maul Solución
# 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:
#this.attack("g")
# If you have enough gold, you can call out for help by saying the type of unit you would like to summon!
#this.say("soldier") to summon a Soldier at the cost of 20 gold!
#this.say("archer") to summon an Archer at the cost of 25 gold!

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")

Potrebbero piacerti anche