Programar Juegos Arcade
con Python y Pygame

Lab 7: Aventura

7.1 Descripción de un Juego de Aventuras

fig.adventure

Uno de los primeros juegos a los que me enfrenté, fue uno de aventuras con texto llamado Colossal Cave Adventure. Puedes jugarlo online aquí. Así tendrás una idea de cómo son los juegos de aventuras basados en texto. Podría decirse que el más famoso de este género es la serie Zork.

El primer “gran” programa que creé era un juego de aventuras basado en texto. Es fácil empezar una aventura este tipo. También es una buena forma de practicar el uso de listas. Nuestro juego para este taller consistirá en una lista de habitaciones que pueden ser visitadas viajando hacia el norte, este, sur u oeste. Cada habitación será una lista que contendrá la descripción de la misma, y luego, qué habitaciones hay en cada dirección. Mira debajo un ejemplo:

7.2 Muestra

Te encuentras en la polvorienta habitación de un castillo.
Los pasadizos llevan hacia el norte y el sur.
¿Hacia dónde quieres ir? n

Te encuentras en la armería.
Hay una habitación hacia el sur.
¿Hacia dónde quieres ir? s

Te encuentras en la polvorienta habitación de un castillo.
Los pasadizos llevan hacia el norte y el sur.
¿Hacia dónde quieres ir? s

Te encuentras en un pasillo alumbrado por antorchas.
Tienes habitaciones hacia el este y oeste.
¿Hacia dónde quieres ir? e

Estás un dormitorio. Hay una ventana que da sobre el patio del castillo.
Tienes un pasillo hacia el oeste.
¿Hacia dónde quieres ir? o

Te encuentras en un pasillo alumbrado por antorchas.
Tienes habitaciones hacia el este y oeste.
¿Hacia dónde quieres ir? o

Estás en la cocina. Parece que están cocinando un asado para la cena.
Tienes un pasillo hacia el este.
¿Hacia dónde quieres ir? o

¿No puedes ir en esa dirección.
Estás en la cocina. Parece que están haciendo un asado para la cena.
Tienes un pasillo hacia el este.
¿Hacia dónde quieres ir?

7.3 Creamos La Mazmorra

Antes de empezar, imagínate el tipo de mazmorra que quisieras crear. Podría parecerse a algo como esto:

fig.adventure1

Luego, numera todas las habitaciones empezando desde cero.

fig.adventure2

Usa este boceto para visualizar cómo se conectan todas las habitaciones. Por ejemplo, la habitación 0 conecta con la 3 por el norte, con la 1 por el este y con ninguna hacia el sur y el oeste.

7.4 Instrucciones Paso a Paso

  1. Crea un array vacío llamado lista_habitaciones.
  2. Crea una variable llamada habitacion. Iguálala a un array con cinco elementos. Para el primer elemento, crea una cadena de texto con la descripción de tu primera habitación. Los restantes cuatro elementos contendrán el número de la habitación siguiente si el usuario elige ir al norte, este, sur u oeste. Mira tu boceto para saber qué números usar. Utiliza None para indicar que no existe una habitación con la que conectar en esa dirección. (No pongas None entre comillas. Es un valor especial que representa, justamente, ningún valor.)
  3. Añade esta habitación a la lista de habitaciones.
  4. Repite los dos primeros pasos para cada una de las habitaciones que vayas a crearte. Tan solo reutiliza la variable habitacion.
  5. Crea una variable llamada habitacion_actual. Establécela a cero.
  6. Imprime la variable lista_habitaciones. Ejecuta el programa. Deberías ver una lista bastante larga de cada habitación de tu aventura. (Si estás usando un IDE como Wing, no dejes que la línea se desplace por completo hacia la derecha.)
  7. Ajusta tu declaración print para que solo imprima la primera habitación (el elemento cero) de la lista. Ejecuta el programa y confirma que obtienes una salida similar a esta:
    ['Estás en una habitación. Existe un pasadizo hacia el norte.', 1, None, None, None]
    
  8. Imprime la habitación donde se encuentra actualmente el jugador con habitacion_actual y lista_habitaciones. Ya que tu primera habitación era la cero, el resultado debería ser el mismo que el anterior.
  9. Cambia la declaración de print para que solo imprima la descripción de la habitación, y no de las habitaciones conectadas a ella. Recuerda que si estás imprimiendo una lista dentro de otra, el índice va después del primer índice. No hagas esto: [habitacion_actual[0]], haz esto otro [habitacion_actual][0]
    Ya estás en una habitación. Existe un pasadizo hacia el norte.
    
  10. Crea una variable llamada hecho y establécela como False. Luego, pon la declaración de impresión para la habitación dentro de un bucle while que se repita hasta que hecho sea igual a True.
  11. Añade el código para imprimir una línea en blanco antes de imprimir la descripción. Esto ayudará a separar visualmente cada giro mientras estemos jugando.
  12. Luego de imprimir la descripción de la habitación, añade una línea que le pregunte al usuario hacia que dirección quiere ir.
  13. Añade una declaración if para saber si el usuario quiere ir hacia el norte.
  14. Si el usuario quiere ir al norte, crea una variable llamada siguiente_habitacion e iguálala a lista_habitaciones[habitacion_actual][1], lo que equivale al número de la habitación que está hacia el norte.
  15. Añade otra declaración if para ver si la siguiente habitación es igual a None. Si es así, imprime “No puedes ir en esa dirección.” En caso contrario, establece habitacion_actual igual a siguiente_habitacion.
  16. Prueba el programa. ¿Puedes ir al norte hacia una nueva habitación?
  17. Añade declaraciones elif para gestionar el este, sur y oeste. Añade una declaración else, de forma que la usuaria sepa que el programa no ha entendido lo que ha escrito.
  18. Sería una buena idea añadir líneas en blanco entre el código que gestiona cada dirección. No me refiero a imprimir líneas en blanco, sino de dejar líneas en blanco en el código. Esto te ayudará a agrupar visualmente el código por secciones.
  19. También sería buena idea añadir comentarios a cada sección.
  20. Prueba el programa. Asegúrate de añadir las pistas necesarias para que alguien que esté jugando sepa hacia donde ir. No pongas "Estás en la cocina.", en lugar de eso, quedarái mejor "Estás en la cocina. Hay una puerta hacia el norte"
  21. Opcional: Añade una comando para salir. Asegúrate de que el programa funciona para rumbos en mayúscula y/o minúsculas. El programa debe funcionar, tanto si el jugador escribe “norte”, como “n”.

Dedícale algo de tiempo a tu programa para que se vea interesante. No crees solamente una “Habitación al Este” y otra “Habitación al Oeste.” ¡Eso sería muy aburrido!

Dedícale también un tiempo a revisar posibles errores gramaticales u ortográficos. Sin la ayuda de un procesador de texto, es importante ser cuidadoso.

Utiliza \n para añadir un retorno de carro a tus descripciones, de manera que no se impriman todas en una sola línea. No pongas espacios alrededor del \n, si no serán imprimidos.

Lo que me gusta de este programa es lo fácil que es expandirlo hasta convertirlo en un juego completo. Usar las ocho direcciones cardinales (incluyendo “Noroeste”), junto a “arriba” y “abajo”, es bastante fácil. Gestionar un inventario de los objetos que pueden existir dentro de la habitación, que pueden recogerse o tirarse, es solo cuestión de mantener una serie de listas.

La expansión de este programa a uno completo, es una de las dos opciones que tienes para el taller final del curso.


You are not logged in. Log in here and track your progress.