Duda sobre cómo estructurar un juego

Consulte acerca de programas, técnicas, algoritmos etc.

Duda sobre cómo estructurar un juego

Notapor chon27 » Mié Sep 21, 2011 1:13 am

Hola,
soy nuevo aquí. Me registré porque quería hacer mi primer videojuego con SDL/C++. Tras leerme un tutorial y hacer mi primer "mini-juego" solo, me han surgido dudas acerca de cómo estructurar un videojuego extenso.

El juego que hice es muy simple y es sólo 1 nivel, por lo que está hecho en un simple fichero "main.cpp" ayudado de funciones y un par de clases. Entonces me pregunto, ¿que pasaría si mi juego constara de 20 fases, todas ellas diferentes o que necesiten un tratamiento personalizado? Si lo hiciera igual, quedaría un único archivo muy extenso y poco accesible.

He pensado, que una forma de solucionar esto pudiera ser, crear 1 objeto por cada fase/nivel o estado de juego (pausa, menú, etc...). Cada objeto tiene su propia función loop() que cree, dibuje y trate todo el estado, entonces, desde el main.cpp, dentro del gameloop principal, llamo al loop que me convenga según el estado (si está en el nivel 1; nivel1.loop(), o en pausa; pausa.loop(), etc...).

¿Es una forma correcta de hacerlo? ¿Hay otras formas más eficientes?
En fin, busco un poco de ayuda sobre el tema...

Gracias.
chon27
 
Mensajes: 3
Registrado: Vie Sep 16, 2011 6:23 pm

Re: Duda sobre cómo estructurar un juego

Notapor carlostex » Jue Sep 22, 2011 4:39 am

Lo que dices de los estados del juego es buena forma de estructurarlo, tienes un estado pausa que muestra una pantalla por ejemplo, cuando esntras a ese estado se dibuja una pantalla diferente o bien, se agrega texto, etc.
Mira checa esto http://gamedevgeek.com/tutorials/managing-game-states-in-c/ te puede servir de mucho.
Ahora esa es una forma de manejar estado, pero los niveles no son estados.
En los niveles seria bueno que comente que tipo de juego haces, supongamos que es el juego de aviones típico de disparar
lo que cambia en cada nivel es el mapa, supongamos que los enemigos son siempre los mismos, entonces al cambiar de nivel lo único que vas a cargar es el mapa, no tienes que hacer un código diferente o un loop diferente.
Ahora le agregamos que en cada nivel al enemigos diferentes, bueno lo que yo aria es crear un archivo de texto o alguna estructura que indique que enemigos se muestran en cada nivel, asi tienes un archivo para cada nivel, lo que vas hacer en en el loop es que vas a leer que enemigos vas a usar para ese nivel.
Esto se puede volver mas complejo, supongamos que tienes misiones, y cada nivel la mision es distinta, entonces tu archivo debe contener reglas y el el loop debes poder evaluarlas, incluso puede llegar a ser que tu arhivo sea mas parecido a un script pero para eso existen lenguajes que estan orientados a esto, pero esa es otra historia, es mas complejo cuando un juego se comporta muy diferente en cada nivel.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Duda sobre cómo estructurar un juego

Notapor carleto » Jue Sep 22, 2011 9:14 am

Hola

Otra forma de organizarlo sería mediante "escenas". El menú, el juego, los créditos, cada uno sería una escena, tan solo tendrías que tener un loop que va llamando a la escena actual e ir cambiando de escena cuando sea necesario.

Soy muy malo explicándome, es más fácil de lo que parece, echa un vistazo al código del juego Don Ceferino (http://www.losersjuegos.com.ar/juegos/ceferino) ahí lo tienes implementado.

Saludos
std::cout << "Usuario registrado de Linux Nº 504222" << std::endl;
Avatar de Usuario
carleto
 
Mensajes: 42
Registrado: Mar Ago 21, 2007 9:38 pm
Ubicación: Almería, España

Re: Duda sobre cómo estructurar un juego

Notapor chon27 » Sab Sep 24, 2011 6:00 pm

Gracias por la ayuda.

En el primer artículo no llego a entenderlo del todo. No por el inglés, si no cómo funciona. Me bajé las fuentes y vi que todas las clases de estados que haya deben tener la misma estructura. Pero como dije, no termino de comprenderlo, ¿alguien me echa una mano?

También miré el código del juego que me habéis recomendado, pero me ha liado más...

Igualmente seguiré revisándolo a ver si consigo entenderlo y plasmarlo.

Gracias.
chon27
 
Mensajes: 3
Registrado: Vie Sep 16, 2011 6:23 pm

Re: Duda sobre cómo estructurar un juego

Notapor carlostex » Dom Sep 25, 2011 5:08 am

Pero que es lo que no entendiste el código?
El código es bastante simple, no usa muchas cosas.
fíjate de la estructura de las fuentes que descargaste va asi:
manejador de estados(nucleo):
gamestate - Es la interfaz para definir cada estado del juego
gameengine - Controla la ejecución de juego

Estados:
introstate - hereda de gamestate para definir la interfaz.
Es un estado del juego, la función draw se encarga de copiar la superficie de ese estado a la superficie que se muestra,
en la función de eventos se recibe como referencia la clase que lo contiene(al estado) que es gameengine, esto es para que
se puedan agregar mas estados. Los estado los contiene un vector, el estado que se muestra es el ultimo que se agrego todos los demás están pausados, y solo se actualiza en ultimo del vector. Como no se espera que hayan estados repetidos en el vector
las clases de los estados son singleton, pero eso se puede omitir para hacerlo mas simple, por que no pasaría nada grave.
si es importante que para eso sepas sobre polimorfismo
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Duda sobre cómo estructurar un juego

Notapor chon27 » Dom Sep 25, 2011 7:10 pm

Muchas gracias carlostex, ahora sí lo entendí.

El problema es que no sé mucho c++, y tan sólo por no ver que eran clases singleton (no lo conocía), me fallaba todo. Tampoco había usado nunca el polimorfismo, y mis primeros intentos me fallaban por esto también. Por fin he hecho funcionar mi propio código personalizado basándome en ese tutorial.

Un saludo.
chon27
 
Mensajes: 3
Registrado: Vie Sep 16, 2011 6:23 pm


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado