Commit 0c01a638 by Miguel Do Carmo

Se agrego el proyecto 02 correspondiente a poker que es verificar mano ganadora

parent a045c295
package codigos import codigos.Const
/************Data class es una clase especial de KOTLIN que /************Data class es una clase especial de KOTLIN que
* te abstrae de los getters y setters o implementa automaticamente**/ * te abstrae de los getters y setters o implementa automaticamente**/
...@@ -6,66 +6,78 @@ data class CartaJugada(val valor: Char, val palo: Char) ...@@ -6,66 +6,78 @@ data class CartaJugada(val valor: Char, val palo: Char)
fun main() { fun main() {
val jugada = arrayListOf<CartaJugada>() val jugada = arrayListOf<CartaJugada>()
println("Leer Jugada: ") val jugada2 = arrayListOf<CartaJugada>()
var CartajugadasMesa : String
var CartaJugadasMesa : String var Carta2jugadasMesa : String
println("Primera jugada:")
do { do {
CartaJugadasMesa = readLine()!!.toString().toUpperCase() CartajugadasMesa = readLine()!!.toString().toUpperCase()
}while (Valido(CartaJugadasMesa)) }while (valido(CartajugadasMesa))
println("Segunda jugada:")
do {
Carta2jugadasMesa = readLine()!!.toString().toUpperCase()
}while (valido(Carta2jugadasMesa))
/*********Analiza Jugada************/ /*********Analiza Jugada************/
jugada.add(CartaJugada(valor = CartaJugadasMesa[0], palo = CartaJugadasMesa[1])) jugada.add(CartaJugada(valor = CartajugadasMesa[0], palo = CartajugadasMesa[1]))
jugada.add(CartaJugada(valor = CartaJugadasMesa[2], palo = CartaJugadasMesa[3])) jugada.add(CartaJugada(valor = CartajugadasMesa[2], palo = CartajugadasMesa[3]))
jugada.add(CartaJugada(valor = CartaJugadasMesa[4], palo = CartaJugadasMesa[5])) jugada.add(CartaJugada(valor = CartajugadasMesa[4], palo = CartajugadasMesa[5]))
jugada.add(CartaJugada(valor = CartaJugadasMesa[6], palo = CartaJugadasMesa[7])) jugada.add(CartaJugada(valor = CartajugadasMesa[6], palo = CartajugadasMesa[7]))
jugada.add(CartaJugada(valor = CartaJugadasMesa[8], palo = CartaJugadasMesa[9])) 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 jugadaOrdenada = jugada.sortedWith(compareBy {it.valor})
print("JUGADA REALIZADA ${jugadaOrdenada[0].valor}${jugadaOrdenada[0].palo} ${jugadaOrdenada[1].valor}${jugadaOrdenada[1].palo} ${jugadaOrdenada[2].valor}${jugadaOrdenada[2].palo} ${jugadaOrdenada[3].valor}${jugadaOrdenada[3].palo} ${jugadaOrdenada[4].valor}${jugadaOrdenada[4].palo}") val jugada2Ordenada = jugada2.sortedWith(compareBy {it.valor})
println("Judada 1")
println(" es un/a ${analizaJugadaOrdenada(jugadaOrdenada)}") 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{
fun Valido(CartaJugadasMesa : String) : Boolean{
var result = true var result = true
if (CartajugadasMesa.length == 10 && !encuentraRepetidos(CartajugadasMesa)) {
if (CartaJugadasMesa.length == 10 && !encuentraRepetidos(CartaJugadasMesa)) {
for (indice in 1..9 step 2) { for (indice in 1..9 step 2) {
result = !( CartaJugadasMesa[indice] == Const.PALOS[0] || result = !( CartajugadasMesa[indice] == Const.PALOS[0] ||
CartaJugadasMesa[indice] == Const.PALOS[1] || CartajugadasMesa[indice] == Const.PALOS[1] ||
CartaJugadasMesa[indice] == Const.PALOS[2] || CartajugadasMesa[indice] == Const.PALOS[2] ||
CartaJugadasMesa[indice] == Const.PALOS[3]) CartajugadasMesa[indice] == Const.PALOS[3])
} }
}else { }else {
println("INVALIDO.\nIngrese de nuevo: ") println("INVALIDO.\nIngrese de nuevo: ")
} }
return result return result
} }
fun encuentraRepetidos(cartasMesa: String) : Boolean{ fun encuentraRepetidos(cartasMesa: String) : Boolean{
var mantieneCorrecto = false var mantieneCorrecto = false
for (caracteres in 0..4 step 2){ for (caracteres in 0..4 step 2){
for (caracteresRepite in caracteres+2..8 step 2){ for (caracteresRepite in caracteres+2..8 step 2){
if ((cartasMesa[caracteres] == cartasMesa[caracteresRepite]) && if ((cartasMesa[caracteres] == cartasMesa[caracteresRepite]) && (cartasMesa[caracteres+1] == cartasMesa[caracteresRepite+1])){
(cartasMesa[caracteres+1] == cartasMesa[caracteresRepite+1])){
mantieneCorrecto = true mantieneCorrecto = true
} }
} }
} }
return mantieneCorrecto return mantieneCorrecto
} }
fun analizaJugadaOrdenada(jugadaOrdenada : List<CartaJugada>): String{ fun analizaJugadaOrdenada(jugadaOrdenada : List<CartaJugada>): String{
var palosJugados = arrayOf(0,0,0,0) var palosJugados = arrayOf(0,0,0,0)
var valoresJugados = arrayOf(0,0,0,0,0,0,0,0,0,0,0,0,0) var valoresJugados = arrayOf(0,0,0,0,0,0,0,0,0,0,0,0,0)
var result: String = "NADA" var result = "NADA"
for (palos in jugadaOrdenada){ for (palos in jugadaOrdenada){
when(palos.palo){ when(palos.palo){
'S' -> palosJugados[0]++ 'S' -> palosJugados[0]++
...@@ -91,7 +103,7 @@ fun analizaJugadaOrdenada(jugadaOrdenada : List<CartaJugada>): String{ ...@@ -91,7 +103,7 @@ fun analizaJugadaOrdenada(jugadaOrdenada : List<CartaJugada>): String{
'K' -> valoresJugados[12]++ 'K' -> valoresJugados[12]++
} }
} }
var noEsColor =true var noEsColor =true
for (palo in palosJugados){ for (palo in palosJugados){
if (palo == 5){ if (palo == 5){
result = "COLOR" result = "COLOR"
...@@ -100,28 +112,19 @@ var noEsColor =true ...@@ -100,28 +112,19 @@ var noEsColor =true
result = if (position < 9){ 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 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){ }else if (position == 9){
if (1 == valoresJugados[position] && 1 == valoresJugados[position+1] && 1 == valoresJugados[position+2] && 1 == valoresJugados[position+3] && 1 == valoresJugados[0]) "ESCALERA COLOR REAL" else break 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 }else break
} }
} }
} // Jugadas posibles para 5 palos iguales } // jugadas posibles para 5 palos iguales
if (noEsColor) { if (noEsColor) {
var tieneTrio = false var tieneTrio = false
var cantDobles = 0 var cantDobles = 0
for (position in valoresJugados.indices) { for (position in valoresJugados.indices) {
if (valoresJugados[position] == 4) { if (valoresJugados[position] == 4) {
result = "POKER" result = "POKER"
break break
} else { } else if (valoresJugados[position] == 1 && position <= 9) {
if (valoresJugados[position] == 3) tieneTrio = true
if (valoresJugados[position] == 2) cantDobles++
result = if ((cantDobles == 1) && tieneTrio) "FULL"
else if ((cantDobles == 0) && tieneTrio) "TRIO"
else if (cantDobles == 1) "PAREJA"
else if (cantDobles == 2) "PAREJA DOBLE"
else "CARTA ALTA"
if (valoresJugados[position] == 1) {
if (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]) { if (1 == valoresJugados[position] && 1 == valoresJugados[position + 1] && 1 == valoresJugados[position + 2] && 1 == valoresJugados[position + 3] && 1 == valoresJugados[position + 4]) {
result = "ESCALERA" result = "ESCALERA"
...@@ -136,8 +139,461 @@ var noEsColor =true ...@@ -136,8 +139,461 @@ var noEsColor =true
} else continue } else continue
} else continue } else continue
} // Controla para ESCALERA } // 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 return result
} }
fun jugadaGanadora(jugada1 : List<CartaJugada>, jugada2 : List<CartaJugada>, 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<Int> = 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
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment