[Solicitud] Como hacer un juego de plataformas... en Allegro

Solicite, consulte o publique recursos de referencia para desarrolladores.

[Solicitud] Como hacer un juego de plataformas... en Allegro

Notapor Carlos_HP » Mar May 08, 2007 12:29 am

Buenas, estoy aprendiendo a usar Allegro, ya hice algunas cosillas, y estoy tratando de hacer un juego de plataformas, pero no logro crear un algoritmo que me sirva.

Primero empecé haciendo que mi personaje salte, pero para lo de las plataformas no me aclaro, si alguien sabe de un buen tutorial, de preferencia en español (aunque en inglés igual me sirve) que me explique la técnica que se usa para la gravedad y las plataformas, y de preferencia con un ejemplo en Allegro.

Gracias!
Carlos_HP
 
Mensajes: 8
Registrado: Lun May 07, 2007 11:42 pm

Notapor rcaf » Mar May 08, 2007 3:55 am

Te recomiendo el siguiente tutorial:

http://jnrdev.72dpiarmy.com/

Aunque está inglés y los ejemplos en SDL.

Por lo menos te puede servir para comprender mejor los conceptos en los juegos del tipo jump'n' run.

La solución que exponen en esos tutoriales no es la única, ni la mejor, todo depende de lo que realmente quieres lograr.

También depende mucho de la experiencia que tengas en programación, independiente de la API gráfica que uses (Allegro, SDL, OpenGL, etc.) y la capacidad para idear nuevas soluciones a problemas mediante un buen algoritmo.

Por ejemplo un videojuego de tipo plataforma puede hacer uso de mapas basados en tiles o mapas de durezas, y con scroll o sin el. Dependiendo del caso la solución sera un poco más sencilla o más difícil.

La complejidad en estos juegos, y en realidad en muchos, no está en la API gráfica que utilices, sino en idear un buen algoritmo que resuelva el problema, y para esto debemos hacer uso de todos los conocimientos y técnicas de programación que conozcamos, por ejemplo POO, uso adecuado de estructuras de datos, etc.

Así que por ahora lo mejor es que pienses en una solución independiente de la API gráfica.

Cualquier duda mas concreta que tengas solo hazla acá en el foro.

S2!
Roberto Albornoz Figueroa
Mi Blog
Wiki
Avatar de Usuario
rcaf
 
Mensajes: 71
Registrado: Jue Ago 10, 2006 4:35 am
Ubicación: Concepción, Octava Región. Chile

Notapor Carlos_HP » Mar May 08, 2007 6:33 pm

Gracias rcaf, voy a revisarlo. Como bien dices, lo importante es entender el problema y darle una o varias soluciones, y la verdad es que aun no me he puesto mucho a tratar de hacerlo, ya tengo a mi personaje saltando con una buena animacion y sensacion de gravedad, pero asi como lo tengo siempre va a poder saltar y regresar al suelo sin la posibilidad de quedarse en una plataforma y luego bajar sin necesidad de saltar. Voy a leer el tutorial y ya que haya hecho algo mejor lo publico aqui.

Por cierto, en POO no soy realmente muy bueno y hago todo en el main y en un solo archivp .cpp, sin pasar parametros de un lado a otro ni nada. Trate de usar estructuras, pero no me funcionan... estube probando y al hacer la llamada a la variable, no se puede. Si me pudieras irientar un poco si hay que cambiar algo para que funcionen. Si las uso antes de declarar un BITMAP si funcionan, pero despues no, por eso pienso que lo esoty haciendo bien y el problema no se donde este. Saludos y gracias! :D
Carlos_HP
 
Mensajes: 8
Registrado: Lun May 07, 2007 11:42 pm

Notapor rcaf » Mar May 08, 2007 7:51 pm

Si no usarás POO, por lo menos deberías usar técnicas de programación estructurada y dividir la solución de los problemas a través de funciones y módulos, es decir, agrupar tus funciones según lo que hagan y colocarlas dentro de un archivo independiente. Luego crear por ejemplo un archivo llamado main.c que tenga solo la función main() y desde ahí llamar al resto de las funciones.

Siempre será necesario crear objetos (personajes, items, power-ups, etc.) que conviene almacenar en estructuras, para no tener cientos de variables.

Al final si colocas todo el código en la main, y muchas variables separadas tu código crecerá tanto que será inentendible hasta para tí y te perderás entre tantas líneas.

S2!
Roberto Albornoz Figueroa
Mi Blog
Wiki
Avatar de Usuario
rcaf
 
Mensajes: 71
Registrado: Jue Ago 10, 2006 4:35 am
Ubicación: Concepción, Octava Región. Chile

Notapor Carlos_HP » Mar May 08, 2007 8:56 pm

Tienes toda la razon, pero es que soy principiante y aun no aprendo a llamar codigo de diferentes ficheros.

Y es un problema porque me he bajado ejemplos de allegro.cc yno se como compilarlos, todos vienen divididos en viarios .c y .h, ¿me podrias orientar un poco con esto? Gracias!
Carlos_HP
 
Mensajes: 8
Registrado: Lun May 07, 2007 11:42 pm

Notapor rcaf » Mar May 08, 2007 10:20 pm

Una frase muy escuchada y usada en el paradigma del diseño de algoritmos es:

Divide y vencerás

Es decir, debemos tratar de dividir nuestro problema, en problemas más pequeños, y la solución de cada uno de estos "problemitas" puede ser escrita en una función. Por lo tanto tendrás muchas pequeñas funciones que en su conjunto, y la comunicación entre ellas resuelven el problema inicial.

Esto es aplicable a la construcción de cualquier software y por supuesto de videojuegos también.

Ahora bien, la mayoría de los programas medianamente grandes vienen separados en varios archivos, ya que aplican esta técnica.

Por ejemplo, supongamos que estamos haciendo un videojuego tipo Pong, sabemos que los objetos que están presentes en un juego como este son dos raquetas (paddles) y una pelota (ball). Estos objetos interactúan dentro de una cancha, que para efectos prácticos simplemente puede ser un fondo, ya que no existirán colisiones entre paddles/ball y la cancha.

¿Cómo solucionar este problema?

Bueno, si vamos a usar programación estructurada y con módulos, como comente anteriormente en el otro post, tendremos que crear un módulo para manejar las raquetas, otro para la pelota y otro para la cancha.

Por cada uno de estos módulos, tendremos dos archivos: el header (*.h) y el código fuente de las funciones (*.c).

Por ejemplo para manejar una raqueta tendremos:

paddle.c
paddle.h

En el archivo paddle.h existirán los prototipos de las funciones, tipos de datos nuevos definidos por el programador, definición de estructuras (struct), constantes (#define, const), etc.

El archivo paddle.c hará un include de paddle.h y contendrá el código de cada una de las funciones definidas en paddle.h

Imaginemos que ya hicimos lo mismo para ball (ball.c, ball.h) y para la cancha (cancha.c cancha.h)

Por último tendremos otro archivo llamado main.c

En el encontraremos varios includes a los archivos .h de los módulos definidos anteriormente y la funcion main() propiamente tal. Dentro de la función main llamaremos a la funciones ya definidas.

Claramente esto es solo un ejemplo, faltan más módulos. De hecho debería existir un modulo para manejar todo lo relacionado con los gráficos (puede llamarse grafico.c / grafico.h), donde estarán las funciones para inicializar modos de video, cargar imagenes y dibujarlas en pantalla, etc. También debería existir un módulo que maneje colisiones, otro que se dedique a mostrar información en la pantalla, como puntaje, tiempo, etc.

Por ejemplo en el juego de plataformas que estás construyendo podrías tener un módulo para manejar mapas, otro para manejar colisiones, para el personaje, etc.

Si estas usando Allegro o SDL o cualquier otra API, estos módulos ya estarían hechos, así que bastaría solo con hacer un include de estas bibliotecas en los archivos que las necesitan. Pero aun así es posible crear tu propio módulo para manejar video, eventos del teclado/mouse, timers, audio, fuentes, etc y dentro de estas llamar a las funciones nativas de cada API.

Básicamente de esta forma se pueden estructurar los juegos y cualquier tipo de programa. Si usáramos POO, en el .h iría la definición de la clase, y en el .cpp el contenido de cada uno de los métodos de dicha clase.

Ahora compilar varios archivos es otro tema, pero básicamente consiste en compilar cada uno de los archivos .c o .cpp por separado y luego linkearlos todos junto a las bibliotecas externas que estés usando, como por ejemplo Allegro, SDL, etc.

Si usas una IDE y creas un proyecto, esto se simplifica ya que la compilación y linkeo se hará automáticamente y obtendrás finalmente el ejecutable.

Desconozco si estás programando en windows, linux u otro SO, así que las herramientas y el compilador pueden ser diferentes.

Cuando bajas un código fuente de un programa/juego, normalmente trae un archivo makefile que tiene todas las reglas para poder compilar su código, en su defecto podría también traer un archivo de proyecto de alguna IDE conocida, por lo que su compilación no tendría ningun problema.

Espero que te haya quedado un poco más claro como estructurar un programa en varios archivos.

Cualquier duda que tengas acá estaremos para ayudarte.

S2!
Roberto Albornoz Figueroa
Mi Blog
Wiki
Avatar de Usuario
rcaf
 
Mensajes: 71
Registrado: Jue Ago 10, 2006 4:35 am
Ubicación: Concepción, Octava Región. Chile

Notapor Carlos_HP » Vie May 11, 2007 3:22 am

rcaf gracias otra vez por tu tiempo para explicarme. Ya estructuré mejor mi programa. Lo que hice fue usar un .h para declarar las variables que voy a usar, y varios .c cada uno con una función. Y estoy usando estructuras para las posiciones de las plataformas.

El tutorial que me recomendaste no lo he leido pero ya entendí mejor lo de las plataformas y la gravedad, ya tengo todo listo para poner las plataformas que quiera en donde quiero en mi escenario y que todas funcionen como deben. Además de que le puse scroll al estilo de Super Mario Bros. en el que puedes avanzar pero no retroceder, y ya todas las plataformas se recorren cuando avanzas y también el suelo. Así que por lo menos creo que lo más básico que son las plataformas ya están bien hechas, y si quiero que el juego termine al llegar a determinado punto (otra vez al estilo SMB) pues ya es muy fácil. Gracias de nuevo! esto me gusta cada vez más. :D

PD: Esto ya es muy a parte pero para no abrir otro post (¿o mejor sí?)... ¿alguien sabe de alguna buena página donde haya muchos GIFS? de personajes de juegos con todos sus movimientos de preferencia (estar parado, agachado, saltando, corriendo, etc.). Me serviría mucho! :roll:
Carlos_HP
 
Mensajes: 8
Registrado: Lun May 07, 2007 11:42 pm

Notapor rcaf » Vie May 11, 2007 7:51 pm

Veo que dijiste que pusiste una función por archivo .c, tampoco era esa la idea, o sino terminarás con demasiados archivos.

Lo que decía era que por cada módulo o archivo .c tuvieses varias funciones, pero con alguna relación entre si.

Sobre sprites, revisa las siguientes paginas:

http://www.gsarchives.net/index2.php
http://www.videogamesprites.net/Links/
http://www.flyingyogi.com/fun/spritelib.html
http://perso.orange.fr/arcaderevival/sprites.htm
http://reinerstileset.4players.de/englisch.htm
http://blog.outer-court.com/archive/2006-08-08-n51.html

S2!
Roberto Albornoz Figueroa
Mi Blog
Wiki
Avatar de Usuario
rcaf
 
Mensajes: 71
Registrado: Jue Ago 10, 2006 4:35 am
Ubicación: Concepción, Octava Región. Chile

Notapor Carlos_HP » Sab May 12, 2007 1:28 am

Perdón es que me equivoqué al redactar, lo hice así como dices poner varias funciones que estén relacionadas en archivos .c

Gracias por los links.
Carlos_HP
 
Mensajes: 8
Registrado: Lun May 07, 2007 11:42 pm


Volver a Artículos, traducciones y documentación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados