// 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); } } } }
// 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); }
// 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); }