Incorporados yaku a OportunidadWin.kt
This commit is contained in:
parent
c1a3286e1a
commit
cfebb922c3
@ -22,6 +22,22 @@ class ContenedorGrupos(
|
|||||||
huerfanos.addAll(c.huerfanos)
|
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>>) {
|
fun agregarSeqs(s: ArrayList<ArrayList<Carta>>) {
|
||||||
seqs.addAll(s)
|
seqs.addAll(s)
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Oportunidades win
|
// Oportunidades win
|
||||||
val oportunidadWin = OportunidadWin.verificar(carta, mano.cartas)
|
val oportunidadWin = OportunidadWin.verificar(carta, mano.cartas, mano.cartasReveladas)
|
||||||
if (oportunidadWin != null) {
|
if (oportunidadWin != null) {
|
||||||
hayOportunidades = true
|
hayOportunidades = true
|
||||||
mano.oportunidades.add(oportunidadWin)
|
mano.oportunidades.add(oportunidadWin)
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package dev.araozu.juego
|
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"
|
override val nombreOportunidad = "Win"
|
||||||
|
|
||||||
@ -145,7 +148,7 @@ class OportunidadWin(override val cartaDescartada: Int) : Oportunidad {
|
|||||||
return if (valorCont1 > valorCont2) contenedor1 else contenedor2
|
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)
|
val narrl = ArrayList<Int>(cartasMano.size + 1)
|
||||||
narrl.addAll(cartasMano)
|
narrl.addAll(cartasMano)
|
||||||
narrl.add(valorCarta)
|
narrl.add(valorCarta)
|
||||||
@ -167,11 +170,28 @@ class OportunidadWin(override val cartaDescartada: Int) : Oportunidad {
|
|||||||
contenedorGrupos.agregarDesdeContenedor(obtenerContenedorCartasNumero(cartasRojo))
|
contenedorGrupos.agregarDesdeContenedor(obtenerContenedorCartasNumero(cartasRojo))
|
||||||
contenedorGrupos.agregarDesdeContenedor(obtenerContenedorCartasNumero(cartasNegro))
|
contenedorGrupos.agregarDesdeContenedor(obtenerContenedorCartasNumero(cartasNegro))
|
||||||
|
|
||||||
return if (contenedorGrupos.estaListo()) {
|
if (!contenedorGrupos.estaListo()) return null
|
||||||
OportunidadWin(valorCarta)
|
|
||||||
} else {
|
val esManoAbierta = gruposAbiertos.isEmpty()
|
||||||
null
|
|
||||||
|
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
|
// 15
|
||||||
DragonesFull,
|
DragonesFull,
|
||||||
Verde,
|
Verde,
|
||||||
|
|
||||||
// 10
|
// 10
|
||||||
RealezaDragones,
|
RealezaDragones,
|
||||||
RealezaFull,
|
RealezaFull,
|
||||||
|
|
||||||
// 5
|
// 5
|
||||||
TripleTriplesCerrados,
|
TripleTriplesCerrados,
|
||||||
EscaleraFull,
|
EscaleraFull,
|
||||||
Exterior,
|
Exterior,
|
||||||
|
|
||||||
// 4
|
// 4
|
||||||
Escalera,
|
Escalera,
|
||||||
TripleCuadruples,
|
TripleCuadruples,
|
||||||
Negro,
|
Negro,
|
||||||
Rojo,
|
Rojo,
|
||||||
SemiExterior,
|
SemiExterior,
|
||||||
|
|
||||||
// 3
|
// 3
|
||||||
ParUnico,
|
ParUnico,
|
||||||
Dragones,
|
Dragones,
|
||||||
@ -29,8 +33,7 @@ enum class Yaku {
|
|||||||
DobleSecuenciaPura
|
DobleSecuenciaPura
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Recibir como parametro si la mano esta abierta o cerrada y verificar los yakus aqui segun eso
|
fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean): ArrayList<Yaku> {
|
||||||
fun Yaku.obtenerListaYakus(contenedorGrupos: ContenedorGrupos): ArrayList<Yaku> {
|
|
||||||
val listaYakus = ArrayList<Yaku>()
|
val listaYakus = ArrayList<Yaku>()
|
||||||
|
|
||||||
// Invariante: 3 sequencias/triples/cuadruples, 1 par y ningun huerfano
|
// Invariante: 3 sequencias/triples/cuadruples, 1 par y ningun huerfano
|
||||||
@ -72,9 +75,9 @@ fun Yaku.obtenerListaYakus(contenedorGrupos: ContenedorGrupos): ArrayList<Yaku>
|
|||||||
verificarEscalera = false
|
verificarEscalera = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Verificar la mano abierta
|
// Triple triples cerrados
|
||||||
var verificarTripleTriples = true
|
var verificarTripleTriples = true
|
||||||
if (yakuTripleTriples(contenedorGrupos)) {
|
if (!esManoAbierta && yakuTripleTriples(contenedorGrupos)) {
|
||||||
listaYakus.add(Yaku.TripleTriplesCerrados)
|
listaYakus.add(Yaku.TripleTriplesCerrados)
|
||||||
listaYakus.add(Yaku.TripleTriples)
|
listaYakus.add(Yaku.TripleTriples)
|
||||||
verificarTripleTriples = false
|
verificarTripleTriples = false
|
||||||
@ -122,4 +125,3 @@ fun Yaku.obtenerListaYakus(contenedorGrupos: ContenedorGrupos): ArrayList<Yaku>
|
|||||||
|
|
||||||
return listaYakus
|
return listaYakus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user