Ejemplo n.º 1
0
        // Recursividad
        public static void ComprobarCamino(Laberinto laberinto, Casilla casillaActual)
        {
            if (casillaActual.IsFin())
            {
                laberinto.SetCamino(true);
            }
            else
            {
                int     posXnueva, posYnueva;
                Casilla casillaNueva;
                int[,] movimientos = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } };

                for (int i = 0; i < movimientos.GetLength(0); i++)
                {
                    posXnueva    = casillaActual.GetPosX() + movimientos[i, 0];
                    posYnueva    = casillaActual.GetPosY() + movimientos[i, 1];
                    casillaNueva = laberinto.GetCasillaComprobada(posXnueva, posYnueva);

                    if (laberinto.MovimientoDisponible(casillaActual, casillaNueva, i))
                    {
                        casillaActual.SetVisitado(true);
                        ComprobarCamino(laberinto, casillaNueva);
                        casillaActual.SetVisitado(false);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        // 0 Arriba, 1 Derecha, 2 Abajo, 3 Izquierda
        public bool MovimientoDisponible(Casilla casillaActual, Casilla casillaDestino, int movimiento)
        {
            if (casillaDestino != null && !casillaDestino.IsVisitado())
            {
                return(casillaActual.MovimientoDisponible(movimiento));
            }

            return(false);
        }
Ejemplo n.º 3
0
        // Construimos el tablero a partir de las posiciones solicitadas al usuario
        public static Casilla[,] ConstruirTablero(char[,] pos)
        {
            Casilla[,] tablero = new Casilla[pos.GetLength(0), pos.GetLength(1)];

            for (int x = 0; x < pos.GetLength(0); x++)
            {
                for (int y = 0; y < pos.GetLength(1); y++)
                {
                    bool arriba = false, derecha = false, abajo = false, izquierda = false, inicio = false, fin = false;

                    // Comprobamos arriba
                    if (x - 1 >= 0)
                    {
                        if (pos[x - 1, y] == 'E' || pos[x - 1, y] == 'S' || pos[x - 1, y] == '.')
                        {
                            arriba = true;
                        }
                    }

                    // Comprobamos derecha
                    if (y + 1 < pos.GetLength(1))
                    {
                        if (pos[x, y + 1] == 'E' || pos[x, y + 1] == 'S' || pos[x, y + 1] == '.')
                        {
                            derecha = true;
                        }
                    }

                    // Comprobamos abajo
                    if (x + 1 < pos.GetLength(0))
                    {
                        if (pos[x + 1, y] == 'E' || pos[x + 1, y] == 'S' || pos[x + 1, y] == '.')
                        {
                            abajo = true;
                        }
                    }

                    // Comprobamos izquierda
                    if (y - 1 >= 0)
                    {
                        if (pos[x, y - 1] == 'E' || pos[x, y - 1] == 'S' || pos[x, y - 1] == '.')
                        {
                            izquierda = true;
                        }
                    }

                    // Comprobamos entrada
                    if (pos[x, y] == 'E')
                    {
                        inicio = true;
                    }

                    // Comprobamos salida
                    if (pos[x, y] == 'S')
                    {
                        fin = true;
                    }

                    // Metemos la casilla en el tablero con los parámetros obtenidos
                    tablero[x, y] = new Casilla(x, y, new bool[] { arriba, derecha, abajo, izquierda }, inicio, fin);
                }
            }

            return(tablero);
        }