Antes de exponer mi problema, quisiera felicitaros por esta gran comunidad que habeis formado y daros las gracias por adelantado por vuestra ayuda.
Iré al grano: he empezado a programar juegos en flash este curso en una asignatura de la universidad, y debo crear un juego de combate por turnos al estilo "Advance Wars". El caso es que ya tengo implementada la parte inicial gracias a los inestimables tutoriales de Tonypa (tablero con hextiles: http://www.tonypa.pri.ee/tbw/tut25.html), tengo implementado el movimiento de las naves del Jugador 1 y las naves de la CPU son insertadas mediante randoms, pero ahora necesito implementar algun tipo de lógica para el movimiento de las naves CPU por el tablero y no consigo encontrar nada que sea fácilmente implementable! Encontré los códigos de ejemplo de Amit J Patel de pathfinding (http://www-cs-students.stanford.edu/~amitp/game-programming/a-star-flash/) orientado a tiles triangulares, cuadrados y hexagonales, he probado los swf de los dos primeros (puesto que amablemente nos los ofrece junto al código) pero no consigo compilar el caso de los tiles hexagonales que es el que me interesa, y creo que es lo que más se parece a lo que necesito, puesto que quiero que se vea el desplazamiento de las naves por los tiles "caminables".
En resumen, dado un tablero de tiles hexagonales alineados verticalmente (representado cada tile por un duplicateMovieClip de un hextile) necesito implementar el código para el movimiento de las naves a través de éstas. Os adjunto el código que sirve para introducir los tiles en la pantalla (básicamente una traducción del código de Tonypa que muchos ya conocereis):
Código ActionScript :
function creaGraella(graella) { //Adjuntamos un movieClip vacío ("Buit") _root.attachMovie("Buit","tiles",1); //Valor de inicio de profundidad para las naves var prof = 1000; //Clip contendrá los tiles joc.clip = _root.tiles; //Asignamos a clip las medidas del tile hexagonal joc.clip._x = joc.tileMida; joc.clip._y = joc.tileAlcada/2; //Colocamos los tiles hexagonales. //Les variables x, y son las coordenadas en el sistema de referencia de cada tile hexagonal for (var y = 0; y<alt_taulell; ++y) { for (var x = 0; x<ample_taulell; ++x) { //Nombramos el nuevo tile var nomTile = "t_"+x+"_"+y; joc.clip.attachMovie("Hextile",nomTile,y*100+x*2); joc.clip[nomTile]._x = x*joc.tileMida*1.5; joc.clip[nomTile].xtile = x; //Debemos determinar si estamos en columna par o impar //Es por eso que se hace necesario añadir la mitad de la altura del tile en función de si es par o impar joc.clip[nomTile]._y = y*joc.tileAlcada+x%2*joc.tileAlcada/2; joc.clip[nomTile].ytile = y; //Asignamos aleatoriamente si el tile será PISABLE ("TREPITJABLE") o NO PISABLE("NO_TREPITJABLE") var aleatori = Math.random(); //trace("Tile "+nomTile); //trace(aleatori<0.2); if (aleatori<0.1) { joc.clip[nomTile].tipus = NO_TREPITJABLE; joc.clip[nomTile].gotoAndStop("no_trepitjable"); } else { joc.clip[nomTile].tipus = TREPITJABLE; joc.clip[nomTile].gotoAndStop("trepitjable"); } } } }
Si conoceis alternativas al pathfinding para este tipo de juegos, estoy abierto a sugerencias, y por favor si necesitais más información acerca del juego para resolver mis dudas no dudeis en pedirmelo!
Gracias de nuevo!