10. Modelación de un Videojuego.
BALLOON ATTACK


El planeta está siendo invadido por extraños
extraterrestres en forma de globos, y ningún arma
existente en este planeta puede matarlos, excepto la tuya,
por ello debes derrotar a los malvados invasores, y que
ninguno de ellos aterrice en La Tierra.
BALOON FIGHT



Debemos identificar cada objeto del mundo y crear una
clase para ellos.
A simple vista las clases que interfieren en el videojuego
son:
◦ Globo
◦ Bala
◦ Protagonista
Además de una clase WorldManager que será la encargada
del ciclo del videojuego.


Debemos identificar las acciones principales de cada
objeto y crear un método para cada una de esas acciones.
Además cada clase tendrá un método FrameGame(), que se
encargará de la lógica del objeto en un determinado frame.


Debemos identificar los atributos de cada objeto del
videojuego, además del tipo de dato de cada atributo, y si
ésta es constante o variable.
Finalmente, debemos identificar los parámetros que
aceptará el constructor para inicializar todas sus variables.
Definición Clase Globo
Definición Clase Jugador
Definición Clase Jugador
Definición Clase Bala



El manejo de estado se realiza para los estados del
videojuego mismo (pause, menú, loop principal) y estados
de cada uno de los personajes del videojuego, tanto de IA
en enemigos como de movimientos en el protagonista.
Los estados se manejan con enumeraciones: Enum.
En este caso sólo el personaje tiene estados, y estos son
para determinar el tipo de movimiento.
Estados del Jugador


Cada movimiento debe estar en la enumeración:
El estado actual debe estar guardado en una variable
global:
Estados del Jugador


Cuando el usuario desee mover al jugador se asignará a éste:
Si el usuario detiene al jugador, éste se detendrá según la
tecla soltada:



Debemos identificar el input del usuario y asignarlo a cada
acción del personaje o a acciones que pueda realizar éste
en el mundo.
En este caso debemos asignar las teclas del teclado a las
acciones del personaje.
Mover el personaje o disparar al presionar una tecla y
detener al personaje si se suelta la tecla.



Mover (detener) a la izquierda:
◦ Tecla A y LEFT.
Mover (detener) a la derecha:
◦ Tecla D y RIGHT.
Disparar:
◦ Tecla SPACE.
Input: Evento al presionar una tecla
Input: Evento al soltar una tecla



Muchos objetos pueden tener distintos “tipos” que los
representen.
Por ejemplo de una clase enemigo pueden hacerse varios
tipos de éste, con distintos atributos y comportamientos.
En este caso habrá 2 tipos de globos: Rojos y Verdes. Los
primeros son más rápidos, tienen menor probabilidad de
aparición y si son muertos entregan mayor puntaje.
Tipos de globos

Cada tipo, debe estar indicado en la enumeración:

El tipo debe estar guardado en una variable global:
Tipos de globos

En el constructor, según el tipo dado como parámetro se
creara un globo con características Rojo o Verde:
Contenedores

Se debe implementar un contenedor para cada conjunto de
objetos que se quiera manejar: mover, detectar colisiones,
etc.

En este caso se necesita una lista para contener a los globos y
otra para las balas que dispara el personaje.

En WorldManager:

En Jugador:


Aquí debemos implementar toda la lógica del videojuego:
movimientos, colisiones entre elementos, etc.
Lo primero es mover al personaje



Lo segundo es calcular cual será la condición para crear un
nuevo globo:
Mostraremos sólo 5 globos en pantalla.
La probabilidad de que una bala se inserte es 5 / 50. Y
como un globo rojo tiene menor probabilidad de aparición,
éste tendrá probabilidad de 1 / 50 y el verde 4 / 50.


Lo tercero es mover las balas y los globos.
Las balas las movemos dentro del método FrameGame del
jugador.



Además debemos checkear si es que las balas o los globos
han atravesado la pantalla, si es así los eliminamos.
Para ello la posición Y del sprite de los globos debe ser
mayor que la altura de la ventana.
Y la posición Y del sprite de la bala debe ser menor que 0.


Finalmente debemos determinar si hubo colisiones entre la
bala y el globo, para esto iteramos entre ambas listas.
Además si hubo una colisión agregamos el valor del globo
al puntaje del jugador.
Descargar

Descargar Clase