public void servidor() { Console.SetCursorPosition(24, 18); Console.WriteLine("Buscando un cliente disponible..."); try { sS.Bind(ipS); sS.Listen(25); Socket accepted = sS.Accept(); // 1º Espera sC.Connect(ipC); // 2º Confirma Console.SetCursorPosition(24, 18); Console.WriteLine(" "); Console.SetCursorPosition(24, 18); Console.WriteLine("Conexión establecida con éxito!"); NetworkStream net = new NetworkStream(sC); Thread.Sleep(1000); Console.SetCursorPosition(24, 20); Console.Write("Esperando a que el cliente coloque sus barcos..."); string strData = null; while (strData == null) { byte[] buffer = new Byte[255]; int rec = accepted.Receive(buffer, 0, buffer.Length, 0); Array.Resize(ref buffer, rec); strData = Encoding.ASCII.GetString(buffer); } Console.SetCursorPosition(24, 22); Console.Write("Ahora coloca tus barcos."); Thread.Sleep(1000); do // Validación del menú secundario { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("Introduce tu nombre: "); nombreJ1 = Console.ReadLine(); while (nombreJ1.Length < 1 || nombreJ1.Length > 10) { while (nombreJ1.Length > 10) { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write(" "); Console.SetCursorPosition(24, 11); Console.Write("Pon un nombre más corto: "); nombreJ1 = Console.ReadLine(); } while (nombreJ1.Length < 1) { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write(" "); Console.SetCursorPosition(24, 11); Console.Write("Debes colocar un nombre: "); nombreJ1 = Console.ReadLine(); } } turnos.setNombreJ1(nombreJ1); colocBarcos.setNombreJ1(nombreJ1); Console.SetCursorPosition(24, 13); Console.Write("Coloca tus embarcaciones\n"); Console.SetCursorPosition(24, 14); Console.Write("------------------------\n"); Console.SetCursorPosition(24, 15); Console.Write("(1) Automáticamente\n"); Console.SetCursorPosition(24, 16); Console.Write("(2) Manualmente\n"); Console.SetCursorPosition(24, 18); Console.Write(">>> "); validar = int.TryParse(Console.ReadLine(), out opcion2); }while(opcion2 != 1 && opcion2 != 2); switch (opcion2) { case 1: colocBarcos.colocacionBarcosAutomatJ1(); break; case 2: colocBarcos.colocacionBarcosManualJ1(); break; } turnos.setTablero1(colocBarcos.getTableroJ1()); turnos.setTablero2(colocBarcos.getTableroJ2()); turnos.setPosJ2(colocBarcos.getPosJ2()); turnos.setBarcosJ1(colocBarcos.getBarcosJ1()); turnos.setBarcosJ2(colocBarcos.getBarcosJ2()); string text = "fin"; // Barcos colocados, Comienza la partida! byte[] data = Encoding.ASCII.GetBytes(text); sC.Send(data); byte[] buffer2 = new Byte[255]; // Guardo su nombre int rec2 = accepted.Receive(buffer2, 0, buffer2.Length, 0); Array.Resize(ref buffer2, rec2); nombreJ2 = Encoding.ASCII.GetString(buffer2); turnos.setNombreJ2(nombreJ2); byte[] data2 = Encoding.ASCII.GetBytes(nombreJ1); // Envío el nombre sC.Send(data2); BinaryFormatter bf = new BinaryFormatter(); // Guardo su tablero tableroJ2 = (int[, ])bf.Deserialize(net); // if(int i=0; i<tableroJ1.Length;i++){ // if(int j=0; tableroJ2<tableroJ2.Length;j++){ // if(tableroJ1 == 1 || tableroJ1 == (char)'B'){ // byte[] data3 = Encoding.ASCII.GetBytes(tableroJ1[i,j]); // Envío el nombre // sC.Send(data3); // } // } // } do // Cambia el turno de J1 a J2 y viceversa { do // Vuelve a tirar J1 si hunde un barco { turnos.introducirFila(); turnos.introducirColumna(); turnos.realizarComprobacionesJ1(); }while(colocBarcos.getTableroJ2()[turnos.getFila() - 1, turnos.getColumna() - 1] == (char)'X' && turnos.getRepetirTirada() == true); do // Vuelve a tirar J2 si hunde un barco { turnos.ataqueAlAzarDeJ2(); turnos.realizarComprobacionesJ2(); }while(colocBarcos.getTableroJ1()[turnos.getFila() - 1, turnos.getColumna() - 1] == (char)'X' && turnos.getRepetirTirada() == true); if (turnos.getBarcosJ1() == 0) { Console.Write("Has perdido la partida. La próxima vez será."); Console.ReadKey(); break; } }while(turnos.getBarcosJ2() != 0); // Si todos los barcos enemigos están hundidos, se acabó la partida Console.Write("Has ganado la partida. Enhorabuena!!"); }catch (Exception ex) { Console.WriteLine("\nConexión perdida..."); Console.WriteLine(ex.Message); Console.ReadKey(); } }
public void cliente() { Console.SetCursorPosition(24, 18); Console.WriteLine("Conectandose al servidor..."); try { sC.Connect(ipC); sS.Bind(ipS); sS.Listen(25); Socket accepted = sS.Accept(); Console.SetCursorPosition(24, 18); Console.WriteLine("Conexión establecida con éxito!"); NetworkStream net = new NetworkStream(sC); Thread.Sleep(1000); do { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("Introduce tu nombre: "); nombreJ1 = Console.ReadLine(); while (nombreJ1.Length < 1 || nombreJ1.Length > 10) { while (nombreJ1.Length > 10) { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write(" "); Console.SetCursorPosition(24, 11); Console.Write("Pon un nombre más corto: "); nombreJ1 = Console.ReadLine(); } while (nombreJ1.Length < 1) { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write(" "); Console.SetCursorPosition(24, 11); Console.Write("Debes colocar un nombre: "); nombreJ1 = Console.ReadLine(); } } turnos.setNombreJ1(nombreJ1); colocBarcos.setNombreJ1(nombreJ1); Console.SetCursorPosition(24, 13); Console.Write("Coloca tus embarcaciones\n"); Console.SetCursorPosition(24, 14); Console.Write("------------------------\n"); Console.SetCursorPosition(24, 15); Console.Write("(1) Automáticamente\n"); Console.SetCursorPosition(24, 16); Console.Write("(2) Manualmente\n"); Console.SetCursorPosition(24, 18); Console.Write(">>> "); validar = int.TryParse(Console.ReadLine(), out opcion2); }while(opcion2 != 1 && opcion2 != 2); switch (opcion2) { case 1: colocBarcos.colocacionBarcosAutomatJ1(); break; case 2: colocBarcos.colocacionBarcosManualJ1(); break; } turnos.setTablero1(colocBarcos.getTableroJ1()); turnos.setTablero2(colocBarcos.getTableroJ2()); turnos.setPosJ2(colocBarcos.getPosJ2()); turnos.setBarcosJ1(colocBarcos.getBarcosJ1()); turnos.setBarcosJ2(colocBarcos.getBarcosJ2()); string text = "fin"; // Barcos colocados, le toca colocarlos al server byte[] data = Encoding.ASCII.GetBytes(text); sC.Send(data); Thread.Sleep(1500); Console.SetCursorPosition(1, 22); Console.Write("Esperando a que el servidor coloque sus barcos..."); string strData = null; while (strData == null) // Confirmamos que el server los ha colocado { byte[] buffer = new Byte[255]; int rec = accepted.Receive(buffer, 0, buffer.Length, 0); Array.Resize(ref buffer, rec); strData = Encoding.ASCII.GetString(buffer); } byte[] data2 = Encoding.ASCII.GetBytes(nombreJ1); // Envío el nombre sC.Send(data2); byte[] buffer2 = new Byte[255]; // Guardo su nombre int rec2 = accepted.Receive(buffer2, 0, buffer2.Length, 0); Array.Resize(ref buffer2, rec2); nombreJ2 = Encoding.ASCII.GetString(buffer2); turnos.setNombreJ2(nombreJ2); BinaryFormatter bf = new BinaryFormatter(); // Envío el tablero bf.Serialize(net, tableroJ1); do // Cambia el turno de J1 a J2 y viceversa { do // Vuelve a tirar J1 si hunde un barco { turnos.introducirFila(); turnos.introducirColumna(); turnos.realizarComprobacionesJ1(); }while(colocBarcos.getTableroJ2()[turnos.getFila() - 1, turnos.getColumna() - 1] == (char)'X' && turnos.getRepetirTirada() == true); // string text = "tocaAlServer"; // Ya he atacado, le toca al server // byte[] data = Encoding.ASCII.GetBytes(text); // sC.Send(data); // // byte[] buffer2 = new Byte[255]; // Espero que el server ataque // int rec2 = accepted.Receive(buffer2,0,buffer2.Length,0); // Array.Resize(ref buffer2, rec2); // nombreJ2 = Encoding.ASCII.GetString(buffer2); // turnos.setNombreJ2(nombreJ2); do // Vuelve a tirar J2 si hunde un barco { turnos.ataqueAlAzarDeJ2(); turnos.realizarComprobacionesJ2(); }while(colocBarcos.getTableroJ1()[turnos.getFila() - 1, turnos.getColumna() - 1] == (char)'X' && turnos.getRepetirTirada() == true); if (turnos.getBarcosJ1() == 0) { Console.Write("Has perdido la partida. La próxima vez será."); Console.ReadKey(); break; } }while(turnos.getBarcosJ2() != 0); // Si todos los barcos enemigos están hundidos, se acabó la partida Console.Write("Has ganado la partida. Enhorabuena!!"); }catch (Exception ex) { //Console.WriteLine(ex.Message); if (!sC.Connected) { Console.SetCursorPosition(12, 21); Console.Write("Error, no se ha podido establecer la conexión con el servidor."); Console.SetCursorPosition(12, 22); Console.Write("Asegúrese de que la IP es correcta y el servidor esté activo."); } Console.ReadKey(); } }
public static void Main(string[] args) { ColocacionDeBarcos colocBarcos = new ColocacionDeBarcos(); Turnos turnos = new Turnos(); Cliente cliente = new Cliente(); Servidor servidor = new Servidor(); System.Media.SoundPlayer player = new System.Media.SoundPlayer(); Console.Title = "Hundir la flota 0.4"; bool validar = false, volverAtras = true, sonido = false; int opcion1 = 0, opcion2 = 0, opcion3 = 0, barcosIniciales = 6; string nombreJ1 = null, nombreJ2 = null; do // Validación del menu principal { if (sonido == true) { player.SoundLocation = ".\\sonido\\FondoDeUnaCueva.wav"; player.Play(); } colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("#############################"); Console.SetCursorPosition(24, 12); Console.Write("# #"); Console.SetCursorPosition(24, 13); Console.Write("# Selecciona una categoría: #"); Console.SetCursorPosition(24, 14); Console.Write("# #"); Console.SetCursorPosition(24, 15); Console.Write("# (1) Comenzar #"); Console.SetCursorPosition(24, 16); Console.Write("# (2) Opciones #"); Console.SetCursorPosition(24, 17); Console.Write("# (3) Salir #"); Console.SetCursorPosition(24, 18); Console.Write("# Versión 0.4 #"); Console.SetCursorPosition(24, 19); Console.Write("# #"); Console.SetCursorPosition(24, 20); Console.Write("#############################\n\n"); for (int i = 0; i <= 79; i++) { Console.Write("_"); } for (int i = 0; i <= 79; i++) { Console.Write("="); Thread.Sleep(8); } Console.Write(">>> "); validar = int.TryParse(Console.ReadLine(), out opcion1); switch (opcion1) { case 1: do { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("Elije el modo de juego\n"); Console.SetCursorPosition(24, 12); Console.Write("----------------------\n"); Console.SetCursorPosition(24, 13); Console.Write("(1) Contra la máquina"); Console.SetCursorPosition(24, 14); Console.Write("(2) Multijugador"); Console.SetCursorPosition(24, 15); Console.Write("(3) Online"); Console.SetCursorPosition(24, 16); Console.Write("(4) Volver al menú"); Console.SetCursorPosition(24, 18); Console.Write(">>> "); validar = int.TryParse(Console.ReadLine(), out opcion2); switch (opcion2) { case 1: do { if (sonido == true) { player.SoundLocation = ".\\sonido\\MenuOpciones.wav"; player.Play(); } colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("Introduce tu nombre: "); nombreJ1 = Console.ReadLine(); while (nombreJ1.Length < 1 || nombreJ1.Length > 10) { while (nombreJ1.Length > 10) { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write(" "); Console.SetCursorPosition(24, 11); Console.Write("Pon un nombre más corto: "); nombreJ1 = Console.ReadLine(); } while (nombreJ1.Length < 1) { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write(" "); Console.SetCursorPosition(24, 11); Console.Write("Debes colocar un nombre: "); nombreJ1 = Console.ReadLine(); } } turnos.setNombreJ1(nombreJ1); colocBarcos.setNombreJ1(nombreJ1); Console.SetCursorPosition(24, 13); Console.Write("Coloca tus embarcaciones\n"); Console.SetCursorPosition(24, 14); Console.Write("------------------------\n"); Console.SetCursorPosition(24, 15); Console.Write("(1) Automáticamente\n"); Console.SetCursorPosition(24, 16); Console.Write("(2) Manualmente\n"); Console.SetCursorPosition(24, 18); Console.Write(">>> "); validar = int.TryParse(Console.ReadLine(), out opcion3); }while(opcion3 != 1 && opcion3 != 2); switch (opcion3) { case 1: colocBarcos.colocacionBarcosAutomatJ1(); break; case 2: colocBarcos.colocacionBarcosManualJ1(); break; } colocBarcos.colocacionBarcosAutomatJ2(); turnos.setTablero1(colocBarcos.getTableroJ1()); turnos.setTablero2(colocBarcos.getTableroJ2()); turnos.setPosJ2(colocBarcos.getPosJ2()); turnos.setBarcosJ1(colocBarcos.getBarcosJ1()); turnos.setBarcosJ2(colocBarcos.getBarcosJ2()); cliente.setTablero1(colocBarcos.getTableroJ1()); // Pasamos el tablero C al S para que en esa servidor.setTablero1(colocBarcos.getTableroJ1()); // clase se lo pase a la otra por Sock. Luego //turnos.setTablero2(cliente.getTableroJ2()); // Lo ponemos en clase turnos como tableroJ2 //turnos.setTablero2(servidor.getTableroJ2()); do // Cambia el turno de J1 a J2 y viceversa { do // Vuelve a tirar J1 si hunde un barco { turnos.introducirFila(); turnos.introducirColumna(); turnos.realizarComprobacionesJ1(); }while(colocBarcos.getTableroJ2()[turnos.getFila() - 1, turnos.getColumna() - 1] == (char)'X' && turnos.getRepetirTirada() == true); do // Vuelve a tirar J2 si hunde un barco { turnos.ataqueAlAzarDeJ2(); turnos.realizarComprobacionesJ2(); }while(colocBarcos.getTableroJ1()[turnos.getFila() - 1, turnos.getColumna() - 1] == (char)'X' && turnos.getRepetirTirada() == true); if (turnos.getBarcosJ1() == 0) { Console.Write("Has perdido la partida. La próxima vez será."); Console.ReadKey(); break; } }while(turnos.getBarcosJ2() != 0 || turnos.getBarcosJ1() != 0); // Si todos los barcos enemigos están hundidos, se acabó la partida if (turnos.getBarcosJ1() == 0) { Console.Write("Has perdido. La próxima vez será."); } else if (turnos.getBarcosJ2() == 0) { Console.Write("Has ganado la partida. Enhorabuena!!"); } Thread.Sleep(2500); break; case 2: // Multijugador break; case 3: // Online colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("¿Quién vas a ser?"); Console.SetCursorPosition(24, 12); Console.Write("-----------------"); Console.SetCursorPosition(24, 13); Console.Write("(1) Cliente"); Console.SetCursorPosition(24, 14); Console.Write("(2) Servidor"); Console.SetCursorPosition(24, 16); Console.Write(">>> "); validar = int.TryParse(Console.ReadLine(), out opcion3); switch (opcion3) { case 1: cliente.cliente(); break; case 2: servidor.servidor(); break; } break; case 4: volverAtras = false; break; } }while(volverAtras == true); break; // Fin case 1 - Comenzar a jugar case 2: do { if (sonido == true) { player.SoundLocation = ".\\sonido\\FondoDeUnaCueva.wav"; player.Play(); } colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("(1) Elegir cantidad de barcos\n"); Console.SetCursorPosition(24, 12); Console.Write("(2) Poner nombre al jugador 2\n"); Console.SetCursorPosition(24, 13); Console.Write("(3) Activar efectos de sonido\n"); Console.SetCursorPosition(24, 14); Console.Write("(4) Volver al menú\n"); Console.SetCursorPosition(24, 16); Console.Write(">>> "); validar = int.TryParse(Console.ReadLine(), out opcion2); switch (opcion2) { case 1: do { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("¿Con cuántos barcos quieres jugar? (Máx 30)"); Console.SetCursorPosition(24, 13); Console.Write(">>> "); validar = int.TryParse(Console.ReadLine(), out barcosIniciales); }while(barcosIniciales < 1 || barcosIniciales > 30); colocBarcos.setBarcosIniciales(barcosIniciales); Console.SetCursorPosition(24, 15); Console.Write("Cambios guardados correctamente!"); Thread.Sleep(1250); break; case 2: colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("Introduce el nombre de tu oponente "); Console.SetCursorPosition(24, 13); Console.Write(">>> "); nombreJ2 = Console.ReadLine(); while (nombreJ2.Length > 7) { colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("Pon un nombre más corto"); Console.SetCursorPosition(24, 13); Console.Write(">>> "); nombreJ2 = Console.ReadLine(); } turnos.setNombreJ2(nombreJ2); Console.SetCursorPosition(24, 15); Console.Write("Nombre guardado correctamente!"); Thread.Sleep(1250); break; case 3: colocBarcos.menu(); Console.SetCursorPosition(24, 11); Console.Write("¿Qué desea hacer?"); Console.SetCursorPosition(24, 12); Console.Write("-----------------"); Console.SetCursorPosition(24, 13); Console.Write("(1) Activar efectos de sonido "); Console.SetCursorPosition(24, 14); Console.Write("(2) Desactivar efectos de sonido (defecto)"); Console.SetCursorPosition(24, 16); Console.Write(">>> "); validar = int.TryParse(Console.ReadLine(), out opcion3); if (opcion3 == 1) { DirectoryInfo DIR = new DirectoryInfo(".\\sonido"); if (!DIR.Exists) { Console.SetCursorPosition(24, 18); Console.Write("Error. No se encuentra la carpeta 'sonido'."); Thread.Sleep(1750); } else { sonido = true; Console.SetCursorPosition(24, 18); Console.Write("Sonido activado correctamente!"); Thread.Sleep(1250); } } else if (opcion3 == 2) { sonido = false; Console.SetCursorPosition(24, 18); Console.Write("Sonido desactivado correctamente!"); Thread.Sleep(1250); } turnos.setSonido(sonido); colocBarcos.setSonido(sonido); break; case 4: volverAtras = false; break; } }while(volverAtras == true); break; case 3: break; case 4: Console.Write("1- Cliente\n2- Servidor"); Console.Write("\n>>> "); validar = int.TryParse(Console.ReadLine(), out opcion3); switch (opcion3) { case 1: cliente.cliente(); break; case 2: servidor.servidor(); break; } break; } }while(opcion1 != 3); }