Incorporados yaku a OportunidadWin.kt
This commit is contained in:
parent
c1a3286e1a
commit
cfebb922c3
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user