Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Movimiento De Tablero

Iniciado por Pokerry, Septiembre 15, 2018, 05:08:13 AM

Tema anterior - Siguiente tema
Buenas, necesito que me ayuden en algo y es que empece con el desarrollo de un VideoJuego su mecánica es un tablero por turno pero tengo un problemilla y es que quiero que las fichas las toco y tenga una determinada cantidad de movimientos ejemplo 5 y yo tenga a mi disposición moverme como yo quiera 3 arriba y 2 a la derecha o viceversa siempre y cuando la casilla este libre pero no se hacer la mecánica intente con Raycast pero al detectar la primera casilla las demás no se detectan ayúdenme... El Juego es 2D

yo creo que alguna especie de PathFinding por casillas le iria bien....

No sé cómo tienes hecho el tablero pero puedes hacer un bucle doble sobre las casillas para saber si las posibles casillas están libres o tienen algo:
 

public KeyValuePair<int,int> CeldasLibres (int pasos, int xInicial, int yInicial)
{
List <KeyValuePair<int,int>> celdasDisponibles;
for(int x = 0; x < pasos; x++)
{
   for (int y = 0; y < pasos-x; y++)
        {
      si [xInicial + x, yInicial + y] está libre lo añades a la lista.
      si [xInicial + x, yInicial - y] está libre lo añades a la lista.
      si [xInicial - x, yInicial - y] está libre lo añades a la lista.
      si [xInicial - x, yInicial + y] está libre lo añades a la lista.
        }
    }
return celdasDisponibles;
}

 
Si te fijas el bucle recorre primero las filas de arriba y abajo, luego se mueve una a la derecha e izquierda cada vez, ya depende de cómo tengas tu tablero, también tienes que tener en cuenta que si tienes un array no debes de acceder a posiciones que no estén contenidas dentro del array, por ejemplo si alguna coordenada es negativa no debes de usar esa posición.

Septiembre 15, 2018, 08:25:46 PM #3 Ultima modificación: Septiembre 15, 2018, 08:26:54 PM por Pokerry
Cita de: juanma_teso date=1537015321No sé cómo tienes hecho el tablero pero puedes hacer un bucle doble sobre las casillas para saber si las posibles casillas están libres o tienen algo:
   
   

public KeyValuePair<int,int> CeldasLibres (int pasos, int xInicial, int yInicial)
{
List <KeyValuePair<int,int>> celdasDisponibles;
for(int x = 0; x < pasos; x++)
{
   for (int y = 0; y < pasos-x; y++)
        {
      si [xInicial + x, yInicial + y] está libre lo añades a la lista.
      si [xInicial + x, yInicial - y] está libre lo añades a la lista.
      si [xInicial - x, yInicial - y] está libre lo añades a la lista.
      si [xInicial - x, yInicial + y] está libre lo añades a la lista.
        }
    }
return celdasDisponibles;
}

   
      Si te fijas el bucle recorre primero las filas de arriba y abajo, luego se mueve una a la derecha e izquierda cada vez, ya depende de cómo tengas tu tablero, también tienes que tener en cuenta que si tienes un array no debes de acceder a posiciones que no estén contenidas dentro del array, por ejemplo si alguna coordenada es negativa no debes de usar esa posición.
   


@juanma_teso Pues muchas gracias por tu ayuda

Etiquetas: