Incorporados yaku a OportunidadWin.kt

master
Araozu 2020-10-21 09:32:57 -05:00
parent c1a3286e1a
commit cfebb922c3
4 changed files with 50 additions and 12 deletions

View File

@ -22,6 +22,22 @@ class ContenedorGrupos(
huerfanos.addAll(c.huerfanos)
}
fun agregarTriDesdeInt(t: ArrayList<Int>) {
val arrl = ArrayList<Carta>(t.size)
t.forEach { arrl.add(Carta.obtenerCartaEspecifica(it)) }
tris.add(arrl)
}
fun agregarSeqDesdeInt(t: ArrayList<Int>) {
val arrl = ArrayList<Carta>(t.size)
t.forEach { arrl.add(Carta.obtenerCartaEspecifica(it)) }
seqs.add(arrl)
}
fun agregarSeqs(s: ArrayList<ArrayList<Carta>>) {
seqs.addAll(s)
}

View File

@ -174,7 +174,7 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
}
// 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)

View File

@ -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<Yaku>) : 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<Int>): OportunidadWin? {
fun verificar(valorCarta: Int, cartasMano: ArrayList<Int>, gruposAbiertos: ArrayList<ArrayList<Int>>): OportunidadWin? {
val narrl = ArrayList<Int>(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)
}
}

View File

@ -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<Yaku> {
fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean): ArrayList<Yaku> {
val listaYakus = ArrayList<Yaku>()
// Invariante: 3 sequencias/triples/cuadruples, 1 par y ningun huerfano
@ -72,9 +75,9 @@ fun Yaku.obtenerListaYakus(contenedorGrupos: ContenedorGrupos): ArrayList<Yaku>
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<Yaku>
return listaYakus
}