From cfebb922c33d97e617547231979403f87ff4e3af Mon Sep 17 00:00:00 2001 From: Araozu Date: Wed, 21 Oct 2020 09:32:57 -0500 Subject: [PATCH] Incorporados yaku a OportunidadWin.kt --- src/juego/ContenedorGrupos.kt | 16 ++++++++++++++++ src/juego/Juego.kt | 2 +- src/juego/OportunidadWin.kt | 32 ++++++++++++++++++++++++++------ src/juego/yaku/Yaku.kt | 12 +++++++----- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/src/juego/ContenedorGrupos.kt b/src/juego/ContenedorGrupos.kt index 7d5e336..278c788 100644 --- a/src/juego/ContenedorGrupos.kt +++ b/src/juego/ContenedorGrupos.kt @@ -22,6 +22,22 @@ class ContenedorGrupos( huerfanos.addAll(c.huerfanos) } + fun agregarTriDesdeInt(t: ArrayList) { + val arrl = ArrayList(t.size) + + t.forEach { arrl.add(Carta.obtenerCartaEspecifica(it)) } + + tris.add(arrl) + } + + fun agregarSeqDesdeInt(t: ArrayList) { + val arrl = ArrayList(t.size) + + t.forEach { arrl.add(Carta.obtenerCartaEspecifica(it)) } + + seqs.add(arrl) + } + fun agregarSeqs(s: ArrayList>) { seqs.addAll(s) } diff --git a/src/juego/Juego.kt b/src/juego/Juego.kt index 715c2df..7196e0b 100644 --- a/src/juego/Juego.kt +++ b/src/juego/Juego.kt @@ -174,7 +174,7 @@ class Juego(val usuarios: ArrayList>) { } // Oportunidades win - val oportunidadWin = OportunidadWin.verificar(carta, mano.cartas) + val oportunidadWin = OportunidadWin.verificar(carta, mano.cartas, mano.cartasReveladas) if (oportunidadWin != null) { hayOportunidades = true mano.oportunidades.add(oportunidadWin) diff --git a/src/juego/OportunidadWin.kt b/src/juego/OportunidadWin.kt index 121b30d..ec2a7ba 100644 --- a/src/juego/OportunidadWin.kt +++ b/src/juego/OportunidadWin.kt @@ -1,6 +1,9 @@ package dev.araozu.juego -class OportunidadWin(override val cartaDescartada: Int) : Oportunidad { +import dev.araozu.juego.yaku.Yaku +import dev.araozu.juego.yaku.obtenerListaYakus + +class OportunidadWin(override val cartaDescartada: Int, val yaku: ArrayList) : Oportunidad { override val nombreOportunidad = "Win" @@ -145,7 +148,7 @@ class OportunidadWin(override val cartaDescartada: Int) : Oportunidad { return if (valorCont1 > valorCont2) contenedor1 else contenedor2 } - fun verificar(valorCarta: Int, cartasMano: ArrayList): OportunidadWin? { + fun verificar(valorCarta: Int, cartasMano: ArrayList, gruposAbiertos: ArrayList>): OportunidadWin? { val narrl = ArrayList(cartasMano.size + 1) narrl.addAll(cartasMano) narrl.add(valorCarta) @@ -167,11 +170,28 @@ class OportunidadWin(override val cartaDescartada: Int) : Oportunidad { contenedorGrupos.agregarDesdeContenedor(obtenerContenedorCartasNumero(cartasRojo)) contenedorGrupos.agregarDesdeContenedor(obtenerContenedorCartasNumero(cartasNegro)) - return if (contenedorGrupos.estaListo()) { - OportunidadWin(valorCarta) - } else { - null + if (!contenedorGrupos.estaListo()) return null + + val esManoAbierta = gruposAbiertos.isEmpty() + + if (esManoAbierta) { + // Agregar los grupos abiertos al contenedor + for (arrl in gruposAbiertos) { + // Tri + if (((arrl[0] ushr 1) shl 1) == ((arrl[1] ushr 1) shl 1)) { + contenedorGrupos.agregarTriDesdeInt(arrl) + } + // Seq + else { + contenedorGrupos.agregarSeqDesdeInt(arrl) + } + } } + + // Obtener yaku + val yaku = obtenerListaYakus(contenedorGrupos, esManoAbierta) + + return OportunidadWin(valorCarta, yaku) } } diff --git a/src/juego/yaku/Yaku.kt b/src/juego/yaku/Yaku.kt index c22328b..87e30b2 100644 --- a/src/juego/yaku/Yaku.kt +++ b/src/juego/yaku/Yaku.kt @@ -6,19 +6,23 @@ enum class Yaku { // 15 DragonesFull, Verde, + // 10 RealezaDragones, RealezaFull, + // 5 TripleTriplesCerrados, EscaleraFull, Exterior, + // 4 Escalera, TripleCuadruples, Negro, Rojo, SemiExterior, + // 3 ParUnico, Dragones, @@ -29,8 +33,7 @@ enum class Yaku { DobleSecuenciaPura } -// TODO: Recibir como parametro si la mano esta abierta o cerrada y verificar los yakus aqui segun eso -fun Yaku.obtenerListaYakus(contenedorGrupos: ContenedorGrupos): ArrayList { +fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean): ArrayList { val listaYakus = ArrayList() // Invariante: 3 sequencias/triples/cuadruples, 1 par y ningun huerfano @@ -72,9 +75,9 @@ fun Yaku.obtenerListaYakus(contenedorGrupos: ContenedorGrupos): ArrayList verificarEscalera = false } - // TODO: Verificar la mano abierta + // Triple triples cerrados var verificarTripleTriples = true - if (yakuTripleTriples(contenedorGrupos)) { + if (!esManoAbierta && yakuTripleTriples(contenedorGrupos)) { listaYakus.add(Yaku.TripleTriplesCerrados) listaYakus.add(Yaku.TripleTriples) verificarTripleTriples = false @@ -122,4 +125,3 @@ fun Yaku.obtenerListaYakus(contenedorGrupos: ContenedorGrupos): ArrayList return listaYakus } -