10. Modelación de un Videojuego. BALLOON ATTACK. El planeta está siendo invadido por extraños...

Preview:

Citation preview

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.

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:

Estados del Jugador

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.

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:

Tipos de globos

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:

Contenedores

Loop del videojuegoLoop del videojuego

Aquí debemos implementar toda la lógica del videojuego: movimientos, colisiones entre elementos, etc.

Lo primero es mover al personaje

Loop del videojuegoLoop del videojuego

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.

Loop del videojuegoLoop del videojuego

Loop del videojuegoLoop del videojuego

Lo tercero es mover las balas y los globos.

Las balas las movemos dentro del método FrameGame del jugador.

Loop del videojuegoLoop del videojuego

Loop del videojuegoLoop del videojuego 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.

Loop del videojuegoLoop del videojuego

Loop del videojuegoLoop del videojuego

Loop del videojuegoLoop del videojuego

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.

Loop del videojuegoLoop del videojuego

BALLOON ATTACK