Пример #1
0
        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();
            }
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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);
        }