import codigos.Const /************Data class es una clase especial de KOTLIN que * te abstrae de los getters y setters o implementa automaticamente**/ data class CartaJugada(val valor: Char, val palo: Char) fun main() { val jugada = arrayListOf() val jugada2 = arrayListOf() var CartajugadasMesa : String var Carta2jugadasMesa : String println("Primera jugada:") do { CartajugadasMesa = readLine()!!.toString().toUpperCase() }while (valido(CartajugadasMesa)) println("Segunda jugada:") do { Carta2jugadasMesa = readLine()!!.toString().toUpperCase() }while (valido(Carta2jugadasMesa)) /*********Analiza Jugada************/ jugada.add(CartaJugada(valor = CartajugadasMesa[0], palo = CartajugadasMesa[1])) jugada.add(CartaJugada(valor = CartajugadasMesa[2], palo = CartajugadasMesa[3])) jugada.add(CartaJugada(valor = CartajugadasMesa[4], palo = CartajugadasMesa[5])) jugada.add(CartaJugada(valor = CartajugadasMesa[6], palo = CartajugadasMesa[7])) jugada.add(CartaJugada(valor = CartajugadasMesa[8], palo = CartajugadasMesa[9])) jugada2.add(CartaJugada(valor = Carta2jugadasMesa[0], palo = Carta2jugadasMesa[1])) jugada2.add(CartaJugada(valor = Carta2jugadasMesa[2], palo = Carta2jugadasMesa[3])) jugada2.add(CartaJugada(valor = Carta2jugadasMesa[4], palo = Carta2jugadasMesa[5])) jugada2.add(CartaJugada(valor = Carta2jugadasMesa[6], palo = Carta2jugadasMesa[7])) jugada2.add(CartaJugada(valor = Carta2jugadasMesa[8], palo = Carta2jugadasMesa[9])) val jugadaOrdenada = jugada.sortedWith(compareBy {it.valor}) val jugada2Ordenada = jugada2.sortedWith(compareBy {it.valor}) println("Judada 1") for (indice in jugadaOrdenada.indices) { print("${jugadaOrdenada[indice].valor}${jugadaOrdenada[indice].palo} ") } println("\nJudada 2") for (indice in jugada2Ordenada.indices) { print("${jugada2Ordenada[indice].valor}${jugada2Ordenada[indice].palo} ") } val resultado1 = analizaJugadaOrdenada(jugadaOrdenada) val resultado2 = analizaJugadaOrdenada(jugada2Ordenada) println("\narchivo Poker Jugada 1 Leida: $CartajugadasMesa es un/a $resultado1") println("archivo Poker Jugada 2 Leida: $Carta2jugadasMesa es un/a $resultado2") println("La mano ganadora es: "+jugadaGanadora(jugadaOrdenada, jugada2Ordenada, resultado1, resultado2)) } fun valido(CartajugadasMesa : String) : Boolean{ var result = true if (CartajugadasMesa.length == 10 && !encuentraRepetidos(CartajugadasMesa)) { for (indice in 1..9 step 2) { result = !( CartajugadasMesa[indice] == Const.PALOS[0] || CartajugadasMesa[indice] == Const.PALOS[1] || CartajugadasMesa[indice] == Const.PALOS[2] || CartajugadasMesa[indice] == Const.PALOS[3]) } }else { println("INVALIDO.\nIngrese de nuevo: ") } return result } fun encuentraRepetidos(cartasMesa: String) : Boolean{ var mantieneCorrecto = false for (caracteres in 0..4 step 2){ for (caracteresRepite in caracteres+2..8 step 2){ if ((cartasMesa[caracteres] == cartasMesa[caracteresRepite]) && (cartasMesa[caracteres+1] == cartasMesa[caracteresRepite+1])){ mantieneCorrecto = true } } } return mantieneCorrecto } fun analizaJugadaOrdenada(jugadaOrdenada : List): String{ var palosJugados = arrayOf(0,0,0,0) var valoresJugados = arrayOf(0,0,0,0,0,0,0,0,0,0,0,0,0) var result = "NADA" for (palos in jugadaOrdenada){ when(palos.palo){ 'S' -> palosJugados[0]++ 'C' -> palosJugados[1]++ 'D' -> palosJugados[2]++ 'H' -> palosJugados[3]++ } } for (valores in jugadaOrdenada){ when(valores.valor){ 'A' -> valoresJugados[0]++ '2' -> valoresJugados[1]++ '3' -> valoresJugados[2]++ '4' -> valoresJugados[3]++ '5' -> valoresJugados[4]++ '6' -> valoresJugados[5]++ '7' -> valoresJugados[6]++ '8' -> valoresJugados[7]++ '9' -> valoresJugados[8]++ 'T' -> valoresJugados[9]++ 'J' -> valoresJugados[10]++ 'Q' -> valoresJugados[11]++ 'K' -> valoresJugados[12]++ } } var noEsColor =true for (palo in palosJugados){ if (palo == 5){ result = "COLOR" noEsColor = false for (position in valoresJugados.indices){ result = if (position < 9){ if (1 == valoresJugados[position] && 1 == valoresJugados[position+1] && 1 == valoresJugados[position+2] && 1 == valoresJugados[position+3] && 1 == valoresJugados[position+4]) "ESCALERA COLOR" else continue }else if (position == 9){ if (1 == valoresJugados[position] && 1 == valoresJugados[position+1] && 1 == valoresJugados[position+2] && 1 == valoresJugados[position+3] && 1 == valoresJugados[0]) "ESCALERA REAL" else break }else break } } } // jugadas posibles para 5 palos iguales if (noEsColor) { var tieneTrio = false var cantDobles = 0 for (position in valoresJugados.indices) { if (valoresJugados[position] == 4) { result = "POKER" break } else if (valoresJugados[position] == 1 && position <= 9) { if (position < 9) { if (1 == valoresJugados[position] && 1 == valoresJugados[position + 1] && 1 == valoresJugados[position + 2] && 1 == valoresJugados[position + 3] && 1 == valoresJugados[position + 4]) { result = "ESCALERA" break } else { continue } } else if (position == 9) { if (1 == valoresJugados[position] && 1 == valoresJugados[position + 1] && 1 == valoresJugados[position + 2] && 1 == valoresJugados[position + 3] && 1 == valoresJugados[0]) { result = "ESCALERA FIGURAS" break } else continue } else continue } // Controla para ESCALERA else { if (valoresJugados[position] == 3) tieneTrio = true if (valoresJugados[position] == 2) cantDobles++ result = if ((cantDobles == 1) && tieneTrio) "FULL HOUSE" else if ((cantDobles == 0) && tieneTrio) "TRIO" else if (cantDobles == 1) "PAREJA" else if (cantDobles == 2) "DOBLE PAREJA" else "CARTA ALTA" } } } return result } fun jugadaGanadora(jugada1 : List, jugada2 : List, tipo1 :String, tipo2 : String) : String{ var ganador : String = "NINGUNO" var palosJugados1 = arrayOf(0,0,0,0) var valoresJugados1 = arrayOf(0,0,0,0,0,0,0,0,0,0,0,0,0) for (palos in jugada1){ when(palos.palo){ 'S' -> palosJugados1[0]++ 'C' -> palosJugados1[1]++ 'D' -> palosJugados1[2]++ 'H' -> palosJugados1[3]++ } } for (valores in jugada1){ when(valores.valor){ 'A' -> valoresJugados1[0]++ '2' -> valoresJugados1[1]++ '3' -> valoresJugados1[2]++ '4' -> valoresJugados1[3]++ '5' -> valoresJugados1[4]++ '6' -> valoresJugados1[5]++ '7' -> valoresJugados1[6]++ '8' -> valoresJugados1[7]++ '9' -> valoresJugados1[8]++ 'T' -> valoresJugados1[9]++ 'J' -> valoresJugados1[10]++ 'Q' -> valoresJugados1[11]++ 'K' -> valoresJugados1[12]++ } } var palosJugados2 = arrayOf(0,0,0,0) var valoresJugados2 = arrayOf(0,0,0,0,0,0,0,0,0,0,0,0,0) for (palos in jugada2){ when(palos.palo){ 'S' -> palosJugados2[0]++ 'C' -> palosJugados2[1]++ 'D' -> palosJugados2[2]++ 'H' -> palosJugados2[3]++ } } for (valores in jugada2){ when(valores.valor){ 'A' -> valoresJugados2[0]++ '2' -> valoresJugados2[1]++ '3' -> valoresJugados2[2]++ '4' -> valoresJugados2[3]++ '5' -> valoresJugados2[4]++ '6' -> valoresJugados2[5]++ '7' -> valoresJugados2[6]++ '8' -> valoresJugados2[7]++ '9' -> valoresJugados2[8]++ 'T' -> valoresJugados2[9]++ 'J' -> valoresJugados2[10]++ 'Q' -> valoresJugados2[11]++ 'K' -> valoresJugados2[12]++ } } val jugadas: ArrayList = arrayListOf(0,0,0,0,0,0,0,0,0,0) when(tipo1){ "ESCALERA REAL" -> jugadas[0]++ "ESCALERA COLOR" -> jugadas[1]++ "POKER" -> jugadas[2]++ "FULL HOUSE" -> jugadas[3]++ "COLOR" -> jugadas[4]++ "ESCALERA" -> jugadas[5]++ "TRIO" -> jugadas[6]++ "DOBLE PAREJA" -> jugadas[7]++ "PAREJA" -> jugadas[8]++ "CARTA ALTA" -> jugadas[9]++ } when(tipo2){ "ESCALERA REAL" -> jugadas[0]++ "ESCALERA COLOR" -> jugadas[1]++ "POKER" -> jugadas[2]++ "FULL HOUSE" -> jugadas[3]++ "COLOR" -> jugadas[4]++ "ESCALERA" -> jugadas[5]++ "TRIO" -> jugadas[6]++ "DOBLE PAREJA" -> jugadas[7]++ "PAREJA" -> jugadas[8]++ "CARTA ALTA" -> jugadas[9]++ } var posGanador = -1 var segundo = 0 loop@ for(casos in jugadas.indices){ when(jugadas[casos]) { 1->{ posGanador = casos ganador = when(posGanador){ 0 -> "ESCALERA REAL" 1 -> "ESCALERA COLOR" 2 -> "POKER" 3 -> "FULL HOUSE" 4 -> "COLOR" 5 -> "ESCALERA" 6 -> "TRIO" 7 -> "DOBLE PAREJA" 8 -> "PAREJA" 9 -> "CARTA ALTA" else -> "NADA" } break@loop } 2->{ when(casos){ 0 -> { //"ESCALERA REAL" ganador = "EMPATE" } 1 ->{ //"ESCALERA COLOR" var ultimo = 1 var kicker1 = 0 var kicker2 = 0 loopjugado1@ for (indice in valoresJugados1.indices) { if (valoresJugados1[indice] == 1) { if (ultimo == 5) { kicker1 = indice break@loopjugado1 } ultimo++ } } ultimo = 1 println() loopjugado2@ for (indice in valoresJugados2.indices){ if (valoresJugados2[indice] == 1) { if (ultimo == 5){ kicker2 = indice break@loopjugado2 } ultimo++ } } println("kicker1 = $kicker1 kicker2 = $kicker2") ganador = if (kicker1 == 0 && kicker2 != 0){ "JUGADOR 1" }else if (kicker2 == 0 && kicker1 != 0) { "JUGADOR 2" }else if (kicker1 == kicker2){ "EMPATE" }else if (kicker1 > kicker2) { "JUGADOR 1" } else "JUGADOR 2" } 2 ->{ //"POKER" var ultimo = 0 var kicker1 = 0 var kicker2 = 0 for (indice in valoresJugados1.indices) { if (valoresJugados1[indice] == 1) { if (ultimo == 5) { kicker1 = indice } ultimo++ } } ultimo = 0 for (indice in valoresJugados2.indices){ if (valoresJugados2[indice] == 1) { if (ultimo == 5){ kicker2 = indice } ultimo++ } } ganador = if (kicker1 == 0 && kicker2 != 0){ "JUGADOR 1" }else if (kicker2 == 0 && kicker1 != 0) { "JUGADOR 2" }else if (kicker1 == kicker2){ "EMPATE" }else if (kicker1 > kicker2) { "JUGADOR 1" } else "JUGADOR 2" } 3 -> { //"FULL HOUSE" var trio1 = -1 for (indice in valoresJugados1.indices) { if (valoresJugados1[indice] == 3) { trio1 = indice } } var trio2 = -1 for (indice in valoresJugados2.indices) { if (valoresJugados2[indice] == 3) { trio2 = indice } } ganador = if (trio1 == 0 && trio2 != 0) { "JUGADOR 1" } else if (trio2 == 0 && trio1 != 0) { "JUGADOR 2" } else if (trio1 == trio2) { "EMPATE" } else if (trio1 > trio2) { "JUGADOR 1" } else "JUGADOR 2" } 4 ->{ //"COLOR" var ultimo = 1 var kicker1 = 0 var kicker2 = 0 loopjugado1@ for (indice in valoresJugados1.indices) { if (valoresJugados1[indice] == 1) { if (ultimo == 5 || indice == 0) { kicker1 = indice break@loopjugado1 } ultimo++ } } ultimo = 1 println() loopjugado2@ for (indice in valoresJugados2.indices){ if (valoresJugados2[indice] == 1) { if (ultimo == 5 || indice == 0){ kicker2 = indice break@loopjugado2 } ultimo++ } } println("kicker1 = $kicker1 kicker2 = $kicker2") ganador = if (kicker1 == 0 && kicker2 != 0){ "JUGADOR 1" }else if (kicker2 == 0 && kicker1 != 0) { "JUGADOR 2" }else if (kicker1 == kicker2){ "EMPATE" }else if (kicker1 > kicker2) { "JUGADOR 1" } else "JUGADOR 2" } 5 ->{ //"ESCALERA" var ultimo = 1 var kicker1 = 0 var kicker2 = 0 loopjugado1@ for (indice in valoresJugados1.indices) { if (valoresJugados1[indice] == 1) { if (ultimo == 5 || (indice == 0 && valoresJugados1[9] == 1 && valoresJugados1[10] == 1 && valoresJugados1[11] == 1 && valoresJugados1[12] == 1)){ kicker1 = indice break@loopjugado1 } ultimo++ } } ultimo = 1 println() loopjugado2@ for (indice in valoresJugados2.indices){ if (valoresJugados2[indice] == 1) { if (ultimo == 5 || (indice == 0 && valoresJugados1[9] == 1 && valoresJugados1[10] == 1 && valoresJugados1[11] == 1 && valoresJugados1[12] == 1)){ kicker2 = indice break@loopjugado2 } ultimo++ } } println("kicker1 = $kicker1 kicker2 = $kicker2") ganador = if (kicker1 == 0 && kicker2 != 0){ "JUGADOR 1" }else if (kicker2 == 0 && kicker1 != 0) { "JUGADOR 2" }else if (kicker1 == kicker2){ "EMPATE" }else if (kicker1 > kicker2) { "JUGADOR 1" } else "JUGADOR 2" } 6 ->{ //"TRIO" var trio1 = -1 for (indice in valoresJugados1.indices) { if (valoresJugados1[indice] == 3) { trio1 = indice } } var trio2 = -1 for (indice in valoresJugados2.indices) { if (valoresJugados2[indice] == 3) { trio2 = indice } } ganador = if (trio1 == 0 && trio2 != 0) { "JUGADOR 1" } else if (trio2 == 0 && trio1 != 0) { "JUGADOR 2" } else if (trio1 == trio2) { "EMPATE" } else if (trio1 > trio2) { "JUGADOR 1" } else "JUGADOR 2" } 7 ->{ //"DOBLE PAREJA" var primerDoble = -1 var segundoDoble = -1 loopintern@for (indice in valoresJugados1.indices){ if (segundo == 1){ if (valoresJugados1[indice] == 2){ segundoDoble = indice segundo = 0 break@loopintern } } if (valoresJugados1[indice] == 2 && segundo == 0){ primerDoble = indice segundo = 1 } } var primerDoble2 = -1 var segundoDoble2 = -1 segundo = 0 loopintern@for (indice in valoresJugados2.indices){ if (segundo == 1){ if (valoresJugados2[indice] == 2){ segundoDoble2 = indice segundo = 0 break@loopintern } } if (valoresJugados2[indice] == 2 && segundo == 0){ primerDoble2 = indice segundo = 1 } } ganador = if (primerDoble == 0 && primerDoble2 != 0) { "JUGADOR 1" } else if (primerDoble2 == 0 && primerDoble != 0) { "JUGADOR 2" } else if (primerDoble == primerDoble2) { when { segundoDoble == segundoDoble2 -> { "EMPATE" } segundoDoble > segundoDoble2 -> { "JUGADOR 1" } else -> { "JUGADOR 2" } } } else if (primerDoble > primerDoble2) { "JUGADOR 1" } else "JUGADOR 2" } 8 ->{ //"PAREJA" var ultimo = 1 var kicker1 = 0 var kicker2 = 0 var primerDoble = -1 var segundo = false for (indice in valoresJugados1.indices){ if (valoresJugados1[indice] == 2){ primerDoble = indice ultimo = 2 } } loopjugado1@ for (indice in valoresJugados1.indices) { if (valoresJugados1[indice] == 1) { if (ultimo == 4 || (indice == 0)){ kicker1 = if (indice == 0) 14 else indice break@loopjugado1 } ultimo++ } } ultimo = 1 var primerDoble2 = -1 for (indice in valoresJugados2.indices){ if (valoresJugados2[indice] == 2){ primerDoble2 = indice ultimo = 2 } } loopjugado2@ for (indice in valoresJugados2.indices){ if (valoresJugados2[indice] == 1) { if (ultimo == 4 || (indice == 0)){ kicker2 = if (indice == 0) 14 else indice break@loopjugado2 } ultimo++ } } ganador = if (primerDoble == 0 && primerDoble2 != 0) { "JUGADOR 1" } else if (primerDoble2 == 0 && primerDoble != 0) { "JUGADOR 2" } else if (primerDoble == primerDoble2) { when { kicker1 > kicker2 -> "JUGADOR 1 Por Kicker mas alto" kicker1 < kicker2 -> "JUGADOR 2 Por Kicker mas alto" else -> "EMPATE" } } else if (primerDoble > primerDoble2) { "JUGADOR 1" } else "JUGADOR 2" } 9 ->{ //"CARTA ALTA" var ultimo = 1 var kicker1 = 0 var kicker2 = 0 loopjugado1@ for (indice in valoresJugados1.indices) { if (valoresJugados1[indice] == 1) { if (ultimo == 5 || (indice == 0)){ kicker1 = indice break@loopjugado1 } ultimo++ } } ultimo = 1 println() loopjugado2@ for (indice in valoresJugados2.indices){ if (valoresJugados2[indice] == 1) { if (ultimo == 5 || (indice == 0)){ kicker2 = indice break@loopjugado2 } ultimo++ } } println("kicker1 = $kicker1 kicker2 = $kicker2") ganador = if (kicker1 == 0 && kicker2 != 0){ "JUGADOR 1" }else if (kicker2 == 0 && kicker1 != 0) { "JUGADOR 2" }else if (kicker1 == kicker2){ "EMPATE" }else if (kicker1 > kicker2) { "JUGADOR 1" } else "JUGADOR 2" } else ->{ //"NADA" "ERROR 5: JUGADA NO ENCONTRADA" } } } } } return ganador }