Hundir la flota Hundir la flota con tablero 10x10 de AGUA = ’░’ Los barcos son: Transatlántico: ‘T’= 3 Portaviones: ‘P’=5 Se pide disparo, por ejemplo “B1”. Decir si es agua o tocado Si está tocada, cambiar letra de barco tocado por asterisco. El juego se acaba cuando usuario no mete nada. Versión complicada Los barcos se colocan en posiciones al azar, no pueden salirse del tablero ni tocarse, es decir, tienen que tener casilla de agua alrededor. class Program { // Tablero de 10x10 con portaviones (P) y transatlanticos (T) //static char[,] tablero = { // { 'T', 'T', 'T', AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA}, // { AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA}, // { AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA}, // { AGUA, AGUA, AGUA, 'P', AGUA, AGUA, AGUA, AGUA, AGUA, AGUA}, // { AGUA, AGUA, AGUA, 'P', AGUA, AGUA, AGUA, AGUA, AGUA, AGUA}, // { AGUA, AGUA, AGUA, 'P', AGUA, AGUA, AGUA, AGUA, AGUA, AGUA}, // { AGUA, AGUA, AGUA, 'P', AGUA, AGUA, AGUA, AGUA, AGUA, AGUA}, // { AGUA, AGUA, AGUA, 'P', AGUA, AGUA, AGUA, AGUA, AGUA, AGUA}, // { AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA}, // { AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA, AGUA} //}; static char[,] tablero = new char[10, 10]; const char AGUA = '.'; static string portaviones = "PPPPP"; static string transatlantico = "TTT"; static string filas = "ABCDEFGHIJ"; //static int fila; //static int columna; static string coordenadaDisparo; static int contador = 0; static Random random = new Random(); static void Main() { Console.WriteLine("Bienvenido al juego de hundir la flota."); // Generamos tablero 10x10 con AGUA tablero = GenerarTablero(); // Colocamos cada barco en este caso en una columna fija (vertical) // Console.WriteLine("\nColocamos los barcos: Portavión (PPPPP) y Transatlántico (TTT)"); tablero = ColocarBarcoAleatorio(portaviones); tablero = ColocarBarcoAleatorio(transatlantico); ImprimirTablero(tablero); Jugar(); } static void Jugar() { while (coordenadaDisparo != "") { RealizarDisparo(ObtenerCoordenadaDisparo()); // Verificamos si todos los barcos han sido hundidos if (contador == portaviones.Length + transatlantico.Length) { Console.WriteLine("\n¡Felicidades, has hundido toda la flota!"); coordenadaDisparo = ""; } } Console.WriteLine("Juego terminado."); } static char[,] GenerarTablero() { char[,] tablero = new char[10, 10]; for (int fila = 0; fila < tablero.GetLength(0); fila++) { for (int columna = 0; columna < tablero.GetLength(1); columna++) { tablero[fila, columna] = '.'; } } Console.WriteLine(); return tablero; } static bool EsPosicionDisponible(int fila, int columna, int longitud) { bool correcto = false; int i = 0; // Verificar si la posición y las posiciones adyacentes están disponibles while (i < longitud) { if (columna + i >= tablero.GetLength(1) || tablero[fila, columna + i] != AGUA) { correcto = false; } else { correcto = true; } i++; } return correcto; } // static char[,] ColocarBarco(int indiceFijo, string barco) // { // // Colocar barcos manualmente en columna fija (vertical) o en fila fija (horizontal) // for (int i = 0; i < barco.Length; i++) // { // tablero[i, indiceFijo] = barco[i]; // } // } static char[,] ColocarBarcoAleatorio(string barco) { int coordXRandom = random.Next(0, tablero.GetLength(0) - barco.Length + 1); int coordYRandom = random.Next(0, tablero.GetLength(0) - barco.Length + 1); while (!EsPosicionDisponible(coordXRandom, coordYRandom, barco.Length)) { // Generar nuevas coordenadas aleatorias coordXRandom = random.Next(0, tablero.GetLength(0) - barco.Length + 1); } // Decidir aleatoriamente qué bucle ejecutar int opcionAleatoria = random.Next(2); if (opcionAleatoria == 0) { // Primer bucle. Posición aleatoria, barco colocado en columna fija for (int i = 0; i < barco.Length; i++) { tablero[coordXRandom + i, coordYRandom] = barco[i]; } } else { // Segundo bucle. Posición aleatoria, barco colocado en fila fija for (int j = 0; j < barco.Length; j++) { tablero[coordXRandom, coordYRandom + j] = barco[j]; } } return tablero; } static void ImprimirTablero(char[,] tablero) { // Columnas con números for (int i = 0; i < tablero.GetLength(1); i++) { Console.Write(" " + (i + 1) + " "); } // Filas con letra al principio for (int i = 0; i < tablero.GetLength(0); i++) { Console.Write("\n" + filas[i] + " "); for (int j = 0; j < tablero.GetLength(1); j++) { Console.Write(" " + tablero[i, j] + " "); } } Console.WriteLine(); } static string ObtenerCoordenadaDisparo() { Console.Write("\nDispara a una posición (A-J, 1-10): "); string dato = Console.ReadLine().ToUpper(); return dato; } static void RealizarDisparo(string dato) { int coordX = filas.IndexOf(dato[0]); // coordenada[0] - 'A'; int coordY = Convert.ToInt32(dato.Substring(1)) - 1; if (tablero[coordX, coordY] != AGUA) { tablero[coordX, coordY] = '*'; Console.WriteLine($"\n¡Impacto {++contador}!"); } else { Console.WriteLine("\nDisparo fallido."); } ImprimirTablero(tablero); } }