Example #1
0
 public Mano(Player p1, Player p2, System.Action cb)
 {
     _callback              = cb;
     _player1               = p1;
     _player2               = p2;
     _puntosEnvidoQuerido   = 0;
     _puntosEnvidoNoQuerido = 0;
     _puntosTrucoQuerido    = 1;
     _puntosTrucoNoQuerido  = 1;
     _envidosCantados       = 0;
     _estado       = ESTADO.JUGANDO;
     _estadoTruco  = ESTADOTRUCO.NULO;
     _estadoEnvido = ESTADOENVIDO.NULO;
     _estadoCartas = ESTADOCARTAS.NOMATA;
     _repartirCartas();
     _pedirJugadas(null);
 }
Example #2
0
    public void recibirJugada(Jugada jugada)
    {
        if (jugada.mensaje == "envido")
        {
            _estado       = ESTADO.NEGOCIANDO_ENVIDO;
            _estadoEnvido = ESTADOENVIDO.ENVIDO;
            //resetea el truco
            _estadoTruco = ESTADOTRUCO.NULO;
            _player2.setTieneQuieroTruco(false);
            _player1.setTieneQuieroTruco(false);
            _envidosCantados++;
            _puntosEnvidoQuerido   = 2 * _envidosCantados;
            _puntosEnvidoNoQuerido = _envidosCantados;
        }

        if (jugada.mensaje == "real envido")
        {
            _estado                = ESTADO.NEGOCIANDO_ENVIDO;
            _estadoEnvido          = ESTADOENVIDO.REAL;
            _estadoTruco           = ESTADOTRUCO.NULO;
            _puntosEnvidoQuerido   = 3 + (2 * _envidosCantados);
            _puntosEnvidoNoQuerido = 2 + _envidosCantados;
        }

        if (jugada.mensaje == "falta envido")
        {
            _estado                = ESTADO.NEGOCIANDO_ENVIDO;
            _estadoEnvido          = ESTADOENVIDO.FALTA;
            _estadoTruco           = ESTADOTRUCO.NULO;
            _puntosEnvidoQuerido   = _calcularTantosFaltaEnvido();
            _puntosEnvidoNoQuerido = 1 + ((_estadoEnvido == ESTADOENVIDO.REAL) ? 3 : 0) + _envidosCantados;
        }

        if (jugada.mensaje == "truco")
        {
            _estado               = ESTADO.NEGOCIANDO_TRUCO;
            _estadoTruco          = ESTADOTRUCO.TRUCO;
            _puntosTrucoQuerido   = 2;
            _puntosTrucoNoQuerido = 1;
            _player2.setTieneQuieroTruco(_player1.tienePalabra());
            _player1.setTieneQuieroTruco(!_player1.tienePalabra());
        }

        if (jugada.mensaje == "retruco")
        {
            _estado      = ESTADO.NEGOCIANDO_TRUCO;
            _estadoTruco = ESTADOTRUCO.RETRUCO;
            //si se quiso el truco en primera mano este ya no esta disponible
            _estadoEnvido         = ESTADOENVIDO.JUGADO;
            _puntosTrucoQuerido   = 3;
            _puntosTrucoNoQuerido = 2;
            _player2.setTieneQuieroTruco(_player1.tienePalabra());
            _player1.setTieneQuieroTruco(!_player1.tienePalabra());
        }

        if (jugada.mensaje == "vale 4")
        {
            _estado               = ESTADO.NEGOCIANDO_TRUCO;
            _estadoTruco          = ESTADOTRUCO.VALE4;
            _puntosTrucoQuerido   = 4;
            _puntosTrucoNoQuerido = 3;
            _player2.setTieneQuieroTruco(_player1.tienePalabra());
            _player1.setTieneQuieroTruco(!_player1.tienePalabra());
        }

        if (jugada.mensaje == "quiero")
        {
            if (_estado == ESTADO.NEGOCIANDO_ENVIDO)
            {
                _estadoEnvido = ESTADOENVIDO.JUGADO;
                _calcularEnvido();
            }
            if (_estado == ESTADO.NEGOCIANDO_TRUCO)
            {
                _estadoEnvido = ESTADOENVIDO.JUGADO;
            }
            if (_player1.getPuntos() >= 30 || _player2.getPuntos() >= 30)
            {
                _estado = ESTADO.TERMINADA;
            }
            else
            {
                _estado = ESTADO.JUGANDO;
            }
        }

        if (jugada.mensaje == "no quiero")
        {
            if (_estado == ESTADO.NEGOCIANDO_TRUCO)
            {
                _estado = ESTADO.TERMINADA;
                if (_player1.tienePalabra())
                {
                    _player2.sumarPuntos(_puntosTrucoNoQuerido);
                }
                else
                {
                    _player1.sumarPuntos(_puntosTrucoNoQuerido);
                }
            }
            else
            {
                // Si se está engociando envido
                _estadoEnvido = ESTADOENVIDO.JUGADO;
                _estado       = ESTADO.JUGANDO;
                if (_player1.tienePalabra())
                {
                    _player2.sumarPuntos(_puntosEnvidoNoQuerido);
                }
                else
                {
                    _player1.sumarPuntos(_puntosEnvidoNoQuerido);
                }
            }
        }

        if (jugada.mensaje == "irse al mazo")
        {
            if (_estado == ESTADO.JUGANDO)
            {
                _estado = ESTADO.TERMINADA;
                if (_player1.tienePalabra())
                {
                    _player2.sumarPuntos(_puntosTrucoNoQuerido);
                }
                else
                {
                    _player1.sumarPuntos(_puntosTrucoNoQuerido);
                }
            }
        }

        if (jugada.mensaje == "carta")
        {
            _player1.setJugoTurno(_player1.tieneTurno());
            _player2.setJugoTurno(_player2.tieneTurno());


            // Verifico si alguno de los jugadores ya ganó la mano
            if (_calcularTurnosGanados(_player1, _player2) >= 2)
            {
                _estado = ESTADO.TERMINADA;
                _player1.sumarPuntos(_puntosTrucoQuerido);
            }
            else
            {
                if (_calcularTurnosGanados(_player2, _player2) >= 2)
                {
                    _estado = ESTADO.TERMINADA;
                    _player2.sumarPuntos(_puntosTrucoQuerido);
                }
                else
                {
                    // Si ambos jugadores ya tiraron las 3 cartas, se termina la mano
                    // Este caso solo se da si empardaron las 3 manos, si es así se lleva los puntos el mano
                    if (_player1.getCantCartasMesa() == 3 && _player2.getCantCartasMesa() == 3)
                    {
                        _estado = ESTADO.TERMINADA;
                        if (_player1.esMano())
                        {
                            _player1.sumarPuntos(_puntosTrucoQuerido);
                        }
                        else
                        {
                            _player2.sumarPuntos(_puntosTrucoQuerido);
                        }
                    }
                    else
                    {
                        // Se verifica si la carta tirada mata, no mata o emparda a la anterior del oponente
                        if ((_player1.getUltimaCartaJugada() != null && _player2.getUltimaCartaJugada() != null) && (_player1.getCantCartasMesa() == _player2.getCantCartasMesa()))
                        {
                            if ((_player1.tieneTurno() && _player1.getUltimaCartaJugada().mata(_player2.getUltimaCartaJugada()) == 1) || (_player2.tieneTurno() && _player2.getUltimaCartaJugada().mata(_player1.getUltimaCartaJugada()) == 1))
                            {
                                _estadoCartas = ESTADOCARTAS.MATA;
                            }
                            else
                            {
                                if ((_player1.tieneTurno() && _player1.getUltimaCartaJugada().mata(_player2.getUltimaCartaJugada()) == -1) || (_player2.tieneTurno() && _player2.getUltimaCartaJugada().mata(_player1.getUltimaCartaJugada()) == -1))
                                {
                                    _estadoCartas = ESTADOCARTAS.NOMATA;
                                }
                                else
                                {
                                    _estadoCartas = ESTADOCARTAS.EMPARDA;
                                }
                            }
                        }
                        else
                        {
                            _estadoCartas = ESTADOCARTAS.NOMATA;
                        }
                    }
                }
            }
        }

        _siguienteJugada(jugada);
    }