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); }
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); }