Hace un Exploding Fist?

Nuevas versiones para juegos legendarios.

En qué lenguaje quieres un remake de Exploding Fist?

C++ y SDL, para que funcione en cualquier sistema operativo.
14
64%
C# y Tao.Sdl, que es menos propenso a errores, aunque quizá no funcione en cualquier sistema operativo.
2
9%
Java, que también está muy extendido.
5
23%
Pascal, que es más fácil de leer, y también existe para casi cualquier sistema operativo, aunque el sonido dependa de bibliotecas externas.
1
5%
Otro (detalla tu opinión en una respuesta).
0
No hay votos
 
Votos totales: 22

Avatar de Usuario
Mode 2
I am The Forum
I am The Forum
Mensajes: 2058
Registrado: Lun 10 Oct , 2005 8:01 pm
Ubicación: Sevilla, años 80.
Contactar:

Re: Hace un Exploding Fist?

Mensajepor Mode 2 » Mié 01 Abr , 2009 8:20 am

Nacho me gusta tener conocimiento de todo eso porque si no me siento como si estuviese construyendo en el aire. :D
BUSCO: VideoPac+, Jaguar Saturn, Micromanía 1, Amstrad Semanal, MicroHobby, juegos especialmente CPC y Vectrex, Aquarius, Sam Copé, 520 ST, manual +3, manual CPC664.

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Hace un Exploding Fist?

Mensajepor nacho » Vie 03 Abr , 2009 1:41 am

Nacho me gusta tener conocimiento de todo eso porque si no me siento como si estuviese construyendo en el aire. :D
Te entiendo, pero me refiero a que, de cara a ojear el fuente, es más sencillo leer algo como

Código: Seleccionar todo

Hardware.visualizarPantallaOculta();
que el equivalente en SDL, que sale a ser una parrafada como

Código: Seleccionar todo

SDL_Rect dstrect;
dstrect.x = 0;
dstrect.y = 0;
SDL_BlitSurface(fondo, 0, pantallaVisible, &dstrect);
SDL_Flip(pantallaVisible);
Lo último es interesante si quieres conocer los entresijos de SDL, pero no imprescindible para entender como funciona el juego.

(Si te aburres, mira el "escribirTextoOculta" de la clase Hardware, que usa unas 20 líneas de código para escribir un texto en pantalla... ;-) )

Precisamente esa era la idea de la clase Hardware: que mis alumnos pudieran centrarse en lo que debe hacer el juego y en cómo conseguir que lo haga, y no en pelearse con las peculiaridades de SDL.

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Hace un Exploding Fist?

Mensajepor nacho » Vie 10 Abr , 2009 12:26 am

¿Como van los experimentos por ahí?

Yo ya tengo preparada la siguiente entrega... ;-)

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Hace un Exploding Fist?

Mensajepor nacho » Mar 14 Abr , 2009 1:50 pm

Como nadie opina, comento los siguientes pasos, por si alguien quiere experimentar... ;-)

Esto es lo que había propuesto:

-----

Lo próxima que yo haría es permitir un primer golpe, para que a su vez la siguiente entrega ya fuera un primer control rutinario de colisiones. Después seguirían un par de entregas con nuevos golpes, que añadirían jugabilidad pero no complejidad. Y a continuación, y casi en último lugar, habría que empezar a afinar: colisiones lo más correctas posible, imitar distintos niveles de inteligencia del contrario según el nivel de juego, etc.

Ese primer golpe para esta entrega podría ser la patada lateral, que se activa cuando se pulsa disparo a la vez que la dirección hacia la que mira el personaje.

En principio, debería suponer los siguientes cambios:

- Nuevas imágenes: un par de fotogramas para cada personaje (todavía no se pueden dar la vuelta, cada uno mira siempre hacia el mismo lado).

- Nueva combinación de teclas: habrá que comprobar si se pulsan dos teclas a la vez. Si eso ocurre, habrá de dejar de comprobar teclas en ese fotograma, para evitar que primero dé una patada (porque se pulsa derecha y disparo) y luego avance (porque se pulsa derecha).

- El comportamiento en ese caso es una secuencia de movimientos, al igual que cuando se salta: hay un primer fotograma intermedio, que dura muy poco, luego un segundo fotograma que dura mientras esté pulsada la combinación de teclas, y luego vuelve a la posición de espera.

Suena fácil, ¿no? Si alguien se atreve, adelante. Si no, en un par de días empiezo a capturar imágenes...

-----

Los pasos a dar serían:

- Preparamos las dos nuevas imágenes.

- Las cargamos en el constructor de "PersonajeA":

Código: Seleccionar todo

imagenPatadaLD1 = leerImagenAlternativa("data\\pers_d_patada_lat1.png");
imagenPatadaLD2 = leerImagenAlternativa("data\\pers_d_patada_lat2.png");
- En Personaje.h declaramos esas dos imágenes:

Código: Seleccionar todo

T_BITMAP imagenPatadaLD1;
T_BITMAP imagenPatadaLD2;

- En Juego, añadimos un primer caso para "comprobarTeclas":

if (hard.comprobarTecla(TECLA_DCHA) && hard.comprobarTecla(TECLA_ESP))
miPersonaje.patadaLateral();
else if (hard.comprobarTecla(TECLA_DCHA))
...[/code]


- En Personaje, declaramos esa función "patadaLateral", de momento sólo en un sentido:

Código: Seleccionar todo

/** patadaLateral: golpe, patada de lado
*/
void Personaje::patadaLateral() {
if (enMovimiento)
return;
enMovimiento = true;
//if (mirandoDerecha)
imagen = imagenPatadaLD1;
//else
// imagen = imagenSaltoI1;
}

- Y dentro de la función "animarMovimiento" del personaje, añadimos una nueva posibilidad

Código: Seleccionar todo

// Primer golpe: patada lateral
if (imagen == imagenPatadaLD1) { // Si empieza la patada: sigue
imagen = imagenPatadaLD2;
}
else if (imagen == imagenPatadaLD2)
{
imagen = imagenPatadaLD1;
enMovimiento = false;
}

Esto tiene un fallo: las imágenes son (todavía) de distinto tamaño, de modo que el segundo fotograma de la patada se intenta dibujar con el tamaño de la imagen estática del personaje... y se corta. Cuando tengamos todas las imágenes (o casi), no existirá ese problema, porque podremos ajustar todas las imágenes a un mismo tamaño. De momento, una solución temporal puede ser inicializar el personaje con la imagen más grande:

Código: Seleccionar todo

crearDesdeFichero("data\\pers_d_patada_lat2.png");
Con esto ya debería funcionar "razonablemente bien", salvo por un detalle: si mantenemos pulsada la combinación de teclas para la patada, la imagen no es estática, sino que alterna entre la imagen 1 y la imagen 2. La forma de solucionarlo puede ser que no se vuelva a asignar la imagen 1 en "animarMovimiento" mientras la tecla siga pulsada. De momento no podemos hacerlo, porque "animarMovimiento" no recibe información sobre qué tecla está pulsada, pero pronto lo mejoraremos.

(Eso es todo... pero esta vez no pongo fuentes... quien quiera, que pruebe a ampliar el anterior con esto :twisted: )

----

Para la siguiente entrega hay varias cosas que se podrían hacer (no sé si llegaré a incluir todas):

- Que todas las imágenes tengan igual tamaño.

- Añadir más imágenes (todas o casi), para saber exactamente lo que ocupa cada una y así evitar tener que cambiar el tamaño más adelante.

- Hacer que el comportamiento de la patada sea como en el Exploding Fist original (mantener la patada mientras se mantenga la pulsación de la tecla) y limpiar un poco el código, o los parcheos continuos lo irán haciendo cada vez más difícil de leer.

- Una primera comprobación de colisiones rudimentaria, basada sólo en la distancia entre personajes.

- Dos nuevos golpes: la patada circular y el barrido, que ayudarán a ver los problemas de esa detección de colisiones.

- Quizá algún efecto adicional en la presentación, como un fundido de la imagen antigua a la moderna.

(Ahí queda eso... ;-) )

Avatar de Usuario
Mode 2
I am The Forum
I am The Forum
Mensajes: 2058
Registrado: Lun 10 Oct , 2005 8:01 pm
Ubicación: Sevilla, años 80.
Contactar:

Re: Hace un Exploding Fist?

Mensajepor Mode 2 » Jue 23 Abr , 2009 1:08 am

Hola Nacho,

Ante todo gracias por el tiempo y las ganas que le echas a este proyecto. =D>

Mira he llegado al proyecto fist04 incluido y la verdad que solo tengo una duda y una observación ya que todo esta muy bien explicado y ordenado.

Cuando no uso la pausa, o sea hard.pausa(40) para el tema de los 25fps parece que todo va igual. Es así?

Por último, ¿no quedaría más elegante hacer una pausa cuando el salto esta en su inicio antes de pasar al segundo fotograma del salto?. Me parece que se vería mejor ese fotograma intermedio que apenas se vé.
Lo he intentado pero al usar hard.pausa en la clase personaje.cpp y me da fallo ¿Por que? Está declarado hardware.cpp.

Saludos! :wink:

Saludos! :wink:
BUSCO: VideoPac+, Jaguar Saturn, Micromanía 1, Amstrad Semanal, MicroHobby, juegos especialmente CPC y Vectrex, Aquarius, Sam Copé, 520 ST, manual +3, manual CPC664.

Avatar de Usuario
BatJoss
Forero habitual
Forero habitual
Mensajes: 118
Registrado: Mar 21 Abr , 2009 9:03 pm

Re: Hace un Exploding Fist?

Mensajepor BatJoss » Jue 23 Abr , 2009 9:53 pm

Hola Nacho.

Me parece increible y elogiable el esfuerzo que estas haciendo con este remake, publicandolo paso a paso en el foro. Tengo algo de experiencia en programacion y siempre he querido programar juegos, aunque no tenga mucho tiempo.... Intentare sacar tiempo y seguir la evolucion de este y si no te importa enviarte lo que se me ocurra (sin pensarlo mucho :oops: )

He probado a compilar en linux y me ha dado "mogollon" de errores. Los mas evidentes eran las mayusculas en los ficheros de cabecera. No he tenido tiempo para analizarlo mas y te incluyo abajo donde me he quedado. Si consigo compilarlo lo posteo otra vez.

Salu2, BatJoss

P.S.: el "mogollon" de errores se reduce a:

Código: Seleccionar todo

ElementoGraf.h:51: error: extra qualification ‘ElementoGraf::’ on member ‘leerImagenAlternativa’
Hardware.h:114: error: multiple parameters named ‘y’
Como warning aparece el siguiente muchas veces:

Código: Seleccionar todo

Juego.cpp:43: warning: deprecated conversion from string constant to ‘char*’
uso debian linux 2.6.26-1-686

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Hace un Exploding Fist?

Mensajepor nacho » Vie 24 Abr , 2009 3:49 am

Os respondo a los dos a la vez...
Hola Nacho.
Me parece increible y elogiable el esfuerzo que estas haciendo con este remake, publicandolo paso a paso en el foro. Tengo algo de experiencia en programacion y siempre he querido programar juegos, aunque no tenga mucho tiempo.... Intentare sacar tiempo y seguir la evolucion de este y si no te importa enviarte lo que se me ocurra (sin pensarlo mucho :oops: )
Claro, publícalo aquí. Habrá cosas en las que yo pueda ayudarte, pero seguro que también alguna otra en la que propongas formas más fáciles de hacer las cosas.
He probado a compilar en linux y me ha dado "mogollon" de errores. Los mas evidentes eran las mayusculas en los ficheros de cabecera. No he tenido tiempo para analizarlo mas y te incluyo abajo donde me he quedado. Si consigo compilarlo lo posteo otra vez.
Buena parte de los errores son debidos a las mayúsculas, como ya has visto. Lo grave del caso, es que esos errores los corregí en una versión temprana, porque lo probé en Ubuntu 8.10 (posiblemente KUbuntu, para más detalles, que es el que tengo en el trabajo)... pero no sé qué hice con esa versión de los fuentes... :-D
P.S.: el "mogollon" de errores se reduce a:

Código: Seleccionar todo

ElementoGraf.h:51: error: extra qualification ‘ElementoGraf::’ on member ‘leerImagenAlternativa’
Cierto. Verás que esa línea es

Código: Seleccionar todo

T_BITMAP ElementoGraf::leerImagenAlternativa(char *nombre);
Como él te indica, no es necesario indicar "ElementoGraf::", porque ya estás dentro de la clase "ElementoGraf". De hecho, eso que en otras versiones sería un warning, tu compilador, más moderno (imagino), se muestra directamente como un error. La línea correcta sería:

Código: Seleccionar todo

T_BITMAP leerImagenAlternativa(char *nombre);

Código: Seleccionar todo

Hardware.h:114: error: multiple parameters named ‘y’
El mismo problema: un "copy-paste" mal terminado, que otros compiladores pasan por alto. En las primeras versiones de C bastaba con indicar el número y tipo de de los parámetros: "void rectangulo(int, int, int, int, int);" pero los compiladores actuales hilan cada vez más fino, para intentar ayudar a descubrir posibles errores. Y tiene razón: donde dice:

Código: Seleccionar todo

void rectangulo(int x, int y, int y, int h, int color);
debería ser

Código: Seleccionar todo

void rectangulo(int x, int y, int w, int h, int color);
(el tercer dato no es "otra y", sino la anchura -width-).
Como warning aparece el siguiente muchas veces:

Código: Seleccionar todo

Juego.cpp:43: warning: deprecated conversion from string constant to ‘char*’
"deprecated" quiere decir "anticuado". En la línea

Código: Seleccionar todo

fondo.crearDesdeFichero("data\\fondo.png");
espera que se le pase una cadena "al estilo de C":

Código: Seleccionar todo

void crearDesdeFichero(char *nombre);
pero está recibiendo directamente un texto entre comillas dobles, que el analizador considera una "cadena al estilo de C++". Es lo malo de que parte de las funciones estén pensadas para poder funcionar también desde C, no sólo desde C++. Haz como que no has leido el warning. ;-)

uso debian linux 2.6.26-1-686
Así, con un par... ;-)
Mira he llegado al proyecto fist04 incluido y la verdad que solo tengo una duda y una observación ya que todo esta muy bien explicado y ordenado.
Pelotaaaaaaaaaaa

Dime las cosas que no estén claras, para irlo haciendo cada vez más legible (aunque en la versión 8 ya toca una pequeña remodelación parcial).
Cuando no uso la pausa, o sea hard.pausa(40) para el tema de los 25fps parece que todo va igual. Es así?
Sí, lo parece. Haciendo una pausa de 40 ms para conseguir 25 fps estamos considerando que el tiempo de cálculo y redibujado es despreciable. A medida que los ordenadores van siendo más rápidos, esto va siendo cada vez más real, y cada vez se notaría que el juego es más rápido, hasta que quizá llegara a ser injugable en un procesador de 8 núcleos (por ejemplo). Al forzar la pausa garantizas una "velocidad máxima" (no la mínima: en un 486 posiblemente iría a pedales, porque no está nada optimizado).
Por último, ¿no quedaría más elegante hacer una pausa cuando el salto esta en su inicio antes de pasar al segundo fotograma del salto?. Me parece que se vería mejor ese fotograma intermedio que apenas se vé.
Quizá sí, pero me suena que en el juego original casi no se veían los fotogramas intermedios. Probaré a ver... :-)
Lo he intentado pero al usar hard.pausa en la clase personaje.cpp y me da fallo ¿Por que? Está declarado hardware.cpp.
Quizá te falte al principio el "include" de "hardware.h".

Así me gusta, gente aplicada. ;-)

Avatar de Usuario
BatJoss
Forero habitual
Forero habitual
Mensajes: 118
Registrado: Mar 21 Abr , 2009 9:03 pm

Re: Hace un Exploding Fist?

Mensajepor BatJoss » Dom 26 Abr , 2009 7:57 pm

Hola!

He seguido las indicaciones y he conseguido compilar y ejecutar en linux. Lo que mas tiempo me ha llevado sin embargo es la funcion que lee la fuente ttf. Se me habia olvidado cambiar la barra de subdirectorio asi como la ultima letra del nombre ( VeraBd.ttf en vez de BeraBD.ttf ). Compilar compilaba, pero al ejecutarlo no daba un error de no haber encontrado la fuente sino que retornaba con una "violacion del segmento" (segmentation fault, supongo). La funcion que lee la fuente ttf no tiene comprobacion de error.

Adjunto las modificaciones por si alguien quiere probarlo en linux.

El segundo mensaje con las teclas para empezar a jugar despues de actualizar la pantalla de presentacion no me aparece tampoco ..... sigo intentandolo ....

Salu2, JoseMa
Adjuntos
fist06_linux.tar
version linux
(198.41 KiB) Descargado 139 veces

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Hace un Exploding Fist?

Mensajepor nacho » Mar 28 Abr , 2009 2:02 am

Hola!

He seguido las indicaciones y he conseguido compilar y ejecutar en linux. Lo que mas tiempo me ha llevado sin embargo es la funcion que lee la fuente ttf. Se me habia olvidado cambiar la barra de subdirectorio asi como la ultima letra del nombre ( VeraBd.ttf en vez de BeraBD.ttf ). Compilar compilaba, pero al ejecutarlo no daba un error de no haber encontrado la fuente sino que retornaba con una "violacion del segmento" (segmentation fault, supongo). La funcion que lee la fuente ttf no tiene comprobacion de error.
Cierto. En principio, no había ningún mensaje de aviso. Como en la versión que usábamos en clase sólo había un tipo de letra, pero sí varias imágenes para cada juego, así que añadimos un aviso sobre las imágenes para los "poco cuidadosos". Hace poco le hemos añadido la comprobación de tipos de letra, porque vamos haciendo cosas con más tipos de letra... pero en C#, y no he actualizado la versión en C++.
Adjunto las modificaciones por si alguien quiere probarlo en linux.
Descargando...

Acabo de hacer limpieza en el portátil, que ya estaba a reventar, y he quitado Linux, pero en el trabajo sí debería tenerlo. A ver si mañana puedo probarlo...
El segundo mensaje con las teclas para empezar a jugar despues de actualizar la pantalla de presentacion no me aparece tampoco ..... sigo intentandolo ....
Salu2, JoseMa
Eso suena más raro. A ver si pudiera echarle un vistazo pronto...


¿Quién está conectado?

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


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic