Bienvenidos sean a este post, hoy hablaremos sobre los distintos estados que puede tomar un juego.
Cuando hablamos de estados de un juego nos referimos a las posibles cambios en nuestro juego. Por ejemplo, cuando el juego inicia se utiliza para mostrar un mensaje en pantalla mientras por detras puede estar cargando las configuraciones iniciales. Luego pasara al juego y esto se considera otro estado porque pasamos del estado inicial al estado corriendo pero nosotros podemos pausar el juego y esto hara que pase al estado de pausa. Y al volver a retomarlo o salir, cambiara nuevamente de estado. Todo esto, se puede tomar como distintas secciones del juego pero se lo denomima como Estados del juego.
A continuacion, veremos un ejemplo de sintaxis basica de como implementar el control de los estados mas basicos de un juego. Vamos a suponer que tenemos un proyecto creado y en nuestro codigo principal vamos a agregar el siguiente bloque:
enum estado_juegos
{
MENU = 0,
JUEGO = 1,
GAMEOVER = 2
}
Este enum almacenara las tres constantes para los tres estados basicos que podemos tener en un juego:
- MENU, sera para el inicio del juego
- JUEGO, es para cuando esta corriendo el juego
- GAMEOVER, es para cuando termina el mismo
Suponiendo que tenemos una funcion para iniciar en la clase del juego agregariamos las siguientes lineas:
// Creacion de los objetos del menu
m_pObjMenuj1 = new ObjetoMenu();
m_pObjMenuj2 = new ObjetoMenu();
// Creacion de los objetos del juego
m_pJugador = new Jugador();
m_pEnemigo = new Enemigo();
// Creacion de los objetos del Game Over
m_pObjFin1 = new GameOver();
m_pObjFin2 = new GameOver();
En las primeras dos lineas crearemos los menus que veran los jugadores al principio ya sean por separados o juntos. Las siguientes lineas seran para la creacion de los objetos que veremos en el nivel y las ultimas dos son para mostrar el mensaje de final o game over para cada jugador. Con nuestros objetos creados lo siguiente seria iniciar una variable para almacenar cual es el estado actual del juego y para ello podemos agregar en esta funcion una linea similar a esta:
m_estadoActualJuego = MENU;
Esta variable sera la encargada de almacenar el estado del juego en base al enum que generamos al principio con uno de los valores constantes que almacena. Como es el inicio del juego, le asignamos a MENU. Nuestra siguiente modificacion sera en la funcion actualizar tambien de la clase Juego donde agregaremos el siguiente bloque:
void Juego::actualizar()
{
switch(m_estadoActualJuego)
{
case MENU:
m_aObjMenu1->actualizar();
m_aObjMenu2->actualizar();
break;
case JUEGO:
m_aJugador->actualizar();
m_aEnemigo->actualizar();
break;
case GAMEOVER:
m_aObjFin1->cerrarJuego();
m_aObjFin2->cerrarJuego();
break;
}
...
En este caso, utilizamos un switch que se encarga de monitorear el valor de m_estadoActualJuego y en base a este ejecuta las acciones pertinentes para cada estado del juego. Si tomamos el valor anterior al ejemplo, esto hara que se trabajen con los menus de los jugadores. Para cada estado, trabajara con sus respectivas funciones. Esto nos facilitara el trabajar con los distintos estados posibles, porque lo haremos solamente con el cambio del valor de una variable. Solo nos faltaria hablar sobre la funcion para renderizar pero no seria muy distinta de esta.
Vamos a suponer que tenemos una clase para el estado jugar, y este va a ser similar pero la diferencia esta en el valor de la constante estatica donde en lugar de identificar al menu nos identifica que estamos en jugar, y tambien varia el mensaje de notificacion de los estados de ingreso y salida pero el resto sera muy similar. Con esto establecimos la base de las clases que se encargaran de manejar los estados del juego. Esto es solo una introduccion teorica, pero a partir del proximo post veremos como se implementa todo este concepto.
En resumen, hoy hemos visto una pequeña introduccion teorica sobre los estados del jjuego, asi como una manera simple de manipularlo, pero a partir del proximo post veremos como empezar a implementarlo. Espero les haya sido de utilidad y les dejo algunas de mis redes sociales para seguirme o recibir una notificacion cada vez que subo un nuevo post:


Donación
Es para mantenimento del sitio, gracias!
$1.50





