Пример #1
0
        //La coleccion de nombres que le llega debe ser del activeD o de la interfaz
        //Si es de la interfaz debe haber alguna clase o forma para agregar los nuevos
        //jugadores

        public Juego(coleccionJugador nombres)
        {
            //Coleccion de jugadores con la lista que le llega...
            jugadores = new coleccionJugador(nombres.obtenerCantidad());
            for (int i = 0; i < nombres.obtenerCantidad(); i++)
            {
                jugador j = nombres.obtenerJugador(i);
                jugadores.agregarJugador(j);
            }

            //Se crea el mazo
            m_baraja = new Mazo();

            //Se crea el jugador casa...
            m_casa = new Casa("Casa");

            //Se llena el mazo
            m_baraja.llenarMazo();

            //Se baraja el mazo
            m_baraja.barajar();

            //Se prepara el mazo general el Juego
        }
Пример #2
0
        //data manager

        static void DataManager(Packet p)
        {
            switch (p.packetType)
            {
            case Packet.PacketType.Chat:
                foreach (ClientData c in _clients)
                {
                    c.clientSocket.Send(p.ToBytes());
                }
                break;

            case Packet.PacketType.Mensaje:
                foreach (ClientData c in _clients)
                {
                    c.clientSocket.Send(p.ToBytes());
                }
                break;

            case Packet.PacketType.autentificar:
                if (cj.VerificarJugador(p.clave))    //Si existe en el juego
                {
                    if (game.getJugadores().obtenerCantidad() < 7 && (!bloquearJuego))
                    {
                        game.getJugadores().agregarJugador(new jugador(p.nombre, p.clave));
                        p.packetType = Packet.PacketType.darAcceso;
                        p.estado     = "Acceso aprobado";
                        Console.WriteLine("Jugadores actuales:");
                        game.getJugadores().imprimirColeccion();
                        Console.WriteLine("\n");
                    }
                    else
                    {
                        listaEspera.agregarJugador(new jugador(p.nombre, p.clave));
                        Console.WriteLine("Jugador en espera: " + p.nombre);
                        p.packetType = Packet.PacketType.enEspera;
                        p.estado     = "Ha sido puesta en lista de espera...\nEsperando....";
                    }
                }
                else
                {
                    p.packetType = Packet.PacketType.denegarAcceso;
                    p.estado     = "Acceso denegado";
                }
                foreach (ClientData c in _clients)
                {
                    c.clientSocket.Send(p.ToBytes());
                }
                Console.WriteLine("Estado de acceso del jugador recien agregado: " + p.estado);
                break;



            case Packet.PacketType.registrar:
                if (game.getJugadores().obtenerCantidad() < 7 && (!bloquearJuego))
                {
                    game.getJugadores().agregarJugador(new jugador(p.nombre, p.clave));
                    p.packetType = Packet.PacketType.darAcceso;
                    p.estado     = "Acceso aprobado";
                    Console.WriteLine("Jugadores actuales:");
                    game.getJugadores().imprimirColeccion();
                    Console.WriteLine("\n");
                }
                else
                {
                    //Se agrega a la lista de espera
                    listaEspera.agregarJugador(new jugador(p.nombre, p.clave));
                    Console.WriteLine("Jugador en espera: " + p.nombre);
                    p.packetType = Packet.PacketType.enEspera;
                    p.estado     = "Ha sido puesta en lista de espera...\nEsperando....";
                }
                foreach (ClientData c in _clients)
                {
                    c.clientSocket.Send(p.ToBytes());
                }
                Console.WriteLine("Estado de acceso de registro: " + p.estado);
                break;


            case Packet.PacketType.iniciarJuego: //Se recibe la señal de iniciar juego del jugador
                bloquearJuego = true;            //No acepta más jugadores en el juego
                //repartir primeras 2 cartas a todos los jugadores
                p.cartaCasa1 = game.getBaraja().darCarta(game.getCasa().obtenerMano());
                p.cartaCasa2 = game.getBaraja().darCarta(game.getCasa().obtenerMano());
                for (int i = 0; i < game.getJugadores().cantidadJugadores(); i++)
                {
                    p.packetType = Packet.PacketType.primerasCartas;
                    p.carta1     = game.getBaraja().darCarta(game.getJugadores().obtenerJugador(i).obtenerMano());
                    p.carta2     = game.getBaraja().darCarta(game.getJugadores().obtenerJugador(i).obtenerMano());
                    p.nombre     = game.getJugadores().obtenerJugador(i).getNombre();//obtiene el nombre del jugador
                    p.packetType = Packet.PacketType.iniciarJuego;
                    Console.WriteLine("Asignar-> Jugador: " + p.nombre + ", C1: " + p.carta1 + ", C2: " + p.carta2);
                    foreach (ClientData c in _clients)
                    {
                        c.clientSocket.Send(p.ToBytes());
                    }
                }

                if (numTurno < game.getJugadores().obtenerCantidad())
                {
                    p.packetType = Packet.PacketType.comunicarTurno;    //Comunica el primer turno
                    p.turno      = game.getJugadores().obtenerJugador(numTurno).getNombre();
                    Console.WriteLine("Turno de jugador: " + p.turno);
                    numTurno++;    //Va al turno del jugador 0

                    foreach (ClientData c in _clients)
                    {
                        c.clientSocket.Send(p.ToBytes());
                    }    //Comunica el primer turno
                }
                break;   //Envia todas las primeras dos cartas a todos los jugadores identificados con el nombre



            case Packet.PacketType.pedirCarta:
                string idJugador = p.id;
                int    j         = game.getJugadores().posJugadorEspecifico(idJugador);//Busca posicion del jugador
                if (j != -1)
                {
                    p.numeroCarta = game.getBaraja().cartaAdicional(game.getJugadores().obtenerJugador(j));
                    //Console.WriteLine("Carta pedida: " + p.numeroCarta);//Imprimo la carta pedido
                }
                if (p.numeroCarta != -1)
                {                                              //Si aun no se ha pasado de 21
                    p.packetType = Packet.PacketType.darCarta; //Da la carta al jugador
                    foreach (ClientData c in _clients)
                    {
                        c.clientSocket.Send(p.ToBytes());
                    }
                }

                else
                {    //Pasa al jugador siguiente
                    numTurno++;
                    if (numTurno < game.getJugadores().obtenerCantidad())
                    {
                        p.packetType = Packet.PacketType.comunicarTurno;

                        p.turno = game.getJugadores().obtenerJugador(numTurno).getNombre();
                        foreach (ClientData c in _clients)
                        {
                            c.clientSocket.Send(p.ToBytes());
                        }
                    }
                    else
                    {
                        //Turno de jugar la casa y terminar el juego
                        int aux = game.getBaraja().cartaAdicionalCasa(game.getCasa());
                        while (aux != -1)
                        {
                            p.numeroCarta = aux;
                            p.packetType  = Packet.PacketType.turnoCasa;   //Pasa el numero de carta adicional de la casa a los clientes
                            foreach (ClientData c in _clients)
                            {
                                c.clientSocket.Send(p.ToBytes());
                            }
                            aux = game.getBaraja().cartaAdicionalCasa(game.getCasa());
                            //Después de enviar todos los valores de la casa, hay que hacer la comparación
                        }
                        p.packetType = Packet.PacketType.casaAcabo;
                        foreach (ClientData c in _clients)
                        {
                            c.clientSocket.Send(p.ToBytes());
                        }
                        //Anuncia los ganadores y las cartas que obtuvo la casa
                        //Actualiza las apuestas
                    }
                }
                Console.WriteLine("Turno de jugador: " + p.turno);
                break;

            case Packet.PacketType.quedarse:
                //Acá se tacha al jugador como que ya se quedó
                // ......

                //Comunica el turno del siguiente jugador
                if (numTurno < game.getJugadores().obtenerCantidad())
                {
                    p.packetType = Packet.PacketType.comunicarTurno;    //Comunica el primer turno
                    p.turno      = game.getJugadores().obtenerJugador(numTurno).getNombre();
                    Console.WriteLine("Turno de jugador: " + p.turno);
                    numTurno++;    //Guarda el turno del proximo jugador

                    foreach (ClientData c in _clients)
                    {
                        c.clientSocket.Send(p.ToBytes());
                    }    //Comunica el siguiente turno
                         //DataManager(p);//Pasa a comunicarSiguiente turno
                }
                else
                {
                    //Turno de jugar la casa y terminar el juego
                    int aux = game.getBaraja().cartaAdicionalCasa(game.getCasa());
                    while (aux != -1)
                    {
                        p.numeroCarta = aux;
                        p.packetType  = Packet.PacketType.turnoCasa;   //Pasa el numero de carta adicional de la casa a los clientes
                        foreach (ClientData c in _clients)
                        {
                            c.clientSocket.Send(p.ToBytes());
                        }
                        aux = game.getBaraja().cartaAdicionalCasa(game.getCasa());
                        //Después de enviar todos los valores de la casa, hay que hacer la comparación
                    }

                    p.packetType = Packet.PacketType.casaAcabo;
                    numTurno     = 0;

                    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    if (game.getCasa().pasoDe21())
                    {
                        for (int i = 0; i < game.getJugadores().obtenerCantidad(); ++i)
                        {
                            if (!(game.getJugadores().obtenerJugador(i).pasoDe21()))
                            {
                                game.getJugadores().obtenerJugador(i).gana();
                                p.estado = "Ganador";
                            }
                            else
                            {    //Casa y jugador pasaron de 21
                                game.getJugadores().obtenerJugador(i).pierde();
                                p.estado = "Perdedor";
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0; i < game.getJugadores().obtenerCantidad(); ++i)
                        {
                            if (!game.getJugadores().obtenerJugador(i).pasoDe21())
                            {
                                if (game.getJugadores().obtenerJugador(i).obtenerMano().ObtenerTotal() > game.getCasa().obtenerMano().ObtenerTotal())
                                {
                                    game.getJugadores().obtenerJugador(i).gana();
                                    p.estado = "Ganador";
                                }
                                else if (game.getJugadores().obtenerJugador(i).obtenerMano().ObtenerTotal() < game.getCasa().obtenerMano().ObtenerTotal())
                                {
                                    // ganador(IdJugador, 1 -> perdió, saldoActualizado);
                                    //Se verifica si el saldo es 0 entonces hay que desconectar el socket de ese jugador
                                    game.getJugadores().obtenerJugador(i).pierde();
                                    p.estado = "Perdedor";
                                }
                                else
                                {
                                    // ganador(IdJugador, 2-> push, saldoActualizado);
                                    //Se verifica también el saldo
                                    game.getJugadores().obtenerJugador(i).push();
                                    p.estado = "Push";
                                }
                            }
                            p.id     = game.getJugadores().obtenerJugador(i).getId();
                            p.nombre = game.getJugadores().obtenerJugador(i).getNombre();

                            foreach (ClientData c in _clients)
                            {
                                c.clientSocket.Send(p.ToBytes());
                            }
                            //Anuncia los ganadores y las cartas que obtuvo la casa
                            //Actualiza las apuestas
                            //Envia mensaje
                        }
                    }
                    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

                    //Anuncia los ganadores y las cartas que obtuvo la casa
                    //Actualiza las apuestas
                }
                break;

            //Si el tipo es de autentificacion se add a la lista de sockets
            //una vez autentificado y se crea un nuevo jugador asociado a
            //ese id.

            case Packet.PacketType.salir:
                Console.WriteLine("**************************************");
                Console.WriteLine("Id recibido: " + p.id);
                game.getJugadores().imprimirColeccion();
                game.getJugadores().eliminarJugador(p.id);
                Console.WriteLine("- - - - - - - - - - - - - - - - - - - -");
                game.getJugadores().imprimirColeccion();
                Console.WriteLine("**************************************");
                bloquearJuego = false;
                if (listaEspera.obtenerCantidad() > 0)
                {
                    jugador jug = listaEspera.obtenerJugador(0);
                    listaEspera.eliminarJugador(jug.getId());   //Sale de la lista de espera
                    game.getJugadores().agregarJugador(jug);    //Entra al juego
                    p.packetType = Packet.PacketType.darAcceso;
                    p.estado     = "Acceso aprobado";
                    Console.WriteLine("Jugadores actuales:");
                    game.getJugadores().imprimirColeccion();
                    Console.WriteLine("\n");
                    //Envia el paquete con el acceso
                    foreach (ClientData c in _clients)
                    {
                        c.clientSocket.Send(p.ToBytes());
                    }
                    Console.WriteLine("Estado de acceso de registro: " + p.estado);
                }

                break;



            case Packet.PacketType.seguir:
                Console.WriteLine("Bien! El jugador " + p.nombre + " va a seguir jugando!");
                p.packetType = Packet.PacketType.darAcceso;
                p.estado     = "Acceso aprobado";
                Console.WriteLine("Jugadores actuales:");
                game.getJugadores().imprimirColeccion();
                Console.WriteLine("\n");
                foreach (ClientData c in _clients)
                {
                    c.clientSocket.Send(p.ToBytes());
                }
                Console.WriteLine("Estado de acceso de registro: " + p.estado);
                break;
            }
        }
Пример #3
0
        public void jugar()
        {
            //Estos dos for dan las primeras dos cartas a todos los jugadores y a la casa...
            for (int j = 0; j < 2; j++)
            {
                for (int i = 0; i < jugadores.obtenerCantidad(); i++)
                {
                    m_baraja.darCarta(jugadores.obtenerJugador(i).obtenerMano());
                    //****Acá al repartir la mano a cada jugador se debe también enviar los valores
                    //*** de las cartas obtenidas a la interfaz
                    //(numCarta1, numCarta2, idJugador (y quizá baraja de cada una también))
                }
                //*** Se debe enviar también los valores obtenidos por la casa a la interfaz
                //*** estos valores se envían a todos los sockets conectados
                m_baraja.darCarta(m_casa.obtenerMano());
            }

            //La casa voltea sus cartas
            //m_casa.voltearPrimero();

            //Cada jugador muestra sus cartas
            //***Este metodo no iría a la interfaz dado que en esta
            //***ya los valores de las cartas se mostrarían de una vez
            for (int i = 0; i < jugadores.obtenerCantidad(); i++)
            {
                jugadores.obtenerJugador(i).toString();
            }


            //La casa muestra sus cartas
            m_casa.toString();



            //Cada jugador pide o se queda
            //**En la interfaz, por turnos, se pide al jugador si quiere seguir o quedarse
            for (int i = 0; i < jugadores.obtenerCantidad(); ++i)
            {
                //**Hay que modificar este método para que al llegar un de la interfaz:
                // 1-> Se queda
                // 0-> Sigue
                //Entonces se le pasaria al método un int
                //Acá se pide a la interfaz por algún método de socket
                // pedirCarta(idJugador) y recibe un 1 o un 0
                //Al tener la carta nueva el valor de esta se envía al
                //jugador a la interfaz, y vuelve a pedirCarta() del sig Jugador.
                m_baraja.cartaAdicional(jugadores.obtenerJugador(i));
                //Acá el jugador va a pedir hasta que decida quedarse o se
                //haya pasado de 21 pts.
            }



            //Muestra la casa
            m_casa.toString();

            //Si mano de casa <= 16, pide carta
            //**Tiene que enviar los valores de la casa a la interfaz
            //para actualizar valores de la misma allá
            m_baraja.cartaAdicionalCasa(m_casa);


            //Para este punto del Juego la casa ya debería haberse quedado o
            //pasado de puntos, así que se va a comparar.

            //Compara valores de casa y jugadores

            /*
             * Si la casa se pasó de 21 se tiene que informar a la interfaz que
             * todos los jugadores ganan, por lo que el monto de sus apuestas también sube
             * y se manda luego una lista de jugadores y de montos de apuestas.
             */
            if (m_casa.pasoDe21())
            {
                for (int i = 0; i < jugadores.obtenerCantidad(); ++i)
                {
                    if (!(jugadores.obtenerJugador(i).pasoDe21()))
                    {
                        jugadores.obtenerJugador(i).gana();
                    }
                }
            }

            /*
             * En cada uno de los if se debe informar a los clientes los jugadores que pierden, ganan
             * o quedan empatados. Si quedan empatados igual pierden la apuesta.
             */
            else
            {
                for (int i = 0; i < jugadores.obtenerCantidad(); ++i)
                {
                    if (!jugadores.obtenerJugador(i).pasoDe21())
                    {
                        if (jugadores.obtenerJugador(i).obtenerMano().ObtenerTotal() > m_casa.obtenerMano().ObtenerTotal())
                        {
                            //Se llama acá un socket que envía el id de jugador y el mensaje de ganador.
                            // ganador(IdJugador y 0 -> ganó, saldoActualizado)
                            jugadores.obtenerJugador(i).gana();
                        }
                        else if (jugadores.obtenerJugador(i).obtenerMano().ObtenerTotal() < m_casa.obtenerMano().ObtenerTotal())
                        {
                            // ganador(IdJugador, 1 -> perdió, saldoActualizado);
                            //Se verifica si el saldo es 0 entonces hay que desconectar el socket de ese jugador
                            jugadores.obtenerJugador(i).pierde();
                        }
                        else
                        {
                            // ganador(IdJugador, 2-> push, saldoActualizado);
                            //Se verifica también el saldo
                            jugadores.obtenerJugador(i).push();
                        }
                    }
                }
            }
            //Se limpian las colecciones que hayan.
            //En la interfaz esto simula un reseteo de valores también.
            //En la interfaz se pregunta a los jugadores si quieren desconectarse o seguir jugando
            //Los valores de las respuestas vienen al servidor, si se recibe de un clientSocket que
            //este se quiere desconectar hay que desconectarlo del servidor.



            //for (int i = 0; i < jugadores.obtenerCantidad(); ++i)
            //Va la funcion de limpiar
            //funcion de limpiar de la casa
        }