Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: arcangelcaos en Junio 01, 2015, 10:27:19 AM

Título: Ayuda con IA de enemigo en GRID rombo
Publicado por: arcangelcaos en Junio 01, 2015, 10:27:19 AM
Hola, llevo una semana, y no hay manera de conseguir una ia decente en cuanto al movimiento.
Tengo una room con unas grid en forma de rombos, no cuadradas.
La cosa es que la fila en la que estoy tiene 96pixlees de ancho, pero las filas superior e inferior esta a 72 de alto, es por la forma de rombo.
Tengo suelos que consumen más puntos de movimientos que otros.
Yo tengo lo siguiente es psuocodigo.(no me acuerdo como se escribe)

Detecte "amigo", soy yo.
Si es la misma y, comprueba la x, para mover a derecha o izquierda.
Comprueba si se puede mover al siguiente rombo, si no, comprueba el de arriba, y si no el de abajo.
Si no se puede mover a ninguno, comprueba si tiene mas 2 o mas movimientos y comprueba a 2 rombos de distancia.
Cuando consigue moverse, si le quedan movimiento vuelve a comprobar. Así hasta 0 movimientos.
Igual para todas las posibles y, menos y, mas y, menos x, mas x,......

Lo que pasa es que a veces con este código hace retronó, por ejemplo, delante no puede, mueve arriba, cuando llega arriba, no puede, vuelve abajo. Entonces no hace nada verdaderamente.

Alguno me puede orientar algo, como lo haría, quizás este planteando mal el movimiento, solo tiene ese fallo, que según la cantidad de amigos y la posición de los bosques, pantanos, que cuestan mas movimientos, no se mueve prácticamente, se queda en el mismo sitio, y si tiene por donde ir.

Con los movimientos de mis personajes no hay problema porque yo elijo donde ir.

Gracias al que me eche una mano.
Título: Re:Ayuda con IA de enemigo en GRID rombo
Publicado por: ferhand en Junio 02, 2015, 02:16:59 AM
Saludos Makero arcangelcaos:

Crear un IA no es cosa fácil, pero tampoco es imposible.

Por lo que me cuentas, y llego a entender, quieres que el enemigo cree un camino hasta el personaje principal seleccionando entre los distintos tipos de terrenos que existen. Los distintos terrenos se diferencian en el costo empleado para recorrer cada uno de ellos.

Bueno hasta donde veo solo necesitas algún algoritmo de "camino recorrido" donde le adaptes los costos de cada nodo. Hay muchos en la internet, ni siquiera tienes que crear uno desde cero.

Un consejo sería que crearas un mapa "invisible" donde solo tengas las coordenadas de los puntos centrales de cada celda y el costo del tipo de terreno, para que no tengas problemas con el tamaño de las casillas. Dicho mapa no se muestra, pero se utilizaría para que la IA sacara sus cálculos y tomara dichos puntos como referencias. No importa si la cuadrícula (grilla no existe en el diccionario) es romboidal o como sea. El mapa invisible es una simple lista de puntos de la cual la IA se alimentaría para determina los caminos. Incluso sería muy útil colocar en dicha lista los elementos obstáculos (como otros personajes, enemigos o amigos, paredes o rocas, etc.)

Si tienes interés en este tema, te puedo dar algunos consejos.

Espero te haya inspirado para algo, cualquier cosa pregunta...

Hasta la próxima.
Título: Re:Ayuda con IA de enemigo en GRID rombo
Publicado por: arcangelcaos en Junio 02, 2015, 08:20:24 AM
Exacto, gracias. Eso es lo que necesito. Pero estoy un poco perdido con las grids. Los movimientos de mis unidades si se hacerlas, porque soy yo el que elijo a donde ir. Pero con las de la ia, ando un poco perdido. Consigo que se muevan y vayan hacia tus unidades y le ataken, pero segun la posicipn del resto, a veces hacen movimientos ilógicos, y no consigo desarrollar un script aceptable.
Yo he visto muchos script, pero todos para moverlos tu. No la ia, y hay es donde me pierdo un poco. Lo mas seguro es que lo este enfocando mal, pero llevo casi 2 semanas dandole vueltas y no consigo imaginarme uno que funcione bien, o el que me imagino no es nada optimizado. Es con muchisimos if. Si tienes tiempo y ganas haber si me hechas una pequeña mano.
Si puedes o kieres kedamos por teamviewer o algo asi, y te enseño como va la cosa.  Ten en cuents que soy autodidacta, asi que kizas este todo hecho un churro... XD
Título: Re:Ayuda con IA de enemigo en GRID rombo
Publicado por: Clamud en Junio 03, 2015, 04:22:56 PM
Puedes simplificar las cosas usando el sistema de :GMS: para buscar caminos (mp_grid), y usar un algoritmo que transforme las coordenadas dentro de la grid cuadrada, en coordenadas de la grid romboidal.

Pero, si quieres características especiales para cada terreno, es mejor programar tu propio sistema: http://www.comunidadgm.org/articulos/pathfinding-(programaci243n)/ (http://www.comunidadgm.org/articulos/pathfinding-(programaci243n)/)
Título: Re:Ayuda con IA de enemigo en GRID rombo
Publicado por: ferhand en Junio 04, 2015, 02:35:18 AM
Saludos Makero arcangelcaos:

Las IAs son muy divertidas de programar, pero la diferencia entre programar una IA y parchear un juego radica en la organización del código. Si el código del juego lo estructuraste de forma tal que las acciones de los personajes se ejecuten como si tuvieras un "joystick" entonces será muy fácil programar la IA. A lo que me refiero es que cada acción(digamos avanzar, atacar, etc) se ejecute simplemente llamando a una función o algo parecido. Si el código está pensado de esta manera no será muy engorroso la programación de la IA. De lo contrario puedes estar intentándolo y pasarás mucho trabajo creando los "scripts". Créeme cuando te digo que muchas veces sale mejor hacerlo bien, otra vez, desde el principio, que tratar de parchear lo que está hecho.  ???

En tu caso, creo, que debes crear una función (script) para avanzar una casilla, otra función para atacar, otra función para chequear si un casilla en particular está vacía o no, etc. Debes tener las acciones posibles del juego separadas en funciones. Una vez todo esté organizado de esta manera solo resta crear los "scripts" IAs. Estos "script" realizarán los "razonamientos" y ejecutarán las acciones llamando a las funciones (scripts) correspondientes.

Ahora, el "razonamiento" lógico que debe hacer una IA depende de la estrategia a seguir en el juego:
** Supongo que lo primero sea chequear en el rango de visión si hay enemigos, amigos, etc.
** Luego, según la prioridad realizará las acciones que puede hacer. Tal vez calcula que puede atacar si se acerca a un enemigo lo suficiente o simplemente decide huir y curarse para preservar la vida. Todo depende de la estrategia.

¿Cómo se determina lo que debe hacer primero o mejor? Dándole un valor de peso (importancia) a las acciones según la situación y es ahí donde radica la efectividad de la IA. ¡Los pesos! Una vez establecidos los pesos se colocan las acciones en una lista ordenadas por su peso y se ejecutan en orden.
Ahora si las batallas son a "tiempo real" siempre es mejor que la acciones se seleccionen cada un cierto tiempo, para adaptar la estrategia. Si las batallas son "por turnos" la lista solo se llena una vez en cada turno, pudiéndose analizar la estrategia mucho mejor, con calma. Todo depende del juego que estés haciendo.

Disculpa, pero no tengo acceso a teamviewer o algo parecido. Soy de Cuba y desde donde me conecto no tengo permitido acceso a redes sociales. Te puedo ayudar si quieres, no tengo inconvenientes, pero será a través de la ComunidadGM. Disculpa.

Espero hayas entendido lo que explicó a "grosso modo". Las GIA de la comunidad pueden enseñar mucho sobre ese tema.

Una saludo y hasta la próxima.
Título: Re:Ayuda con IA de enemigo en GRID rombo
Publicado por: arcangelcaos en Junio 04, 2015, 08:19:13 AM
Muchisimas gracias. Viendo los consejos y enlaces y tal, he conseguido hacer una ia medio decente. Me explico.
No tienen rango de vision, ven a todas las unidades. El campo de batalla es pequeño. Lo que hago primero es cimprobar si hay alguien a quien atakar en rango, dado que eso si tienen. Si no hay nadie, buscan al "amigo" mas cercano. Luego con un script k tengo marcan las casillas a donde pueden ir con los movimientos que tienen. Algunos tienen 1, otros 2, o 3 hasta 4.
Luego con otro script busca el punto mas cercano al "amigo" detectado. Y despues se mueve alli, y luego realiza el script de atake.
Solo me keda por ver los que tiene 2 o mas de rango de atake que no tienen porque ir a la casilla mas cercana, si desde mas lejos llega atacando.
Mas o menos eso es lo que llevo hasta ahora. Por mas que veo los tuto y tal, no termino de cogerlo. Lo del algoritimo A*. Haber lo entiendo por no lo comprendo o como kerais verlo.
Título: Re:Ayuda con IA de enemigo en GRID rombo
Publicado por: ferhand en Junio 05, 2015, 02:58:02 AM
Saludos Makero arcangelcaos:

No sabía que lo necesitabas era el algoritmo de hallar camino en sí.
En este link:  http://www.policyalmanac.org/games/articulo1.htm  (http://www.policyalmanac.org/games/articulo1.htm) está bastante bien explicado
Espero resuelvas el problema.

Hasta la próxima.