AdaZelda

Se expone todo lo relacionado con el lenguaje, desde lo más básico hasta lo no tanto.

Moderadores: gneuromante, Andres_age, Yzumi

AdaZelda

Notapor Andres_age » Sab Abr 02, 2005 23:14

Hola, buenas a todos. En primer lugar presentarme, soy Andres_age.
En Barrapunto escribí una cuestión sobre punteros en ada que ya resolví, y me echaron el ojo ;) avisandome de la existencia de este foro.
Bien, debo decir que la iniciativa me parece excelente, es perfecto para resolver en grupo las dudas sobre este lenguaje de programación que muchos estudiantes usan, y no volverse loco :)
Me gustaría presentarme aportando mi granito de arena: un juego que hice yo y un compi de la uni "parecido" a Zelda, hecho totalmente en Ada, y usando Adagraph.

Imagen
(lo blanco se supone que es nieve :P)
(lo digo por si os lo preguntais :P)

El juego ni está terminado ni nada. Solo es un muñeco que se mueve, cambia de arma, ataca y poco más. Hay terreno (muy cuadrado, hay que decirlo), animaciones, sonidos, etc. En general todo es bastante cutre :P y muchas partes del código se notan que lo hicimos rapido para salir del paso. Incluso usamos una practica de primero para hacer el editor de terreno y el editor de frames X-D X-D
Lo empezamos en diciembre, y el único objetivo era practicar con ada y no aburrirnos en las fiestas X-D así que no espereis maravillas. Es más, para los editores de frames y terreno el código fuente no está porque nos da vergüenza y todo X-D X-D

http://img89.exs.cx/img89/373/adazelda2jn.jpg

Bien, en primer lugar decir que siempre he trabajado con programación estructurada, y lo único que se de orientada a objetos es de oidas. Asi que todo lo que hay hecho es estructurado.
Basicamente se trata de una matriz que hace de terreno, por un lado a nivel de pixel y a otro de nivel "cuadrados" para el terreno. Encima camina el personaje, que no es más que un registro con atributos (posición en la pantalla, salud, inventario, etc) y que tiene un nombre de fichero con las animaciones (que se crean pixel a pixel con el editor-cutre-frame, algo así como un icon workshop pero tambien hecho en ada...). Como usabamos los sprites que unos crearon para el RPG Maker X-D hicimos un conversor texturas-frame muy cutre, pero que perdí (es muy facil, es solo imprimir la textura, y coger con get_pixel el color y guardarlo en una matriz) y por eso no incluyo.
Hay muchas cosas a medio implantar o implantadas rapido (y mal). Por ejemplo, no hay nivel de abstracción con muchos tipos (como el escenario, y el nda del personaje es muy muy simple), y el tema de objetos a quedado a medio hacer.
Basicamente consiste en una pila donde se guardan los diferentes objetos. Pueden ser de adornos (piedras, flores, etc) o objetos para coger (espadas, arcos, flechas, armadura, etc). En cada iteración (80ms) comprobamos si el personaje está encima y le damos el objeto si no lo tiene (funciona... lo que pasa es que no tenemos los gráficos de los objetos, ya sea del inventario o el sprite del terreno). Las flechas disparadas son un objeto, y por eso el tipo que guardamos en la pila tiene un atributo de "dirección". Las flechas disparadas estan en una posición y en cada iteración avanzan x pixeles en la dirección donde fue disparada. Esto lo comento porque es lo que pensabamos hacer y no terminamos de implantar, por si lo veis no os extrañeis.
Igualmente el procedure de coger objeto (que hace eso, comprobar si el objeto lo tiene el personaje) en un principio lo pusimos en el procedimiento que mira si el jugador ha presionado una tecla y que ibamos a cambiar a un procedimiento más general (que permitiese lo de las flechas, por ejemplo) en la iteración principal.
El tema de los enemigos iba a ser complicado... en un principio sería igual que el "heroe", cada enemigo sería una "variable" de tipo t_personaje. Habíamos pensado en poner todos los personajes en una pila y hacer lo mismo: en cada iteración recorríamos la pila y movíamos el personaje. Detalle: no tenemos ni perra idea de IA. Pero bueno, el caso es que ni hemos empezado a implantar, creo que solo está la pila declarada en el procedure principal.
También hay detalles que todavía no hemos terminado, como la posición "sigilo", que pretendíamos hacer que el personaje fuera más lento pero también fuera "invisible" a los enemigos (solo era una idea).
Bueno, lo demás se puede ver mirando el código. Como se que no lo vais a entender :P contestaré cualquier pregunta. Pongo el código aquí por si a alguno le interesa mirar, aceptaré cualquier comentario y crítica, incluso los insultos por hacer semejante cutrez X-D

Bueno, para jugar a la "demo" podeis bajaros este archivo.
http://www.iespana.es/eld/adazelda_bin.rar
Tiene todo lo necesario para "jugar".
Para mover, aswd, para atacar espacio, para cambiar de arma los números (cambia el 1 con el objeto numero x que hayais pulsado), y z para sigilo (que por ahora solo va más lento). Para salir, esc.
Necesitais windows y una resolución de 800x600 (libres, es decir que si teneis la barra de herramientas es como si quitara pixeles, necesitareis o quitarla o usar 1024x768 al menos). A veces da errores de put_pixel y get_pixel, a mí nunca me ha pasado pero en otros pcs lo he visto. Estos errores no los he tratado.
Se puede usar en linux con wine, simplemente añadis adagraph2001.dll al directorio /Windows/System y añadis la referencia al archivo de configuración de wine.


El codigo fuente es este de aquí
http://www.iespana.es/eld/adazelda_source.rar
En imgs teneis posibles sprites que teníamos planeado usar, por si sirven.
El archivo principal es adazelda.adb
El archivo gen_personaje.adb genera el archivo del heroe (sus caracteristicas, etc). Si quereis modificar el heroe, debeis modificar ese archivo, compilar y ejecutar.
No se puede compilar en linux, ya que la adagraph es solo para windows (bueno, no se si se puede compilar usando adagraph en linux, pero creo que no).
Si teneis problemas al compilar, puede que sean las librerias de sonido, quitad el mmc ("with mmc_sound" que está en la cabecera de adazelda.adb) y su referencia (un "play_sound" perdido por ahí) y se compilará y ejecutará sin problemas (y sin sonido).

Para bajar el compilador y las librerias de adagraph, lo podeis encontrar en esta página
http://atlas.usafa.af.mil/dfcs/bios/mcc ... stuff.html

Los links directos (instalar en este orden... creo)
Gnat
ftp://ftp.cs.nyu.edu/pub/gnat/3.15p/win ... -3.15p.exe
ftp://ftp.cs.nyu.edu/pub/gnat/3.15p/win ... 15p-nt.exe
(no me acuerdo cual de los dos es... creo que el primero).

Adagide
ftp://ftp.usafa.af.mil/pub/dfcs/carlisl ... nstall.exe

Adagraph2001
ftp://ftp.usafa.af.mil/pub/dfcs/carlisl ... nstall.exe

Pues eso, cualquier cosa que querais, decidla.
Si tardo en contestar, es porque estoy liadillo, pero tranquilos que responderé :P
Andres_age
Moderador
Moderador
 
Mensajes: 121
Registrado: Sab Abr 02, 2005 22:40

Notapor Raistlin » Dom Abr 03, 2005 11:03

¡Felicidades por el juego! La verdad es que acabo de comenzar a utilizar la librería Adagraph, y creo que hacer un Zelda con ella tiene mucho mérito, porque tienes que crear tus propias herramientas si quieres cargar imágenes y texturas, como habéis hecho. ¡Lo dicho, enhorabuena y a seguir con él, a ver si más adelante posteas el juego completo para que podamos disfrutarlo! :D

¡Saludos!
Raistlin
Novato
Novato
 
Mensajes: 3
Registrado: Mar Mar 15, 2005 22:28

Dos palabras. Im Presionante

Notapor Flash_noi » Dom Abr 03, 2005 12:10

Está realmente bien, aunque digas que no invertistéis mucho tiempo y rápido... Yo no sé si sabría hacerlo. Está muy trabajado.

Enhorabena!!!! :shock:
Avatar de Usuario
Flash_noi
Administrador
Administrador
 
Mensajes: 89
Registrado: Mar Mar 08, 2005 20:15
Ubicación: Reus

Notapor Andres_age » Dom Abr 03, 2005 16:01

Gracias. :)
Tiempo si que hemos invertido, y mucho, lo que pasa es que hemos ido metiendo cosas una detrás de otra, sin tener una idea de que queríamos exactamente, con un diseño a veces mínimo, y en general un poco desordenado. Muchas cosas han quedado muy muy cutres (como lo de meter todos los frames en un archivo de animación, si mirais el codigo entendereis a que me refiero X-D) y otras las hemos vuelto a hacer porque sangraban a los ojos :P
Han quedado muchísimas cosas colgadas (los objetos y los personajes principalmente). Y encima nos hemos topado con los impedimentos propios de adagraph: la pulsación de teclas (si cambias la velocidad de repetición del teclado desde windows cambias la velocidad del juego X-D X-D, no puedes presionar varias teclas a la vez), el trabajar a nivel muy bajo (de pixel!) (horrible, horrible, era necesario un nivel de abstracción con los "frames", y lo hicimos muy difuso... era un procedure que había por ahí y lo pusimos en un package; tuvimos que hacer un algoritmo bastante complejo para evitar redibujar toda la animación cuando el personaje se movía, porque parpadeaba muchísimo, etc).
Pero vamos, principalmente lo hicimos para practicar con ada y divertirnos un poco, que los programas que nos daban para practicar eran realmente muy aburridos :P
Dado que disponemos de poco tiempo no podemos hacer mucho, pero poco a poco mejoraremos lo hecho y añadiremos cosas nuevas, y por supuesto cualquier ayuda es bienvenida :)
Andres_age
Moderador
Moderador
 
Mensajes: 121
Registrado: Sab Abr 02, 2005 22:40

Tiene buena pinta

Notapor gneuromante » Dom Abr 03, 2005 19:13

Aunque todavía no he podido probarlo (aun me estoy bajando adagraph con mi pobre conexion de 56k) la verdad es que tiene buena pinta y da la impresión de estar muy trabajado, por mucho que tenga esos defectos que tu mismo nos adelantas, pero me da la impresión de que hacer un videojuego es una de las tareas de programación más complicadas.

En cuanto a la IA de los personajes, desde luego que sí que tiene que ser una de las cosas más complicadas. Una solución para hacer juegos y no romperse la cabeza con la IA es hacerlos multijugador, ya que la programación cliente/servidor en Ada es relativamente fácil, por ejemplo con GLADE para sistemas distribuidos. Un ejemplo de un juego en el que todos los jugadores son IA (más que un juego es una demo) es el comecocos que encontrareis aquí.

Me pregunto si se podría portar la librería adagraph a Linux, por ejemplo implentandola sobre gtkada o incluso directamente sobre gtk. Seria un buen proyecto conjunto para el canal.
gneuromante
Gurú Moderador
Gurú Moderador
 
Mensajes: 194
Registrado: Mié Mar 09, 2005 0:34

Notapor PotajiTo » Dom Abr 03, 2005 22:12

Para juegos en ada creo que es más comodo y facil usar los bindigs de SDL, además de que no es necesario wine.
Más info aquí: http://sourceforge.net/projects/adasdl/
Yo me estoy intentando hacer un clon del tipico de la serpiente con eso.
Por cierto felicidades por el proyecto!
Imagen
PotajiTo
Iniciado
Iniciado
 
Mensajes: 12
Registrado: Dom Mar 13, 2005 0:03

Notapor gneuromante » Mié Abr 13, 2005 21:36

Bueno, pues ahora que Raistlin nos ha conseguido una version de Adagraph para Linux
http://dmi.uib.es/people/pere/ada95/download.html he intentado compilar el adazelda para Linux, pero claro el Texturas/texturas.obj esta en formato Windows y al final no linka.

Código: Seleccionar todo
gnatlink adazelda.ali
Texturas/texturas.obj: file not recognized: No se reconoce el formato del fichero


¿Alguna idea de como crearlo para Linux?
gneuromante
Gurú Moderador
Gurú Moderador
 
Mensajes: 194
Registrado: Mié Mar 09, 2005 0:34

Notapor Andres_age » Jue Abr 14, 2005 22:46

Lol, no sabía que Pere había sacado una versión para linux de adagraph2001! (no fue profesor mio, pero casi, yo voy a sistemas y él da clases a gestión).
Apenas me lo he mirado, pero sí, las texturas necesitas del rc.exe y del cvtres.exe. No se nada de esos ficheros ni que hacen, solo leí como usarlo en el adagraph.ads y seguí las instrucciones :P
Siento no poder ayudar en esto... :-( si tengo un rato me leeré que hace exactamente el rc y el cvtres y veré si hay algo parecido en linux (y sobretodo que funcione con adagraph). Quiero mejorar algunas cosas que tengo en la cabeza de adazelda (sobre todo ahora que he visto TADs) pero no tengo tiempo material, literalmente tengo más prácticas que asignaturas. A ver si para junio/julio me puedo poner en serio. Mientras aprovechad para encontrar bugs :P (a ver si conseguis entrar como root ejecutando como usuario adazelda X-D) y si teneis ideas, pues las comentais (o si teneis tiempo las poneis en práctica, teneis el código fuente :D)
Sobre usar otra librería gráfica... sí, realmente me lo he pensado muy en serio, porque adagraph trabaja a muy bajo nivel (de píxel, sin llegar a tener que hacer los algoritmos de Bresenham y Souther X-D pero casi) y es un engorro, además de ser lento y demás. Por ejemplo para evitar que el muñeco parpadee al moverse, tuve que hacer un algoritmo (que por cierto apenas está comentado, quiero mejorar eso en la próxima versión aclarando el código lo máximo posible) que calculase a donde se iba a mover, ver el terreno que iba a tapar, coger los pixeles que taparía, pintar los píxeles por donde había pasado para no dejar estela, etc etc. Vamos, que antes cogia el terreno por donde se movía el muñeco (la que llamo "sombra grafica"), pintaba el muñeco y al moverlo pintaba el terreno y volvía a repetirlo todo, con lo que parpadeaba tanto que no era apto para epilépticos X-D.
Volviendo al tema, he usado adagraph porque era la única que conocía X-D después descubrí jewl, que es más tipo ventanucos y no tanto gráficos, el gtkada que no he conseguí hacer funcionar de ninguna manera (soy muy patoso) y otras idem, que ni he conseguido hacer funcionar ni he tenido tiempo para mirarmelas. Así que cogí lo que tenía a mano: adagraph.
Ah, a proposito, dije que funcionaba en linux porque había conseguido hacer rular una práctica que usaba adagraph con wine, y aunque no había probado el adazelda pensaba que funcionaría, pero ahora que mencionas las texturas me haces dudar... al menos funciona el ejecutable?
Andres_age
Moderador
Moderador
 
Mensajes: 121
Registrado: Sab Abr 02, 2005 22:40

Linka, pero...

Notapor gneuromante » Vie Abr 15, 2005 0:06

El ejecutable si se puede compilar sin problemas si se quitan los pragma import del texturas.obj o si haces como yo que para probar a ver si sonaba la flauta por casualidad use el objcopy para crear ficheros objeto de Linux (*.o) con cada una de las texturas y con el nombre de los recursos. Pero no funciona, se abre una ventana durante un instante pero salta:

raised ADAGRAPH.ERROR_OPENING_BMP : adagraph.adb:303

Lo que no sé es si el adagraph para Linux admitira cargar bmp, pero en cualquier caso no creo que sea con recursos como en Windows (hasta donde yo sé no hay ficheros de recursos en Linux)
gneuromante
Gurú Moderador
Gurú Moderador
 
Mensajes: 194
Registrado: Mié Mar 09, 2005 0:34

donde se encuentra el fichero pragma?

Notapor esvalencia » Mar May 10, 2005 20:45

6) Ahora desde Ada, debes poner en el fichero
pragma Linker_Options("Texturas/texturas.obj");
O el nombre y ruta que quieras

No se donde debo poner la instruccion Linker_Options("Texturas/texturas.obj");
No se donde esta el fichero pragma, me gustaria mucho que me dijeras donde tengo que poner esta instrucción.
esvalencia
Novato
Novato
 
Mensajes: 2
Registrado: Mar May 10, 2005 20:42

Notapor gneuromante » Mar May 10, 2005 23:18

Tienes que poner el pragma en el fichero de codigo Ada donde vayas a usar la textura. Tienes ejemplos en adazelda-dibujar_inventario.adb
gneuromante
Gurú Moderador
Gurú Moderador
 
Mensajes: 194
Registrado: Mié Mar 09, 2005 0:34

Notapor Andres_age » Mié May 11, 2005 14:29

Esa linea la tienes que poner en el fichero (o paquete) donde usarás la textura.
Ten cuidado, porque entonces incluirás las texturas en el ejecutable, y pesará mucho. Por esa razón tengo dos paquetes de gráficos, uno para las texturas y otro para los gráficos sin texturas (este ultimo lo uso en los programas para crear escenarios y frames, que no usan texturas pero deben conocer los tipos que hay de terreno, etc).
Andres_age
Moderador
Moderador
 
Mensajes: 121
Registrado: Sab Abr 02, 2005 22:40

cargar bmp

Notapor esvalencia » Mié May 11, 2005 19:46

Muchas gracias!! Me ha sido de gran ayuda, ahora ya puedo cargar las imagenes bmp con el adagraph.
Es que soy nuevo en ada, hasta hace unos meses siempre habia programado en delphi
esvalencia
Novato
Novato
 
Mensajes: 2
Registrado: Mar May 10, 2005 20:42

Notapor Andres_age » Jue May 12, 2005 12:41

Pues nada, bienvenido al mundo de Ada, y que lo pases bien en este lenguaje ;) que no te asuste el tipado, los que programamos en ada no somos tan masoquistas como se piensa :P
Andres_age
Moderador
Moderador
 
Mensajes: 121
Registrado: Sab Abr 02, 2005 22:40


Volver a General

¿Quién está conectado?

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

cron