Programar Juegos Arcade
con Python y PygameLab 16: Taller Final
Tienes dos opciones para el taller final. Un “videojuego” o una “aventura textual.”
16.1 Opción Videojuego
¡Llegó el momento! Esta es tu oportunidad para usar tu creatividad y mostrar realmente que puedes desarrollar tu propio videojuego. Se trata de algo más que de pasar un examen, ahora puedes realmente crear algo real.
El taller final se divide en tres partes. Cada parte establece qué debe ser capaz de hacer tu juego.
37.1.1 Requisitos para la 1ª Parte:
- Abrir una ventana.
- Establecer los objetos que serán dibujados en la pantalla.
- Proveer algún tipo de movimiento básico a través del ratón, teclado o mando de juegos.
Pistas:
- Si tu programa consiste en cosas que se chocan o encuentran entre sí, empieza por utilizar sprites. No empieces usando comandos de dibujo a los que luego le vayas a añadir sprites. No funcionará y tendrás que volver a empezar desde el principio, lo cual sería bastante triste.
- Si estás escribiendo un programa como el buscaminas o conecta cuatro, no uses sprites. Como no precisamos detección de colisiones, no hay necesidad de complicar las cosas usando sprites.
- Debajo de “Ejemplos completos de juegos”, tengo dos programas que te enseñarán cómo crear juegos del tipo pong o breakout. No vayas a usarlos como tu 1ª Parte; vas a tener que escribir mucho más código para puntuar realmente.
- En OpenGameArt.org encontrarás un montón de imágenes y sonidos gratuitos, libres de royalties.
- También Kenney.nl tiene muchas imágenes y sonidos.
37.1.2 Requisitos para la 2ª Parte:
Para esta parte del taller final, tu juego debería ser ya bastante funcional. Cualquier persona debería ser capaz de sentarse delante de él y jugar unos cuantos minutos y sentir que está delante de un juego real. Aquí tienes algunas cosas que muy probablemente quieras añadir:
- Capacidad de colisionar con objetos.
- Los jugadores pueden perder si algo malo ocurre.
- La puntuación debe aparecer en pantalla.
- Algunos efectos de sonido iniciales.
- La posibilidad de movimiento de otros caracteres en la pantalla.
- La habilidad de hacer click sobre minas o casillas vacías.
37.1.3 Requisitos para la 3ª Parte:
Para la parte final, vamos a pulir tu juego. Aquí tienes algunas cosas que muy probablemente quieras añadir:
- Múltiples niveles
- Sonidos
- Múltiples “vidas”
- Título e instrucciones en pantalla
- Música de fondo
- Misiles guiados por calor
- Puertas ocultas
- Posibilidad de “barrido” en el buscaminas o la posibilidad de colocar “marcas”
16.2 Opción Aventura Textual
¿No estás interesado en un videojuego? Continúa con el trabajo del juego “¡Aventura!”.
37.2.1 Requisitos para la 1ª Parte:
- En lugar de que cada habitación sea una lista de [descripción, norte, este, sur, oeste], crea una
clase Habitacion. La clase debería tener un constructor que tomara la
(descripción, norte, este, sur y oeste), y estableciera los campos para la descripción y para todas
las direcciones. Haz que el programa trabaje con esta nueva clase. El programa debería ser capaz de
añadir habitaciones de esta forma:
habitacion = Habitacion("Estás en la cocina. Hay una puerta hacia el Este.", None, 1, None, None) lista_habitaciones.append(habitacion) habitacion = Habitacion("Estás en el salón. Hay una puerta hacia el Oeste.", None, None, 0, None) lista_habitaciones.append(habitacion)
Luego, el programa debería ser capaz de referirse a los campos de la habitación de esta manera:habitacion_actual = lista_habitaciones[habitacion_actual].norte
- Expande el juego de manera que una persona pueda viajar hacia arriba y hacia abajo, y también, hacia el noroeste, suroeste, noreste y sureste.
- Añade una lista de items a tu juego.
- Crea una clase llamada Item.
- Añádele campos para el número de habitación del item, una descripción extensa, y un nombre corto. El nombre corto debería constar de una sola palabra larga. De esta forma, el usuario puede escribir obtener llave y el ordenador sabrá a qué objeto se está refiriendo. La descripción será lo que se imprimirá por pantalla. Algo así como Tienes allí una llave oxidada.
- Crea una lista de items, de la misma forma que creaste la lista de habitaciones.
- Si el item se encuentra en la habitación del usuario, imprime su descripción.
- Pruébalo y asegúrate de que funciona.
37.2.2 Requisitos para la 2ª Parte:
- Cambiemos las opciones de procesamiento, en lugar de que el jugador solo escriba rumbos, vamos a
permitirle ahora que tenga otras opciones. Por ejemplo, añadimos la habilidad escribir coger llave,
inventario o varita.
- Para conseguir esto, no le preguntes al jugador ¿Hacia dónde quieres ir? En su lugar, pregúntale algo como ¿Cuál es tu comando?
- Divide la entrada introducida por el usario. Necesitamos una variable que sea igual a la primera palabra introducida,
tal como coger y otra variable igual a la segunda palabra, tal como llave.
- Utiliza el método split perteneciente a las cadenas de texto (strings) de Python.
Por ejemplo:
palabras_comando = comando_usuario.split(" ")
Esto dividirá lo que introduzca el usuario dentro de una lista. Cada item separado por espacios. - En lugar de lo que tenías antes, actualiza el código que procesa los rumbos escritos por el jugador para comprobar palabras_comando[0]
- Utiliza el método split perteneciente a las cadenas de texto (strings) de Python.
Por ejemplo:
- Añade un comando coger.
- Añade una comprobación a tu comando coger en tu cadena if/elif que ahora procesa rumbos.
- Busca en la lista de items hasta que encuentres el objeto que coincide con lo que el jugador trata de recoger.
- Si el objeto no se encuentra o si no está en la habitación actual, imprime error.
- Si el objeto es encontrado y está en la habitación actual, establece el número de habitación del objeto en -1.
- Añade un comando para “inventario” que imprima cada objeto cuyo número de habitación sea igual a -1.
- Añade la capacidad de soltar un objeto.
- Añade la capacidad de usar objetos. Por ejemplo “utilizar llave” o “empuñar espada” o “alimentar oso.”
37.2.3 Requisitos para la 3ª Parte:
Expande el juego para que haga más cosas. Por ejemplo:
- Crear un archivo con formatos que te permita cargar las habitaciones y los objetos desde un archivo en lugar de tener que escribir el código para ellos.
- Que tenga monstruos con puntos por golpes.
- Divide el código en múltiples archivos para una mejor organización.
- Quita las variables globales usando una función main, tal como se muestra al final del capítulo sobre funciones.
- Que los objetos tengan un uso limitado. Como que un arco tenga un determinado número de flechas.
- Que las criaturas tengan una fortaleza limitada y que las armas creen lesiones aleatorias. Que la oportunidad de provocar daño sea también aleatoria.
You are not logged in. Log in here and track your progress.
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin