Búsqueda de personajes y pathfinding (era: Felicitaciones !)

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

Búsqueda de personajes y pathfinding (era: Felicitaciones !)

Notapor Shellman » Mié Ene 31, 2007 5:51 pm

Bueno, primero que todo quiero saludar a todos los miembros de esta comunidad, y decirles que los felicito por crear y mantener esta pagina.

Me gustaria hacerles una consulta, me gustaria ver el codigo del juego volleyball ya que me ha parecido muy interesante la forma como lo han programado y como manejan las colisiones y todo eso, ya me he leido varios articulos de la web y he aprendido en pocos dias lo que habia tratado de aprender desde que comence mi carrera profesional, la cuestion es que estoy realizando mi segundo juego (porque el primero fue basado en las lecciones del "(ebook) Programacion de videojuegos con SDL"), y quiero realizar una busqueda de caracteres como el de volleyball, pero no encuentro un articulo que contenga un ejemplo de esto.

Les agradeceria muchisimo si me pudieran ayudar, y cuenten con mi ayuda para cualquier cosa que necesiten (si mi tiempo me alcanza) con mucho gusto les ayudare. :D
Shellman
 
Mensajes: 16
Registrado: Mié Ene 31, 2007 5:32 pm
Ubicación: Cartagena, Colombia

Notapor Geo » Jue Feb 01, 2007 12:41 am

El código fuente lo descargas de la misma página del juego:

http://www.losersjuegos.com.ar/juegos/v ... eyball.php

Saludos,
JJ (Geo).
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Re: Felicitaciones !!!

Notapor hugoruscitti » Jue Feb 01, 2007 4:29 pm

Shellman escribió:Bueno, primero que todo quiero saludar a todos los miembros de esta comunidad, y decirles que los felicito por crear y mantener esta pagina.

Me gustaria hacerles una consulta, me gustaria ver el codigo del juego volleyball ya que me ha parecido muy interesante la forma como lo han programado y como manejan las colisiones y todo eso, ya me he leido varios articulos de la web y he aprendido en pocos dias lo que habia tratado de aprender desde que comence mi carrera profesional, la cuestion es que estoy realizando mi segundo juego (porque el primero fue basado en las lecciones del "(ebook) Programacion de videojuegos con SDL"), y quiero realizar una busqueda de caracteres como el de volleyball, pero no encuentro un articulo que contenga un ejemplo de esto.
Buenas, muchas gracias por los comentarios sobre la web.

Te comento que soy uno de los programadores del juego Volleyball, y
como te comentaba Geo el código del programa está disponible para que
puedas estudiarlo, modificarlo y redistribuirlo.

Con respecto a la consulta, si te refieres a la búsqueda
de personajes en archivos de disco
debes analizar el archivo "characters.c", ahí encontrarás
reunidas todas las funcionalidades asociadas a la búsqueda y carga
de personajes adicionales para el juego.

Resumiendo algunas lineas de código, lo importante es abrir un
directorio y leer cada una de las entradas del mismo:

Código: Seleccionar todo
dir = opendir (path);

for (element = readdir (dir); element; element = readdir (dir))
{
    char * file = element->d_name;

    if (strcmp (file, ".") && strcmp (file, ".."))
        characters_new_player (data, path, file);
}


La función "opendir" recibe una cadena indicando una ruta de
directorio y nos retorna una estructura de datos que representa
el directorio abierto (si existe, nota que aquí eliminé ese
control para resumir).

Luego "readdir" lee una a una las entradas del directorio y retorna
NULL cuando a llegado al final del directorio y ya no puede leer
mas nombres de archivo. Es por ese motivo que el ciclo "For" de
arriba se encarga de leer todo el directorio completo y llamar a
la función "characters_new_player" si el nombre de la entrada
de directorio ('.', '..', directorio o archivo) no es '.' ni '..'.

Leer y analizar directorios es un poco complicado en C, pero hay
mucha documentación al respecto y siempre nos puedes consultar.

La función "characters_new_player" simplemente genera una nueva
estructura de personaje a partir de un directorio y luego lo
añade a una lista.

Sería interesante que nos contaras que rutina quieres desarrollar
con respecto a tu juego, puede que te pueda sugerir algunas ideas.


Shellman escribió:Les agradeceria muchisimo si me pudieran ayudar, y cuenten con mi ayuda para cualquier cosa que necesiten (si mi tiempo me alcanza) con mucho gusto les ayudare. :D
Yo necesito algo, si tienes la oportunidad me gustaría ver aportes
en la sección "Ejemplos", es una de mis favoritas y creo que ayudan
a muchas personas. Insisto, solo si tienes la oportunidad puedes
desarrollar un ejemplo simple y enviarme una copia para que pueda subirlo
a la web. Eso sí, sería bueno que antes leas la sección:

http://www.losersjuegos.com.ar/referenc ... jemplo.php

Muchas gracias.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Gracias !!!

Notapor Shellman » Sab Feb 03, 2007 6:59 am

Les doy las gracias a ambos por sus respuestas (Geo y hugoruscitti), ademas les comento que estoy muy ansioso por terminar el pequeño juego que estoy haciendo para ponerlo en la seccion de ejemplos.

Otra consulta que quiero hacer y la voy a necesitar mas adelante en el juego (creo...), es como hacer para que el personaje de mi juego vaya a un lugar de la pantalla donde yo de click, imaginemos que fuera (age of empire u otro juego parecido), que damos click en un lugar del mapa (:shock: creo que estoy pensando en grande muy rapido), perdon..., doy click en un lugar de la pantalla y el personaje se dirige hacia ese punto, ya estoy terminando de hacer un pequeño metodo para que haga las veces del metodo A*, pero creo que necesito un poquito de ayuda.

En lo que me puedan ayudar les estaria muy agradecido.

Bye, nos vemos luego... :? perdon, nos leemos luego.
Shellman
 
Mensajes: 16
Registrado: Mié Ene 31, 2007 5:32 pm
Ubicación: Cartagena, Colombia

Re: Gracias !!!

Notapor hugoruscitti » Sab Feb 03, 2007 4:13 pm

Shellman escribió:Otra consulta que quiero hacer y la voy a necesitar mas adelante en el juego (creo...), es como hacer para que el personaje de mi juego vaya a un lugar de la pantalla donde yo de click, imaginemos que fuera (age of empire u otro juego parecido), que damos click en un lugar del mapa (:shock: creo que estoy pensando en grande muy rapido), perdon..., doy click en un lugar de la pantalla y el personaje se dirige hacia ese punto, ya estoy terminando de hacer un pequeño metodo para que haga las veces del metodo A*, pero creo que necesito un poquito de ayuda.

Claro, es precisamente el método A* uno de los mas indicados para
realizar búsquedas de camino, aunque se debe ver con que
clase de información cuentas en tu juego para poder adaptar el
método.

Y en cuanto necesites ayuda simplemente nos la pides, sabemos
poco pero podemos aprender...

Buena suerte.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor Shellman » Sab Feb 03, 2007 6:45 pm

Basicamente lo que necesito es una indicacion de donde podria poner el metodo para mover el personaje, tengo un metodo llamado:

mover_hasta(int x, int y);

El cul recibe las coordenadas hacia donde tiene que llegar, pero no se en que parte del ciclo de juego tendria que meter la llamada a este metodo.

Ya hice una prueba pero el personaje solo da un paso y luego no se mueve mas, y el programa se bloquea (no me permite hacer nada mas, ni moverlo con las teclas de direccion ni nada).

Estoy tratando de encontrar el mejor lugar para poner la llamada al metodo pero no logro encontrarla, si tienen una idea me avisan, yo seguire intentando buscar un buen lugar para ponerla.

Bye...
Shellman
 
Mensajes: 16
Registrado: Mié Ene 31, 2007 5:32 pm
Ubicación: Cartagena, Colombia

Notapor hugoruscitti » Sab Feb 03, 2007 9:30 pm

Shellman escribió:Basicamente lo que necesito es una indicacion de donde podria poner el metodo para mover el personaje, tengo un metodo llamado:

mover_hasta(int x, int y);

El cul recibe las coordenadas hacia donde tiene que llegar, pero no se en que parte del ciclo de juego tendria que meter la llamada a este metodo.

Es complicado imaginarlo, pero en muchos juegos el puntero
del mouse se representa mediante un objeto que conoce al
personaje y el escenario del juego. De forma que al recibir
un evento click, el objeto que representa al mouse le dice
al personaje:

mover_hasta(direccion_x_del_mouse, direccion_y_del_mouse)

el punto es que este método solamente tiene que crear el
camino "probablemente mas corto" desde donde está hasta
ese punto indicado en los parámetros del método.

Luego, el personaje debería almacenar la ruta a recorrer y
avanzar a través de ella mas adelante.

Shellman escribió:Ya hice una prueba pero el personaje solo da un paso y luego no se mueve mas, y el programa se bloquea (no me permite hacer nada mas, ni moverlo con las teclas de direccion ni nada).

Estoy tratando de encontrar el mejor lugar para poner la llamada al metodo pero no logro encontrarla, si tienen una idea me avisan, yo seguire intentando buscar un buen lugar para ponerla.
Bye...

Pienso que el método que realizas estaría oportuno para indicarle
al jugador que busque un camino y recuerde comenzar a caminar.

Es probable que el personaje se quede detenido porque has utilizado
el método para elegir el camino y caminar, en lugar de separar
las dos acciones.

Es útil gestionar el comportamiento de cada personaje del juego
en base a "estados", es decir, que el personaje esté en estado
"normal/esperando" hasta que recibe el método "mover_hasta", en ese
instante calcula un camino y cambia a estado "caminando" en
donde recorre el camino hasta llegar a destino, en ese momento
cambia nuevamente el estado "normal/esperando".

Entonces, tu juego llamaría constantemente a un método para
realizar el estado de personaje actual, por ejemplo, esperar o
caminar (solo un paso), y el evento "mover_hasta" simplemente
genera una nueva ruta para que el personaje comience a caminar
hacia otra dirección.

En el artículo:
http://www.losersjuegos.com.ar/referenc ... omatas.php

explico una forma de implementar estados en un personaje.
Lamentablemente nunca pude ampliar ese artículo para mostrar
otra aproximación mas sencilla al mismo asunto, llamada
State Pattern:

http://es.wikipedia.org/wiki/State_(pat ... ise%C3%B1o)

Suerte.

pd: sería bueno cambiar el "asunto" de este mensaje, para que
sea mas fácil de encontrar a quienes lo busquen ¿no?
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor rcaf » Dom Feb 04, 2007 7:03 am

Quizás tienes algún problema en la implementación del algoritmo A*.

Normalmente para estos casos se divide el mundo (mapa del juego) en tiles.

Además de mantener un mapa del juego con la información de los tiles, se tiene otra matriz con valores 0 (espacio vacio) y 1 (ocupado).

Entonces si quieres mover un objeto de un punto a otro, inicialmente tendrás una posición (x, y) medida en pixeles. Con estos datos debes primero saber en que posición o celda (de la matriz) se encuentra el objeto.

Transformación de coordenadas en pixeles a coordenadas lógicas de la matriz:

fila = y / alto_tile;
columna = x / ancho_tile;


Luego para el punto final, se realiza la misma operación, pasar de coordenadas en pixeles a coordenadas lógicas (de la matriz). Teniendo estos dos pares de posiciones, se la pasamos a la función que implementa el algoritmo A*, y esta probablemente nos devolverá una matriz con 0's y 1's, donde los 1 corresponden a la ruta más corta desde punto inicial al punto final.

Con estos datos en la matriz resultante, se debe implementar algún mecanismo que vaya recorriendo la matriz (solo los que tienen el valor 1) e ir moviendo el personaje por la ruta obtenida.

A continuación te dejo algunos artículos que hablan sobre este método, el pathfinding.

An Introduction to Pathfinding
http://www.devmaster.net/articles/pathfinding/

A* Pathfinding para Principiantes
http://www.policyalmanac.org/games/aStarTutorial_es.htm

En http://www.gamedev.net recuerdo que habían algunos tutoriales sobre el tema. Pero ahora no los puedo linkear ya que justo ahora el sitio se encuentra en mantención.

Saludos!
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

Gracias

Notapor Shellman » Lun Feb 05, 2007 12:16 am

Precisamente, ya habia decidido trabajar los estados del personaje, ya lei todos los articulos de la web incluyendo el de automatas y ahora creo que si podre mejorar el juego.

Estoy de acuerdo en que se cambie el titulo del tema, pero no sabria que titulo ponerle pueden hacerlo ustedes.
Shellman
 
Mensajes: 16
Registrado: Mié Ene 31, 2007 5:32 pm
Ubicación: Cartagena, Colombia


Volver a General

¿Quién está conectado?

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

cron