Hace casi 2 años, dediqué un par de meses de verano para crear un juego de video desde cero. Con la ayuda de la librería SDL (
Simple DirectMedia Layer) comencé un camino de aprendizaje y muchos dolores de cabeza. Lo que intentaba es saber como son hechos los juegos reales, de peleas en este caso, pero muchas de las cosas que aprendí se utilizan en cualquier tipo de juegos.
Basado en el clásico juego Street Fighter, primer juego de maquinitas que jugué en mi vida, empecé a ver como eran los movimientos de los luchadores, cuando y como se pegaban y se pegaban entre ellos, y la mecánica general del juego. Se ve que todo el tiempo que perdí co mi viejo "Family Game" sirvió para algo!.
La primer "contraingeniería" que hice, fue la de la detección de cuando un luchador le pega al otro, lo pude abstraer hasta un par de rectángulos sin gracia que se movían y se chocaban, esos fueron mis primeros luchadores ;-). Luego mejoré los movimientos, por ejemplo hacer que los tipos salten y caigan con gravedad (primero más lentos y mientras caen se mueven más rápido, obvio!), para esto use una función de la forma a*x^2 + b*x + c.
Mientras avanzaba el juego, tuve que pensar fórmulas de colisiones entre rectángulos 2D de forma genérica (que los rectángulos estén rotados y en cualquier posición), se que hubiera sido más fácil buscar las fórmulas en internet, pero una de las metas del proyecto fue hacerlo desde cero, es decir pensar todo solo.
La forma de desarrollo del juego se hizo bastante ordenada, fue desarrollado en C con algún toquesito de C++, pero en ese momento no tenía muy clara la programación orientada a objetos, lo que ahora parece cosa de todos los días en esa época era chino mandarín! ;-), tiene algunas "cositas" que me gustan, por ejemplo el tema de las sombras, cualquier juego medio berreta que ande en la vuelta tiene sobras para los luchadores, la detección de colisiones es muy exacta, ya que los golpes (con brazos y piernas) fueron modelados con rectángulos que encierran el golpe de forma muy aproximada, y la detección de colisiones se hace de forma exacta colisionando los rectángulos de los golpes con los del cuerpo del contrincante. Como verán si se lo bajan, los tipos no tienen animación, es la gran falta de la versión actual, pero es demasiado trabajo, dibujar un luchador y es hacer mas de 20 dibujos (uno por cada combinación de movimientos), y hacer animaciones es por lo menos multiplicar por 5 esta cantidad, lo que son más de 100 dibujos por cada luchador!, solo se complica...

El objetivo primario era ver si podía lograrlo, hacer algo que se pareciera, por lo menos en el funcionamiento, a un juego decente, en este sentido estoy completamente satisfecho. Me gustaría si darle unos toques en cuanto a lo gráfico, el menú inicial, ponerle opciones como si se quiere jugar en pantalla completa, si quiere usar joystick, configurar las teclas, elegir más luchadores!!!, también ver el tema de las animaciones, y algo que empecé a hacer pero no lo terminé es el tema de los movimientos especiales (los clásico "poderes"), que son movimientos que implican una determinada combinación de movimientos básicos, los cuales son: izquierda, derecha, arriva (salto), abajo (agacharse), piña y patada. El sistema de detección de "poderes" que pensé está hecho en base a detección de substrings, y las pruebas que realicé fueron bastante satisfactorias, aunque no llegué a su completo desarrollo, tal vez cuando tenga un rato o si alguien me ayuda!
Bajátelo!: (lo dividí en partes para poder bajarlo de a poco)
>
Parte 1 (207 Kb.)
>
Parte 2 (207 Kb.)
>
Parte 3 (207 Kb.)
>
Parte 4 (207 Kb.)
>
Parte 5 (91 Kb.)
Si te interesa el desarrollo de este juego o querés agregar algo y ayudar a terminarlo, mandame
contactate con migo!.