diff --git a/src/juego/ContenedorGrupos.kt b/src/juego/ContenedorGrupos.kt index e62e398..7d5e336 100644 --- a/src/juego/ContenedorGrupos.kt +++ b/src/juego/ContenedorGrupos.kt @@ -1,10 +1,10 @@ package dev.araozu.juego class ContenedorGrupos( - private val tris: ArrayList>, - private val seqs: ArrayList>, - private val pares: ArrayList>, - private val huerfanos: ArrayList + val tris: ArrayList>, + val seqs: ArrayList>, + val pares: ArrayList>, + val huerfanos: ArrayList ) { constructor () : this( diff --git a/src/juego/yaku/Yaku.kt b/src/juego/yaku/Yaku.kt new file mode 100644 index 0000000..8c3889f --- /dev/null +++ b/src/juego/yaku/Yaku.kt @@ -0,0 +1,120 @@ +package dev.araozu.juego.yaku + +import dev.araozu.juego.ContenedorGrupos + +enum class Yaku { + // 15 + DragonesFull, + Verde, + // 10 + RealezaDragones, + RealezaFull, + // 5 + TripleTriplesCerrados, + EscaleraFull, + Exterior, + // 4 + Escalera, + TripleCuadruples, + Negro, + Rojo, + SemiExterior, + // 3 + ParUnico, + Dragones, + Interior, + TripleTriples, + TripleSecuenciaCerrada, + Realeza, + DobleSecuenciaPura +} + +fun Yaku.obtenerListaYakus(contenedorGrupos: ContenedorGrupos): ArrayList { + val listaYakus = ArrayList() + + // Invariante: 3 sequencias/triples/cuadruples y 1 par + if (contenedorGrupos.seqs.size + contenedorGrupos.tris.size != 3 || contenedorGrupos.pares.size != 1) { + throw Error("Error de invariante: Se intento verificar los yakus de un contenedor invalido.") + } + + // 15 puntos + if (yakuDragonesFull(contenedorGrupos)) { + listaYakus.add(Yaku.DragonesFull) + return listaYakus + } + if (yakuVerde(contenedorGrupos)) { + listaYakus.add(Yaku.Verde) + return listaYakus + } + + // 10 puntos + if (yakuRealezaDragones(contenedorGrupos)) { + listaYakus.add(Yaku.RealezaDragones) + return listaYakus + } + if (yakuRealezaFull(contenedorGrupos)) { + listaYakus.add(Yaku.RealezaFull) + return listaYakus + } + + // 5 puntos + if (yakuExterior(contenedorGrupos)) { + listaYakus.add(Yaku.Exterior) + } + + var verificarEscalera = true + if (yakuEscaleraFull(contenedorGrupos)) { + listaYakus.add(Yaku.EscaleraFull) + verificarEscalera = false + } + + var verificarTripleTriples = true + if (yakuTripleTriplesCerrados(contenedorGrupos)) { + listaYakus.add(Yaku.TripleTriplesCerrados) + listaYakus.add(Yaku.TripleTriples) + verificarTripleTriples = false + } + + // 4 puntos + if (yakuSemiExterior(contenedorGrupos)) { + listaYakus.add(Yaku.SemiExterior) + } + if (yakuRojo(contenedorGrupos)) { + listaYakus.add(Yaku.Rojo) + } + if (yakuNegro(contenedorGrupos)) { + listaYakus.add(Yaku.Negro) + } + if (yakuTripleCuadruples(contenedorGrupos)) { + listaYakus.add(Yaku.TripleCuadruples) + } + if (verificarEscalera && yakuEscalera(contenedorGrupos)) { + listaYakus.add(Yaku.Escalera) + } + + // 3 puntos + if (yakuDobleSecuenciaPura(contenedorGrupos)) { + listaYakus.add(Yaku.DobleSecuenciaPura) + } + if (yakuRealeza(contenedorGrupos)) { + listaYakus.add(Yaku.Realeza) + } + if (yakuTripleSecuenciaCerrada(contenedorGrupos)) { + listaYakus.add(Yaku.TripleSecuenciaCerrada) + } + if (verificarTripleTriples && yakuTripleTriples(contenedorGrupos)) { + listaYakus.add(Yaku.TripleTriples) + } + if (yakuInterior(contenedorGrupos)) { + listaYakus.add(Yaku.Interior) + } + if (yakuDragones(contenedorGrupos)) { + listaYakus.add(Yaku.Dragones) + } + if (yakuParUnico(contenedorGrupos)) { + listaYakus.add(Yaku.ParUnico) + } + + return listaYakus +} + diff --git a/src/juego/yaku/yaku10.kt b/src/juego/yaku/yaku10.kt new file mode 100644 index 0000000..d83f742 --- /dev/null +++ b/src/juego/yaku/yaku10.kt @@ -0,0 +1,13 @@ +package dev.araozu.juego.yaku + +import dev.araozu.juego.ContenedorGrupos + +internal fun yakuRealezaDragones(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuRealezaFull(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} diff --git a/src/juego/yaku/yaku15.kt b/src/juego/yaku/yaku15.kt new file mode 100644 index 0000000..7faefa1 --- /dev/null +++ b/src/juego/yaku/yaku15.kt @@ -0,0 +1,13 @@ +package dev.araozu.juego.yaku + +import dev.araozu.juego.ContenedorGrupos + +internal fun yakuDragonesFull(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuVerde(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} diff --git a/src/juego/yaku/yaku3.kt b/src/juego/yaku/yaku3.kt new file mode 100644 index 0000000..bf2ac03 --- /dev/null +++ b/src/juego/yaku/yaku3.kt @@ -0,0 +1,38 @@ +package dev.araozu.juego.yaku + +import dev.araozu.juego.ContenedorGrupos + +internal fun yakuDobleSecuenciaPura(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuRealeza(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuTripleSecuenciaCerrada(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuTripleTriples(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuInterior(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuDragones(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuParUnico(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} diff --git a/src/juego/yaku/yaku4.kt b/src/juego/yaku/yaku4.kt new file mode 100644 index 0000000..c0f9c13 --- /dev/null +++ b/src/juego/yaku/yaku4.kt @@ -0,0 +1,29 @@ +package dev.araozu.juego.yaku + +import dev.araozu.juego.ContenedorGrupos + +internal fun yakuSemiExterior(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuRojo(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuNegro(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuTripleCuadruples(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuEscalera(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + diff --git a/src/juego/yaku/yaku5.kt b/src/juego/yaku/yaku5.kt new file mode 100644 index 0000000..3b2356e --- /dev/null +++ b/src/juego/yaku/yaku5.kt @@ -0,0 +1,18 @@ +package dev.araozu.juego.yaku + +import dev.araozu.juego.ContenedorGrupos + +internal fun yakuExterior(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuEscaleraFull(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuTripleTriplesCerrados(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +}