// calcula la posicion correcta de cada carta en el array de marcaje static int posCorrecta(Carta c) { int valor = c.getValor(); if (valor == 11) { return cartas_por_palo - 3; } else if (valor == 12) { return cartas_por_palo - 2; } else if (valor == 13) { return cartas_por_palo - 1; } else { return c.getValor() - 1; } }
private boolean asEnLaMano() { for (Carta carta : jugada) { if (carta.getValor() == 1) { return true; } } return false; }
static boolean esCompletable(boolean[][] marcados, Carta carta) { // Si se juega una carta a el mazoDestino, y sabemos de antemano que // todos los correlativos de la carta jugada ya estan en mazoDestino boolean OK = false; int valorLimite = carta.getValor(); if (valorLimite == 1) { if (marcados[Carta.ESPADAS][posCorrecta(carta) + 1] && marcados[Carta.CORAZONES][posCorrecta(carta) + 1] && marcados[Carta.DIAMANTES][posCorrecta(carta) + 1] && marcados[Carta.TREBOLES][posCorrecta(carta) + 1]) { OK = false; } else { OK = true; } } else if (valorLimite == 13) { if (marcados[Carta.ESPADAS][posCorrecta(carta) - 1] && marcados[Carta.CORAZONES][posCorrecta(carta) - 1] && marcados[Carta.DIAMANTES][posCorrecta(carta) - 1] && marcados[Carta.TREBOLES][posCorrecta(carta) - 1]) { OK = false; } else { OK = true; } } else { if (marcados[Carta.ESPADAS][posCorrecta(carta) - 1] && marcados[Carta.ESPADAS][posCorrecta(carta) + 1] && marcados[Carta.CORAZONES][posCorrecta(carta) - 1] && marcados[Carta.CORAZONES][posCorrecta(carta) + 1] && marcados[Carta.DIAMANTES][posCorrecta(carta) - 1] && marcados[Carta.DIAMANTES][posCorrecta(carta) + 1] && marcados[Carta.TREBOLES][posCorrecta(carta) - 1] && marcados[Carta.TREBOLES][posCorrecta(carta) + 1]) { OK = false; } else { OK = true; } } return OK; }
public int obtenerTotal() { int acum = 0, puntos = 0; for (Carta carta : jugada) { if (carta.getValor() >= 10) { puntos = 10; acum += puntos; } else if (carta.getValor() == 1) { puntos = 11; acum += puntos; if (acum > 21) { puntos = 1; acum += puntos - 11; } } else { puntos = carta.getValor(); acum += puntos; } } if (acum > 21 && asEnLaMano()) { acum = 0; puntos = 0; for (Carta carta : jugada) { if (carta.getValor() >= 10) { puntos = 10; acum += puntos; } else if (carta.getValor() == 1) { puntos = 1; acum += puntos; } else { puntos = carta.getValor(); acum += puntos; } } } return acum; }