diff --git a/src/juego/Carta.kt b/src/juego/Carta.kt index 6ec6fb3..4cef78f 100644 --- a/src/juego/Carta.kt +++ b/src/juego/Carta.kt @@ -30,8 +30,10 @@ sealed class Carta(val valor: Int) { fun esCartaNegra() = (valor in 2..21) || valor == 64 + fun esRey() = valor == 192 || valor == 224 || valor == 256 + fun esDragonORey() = - valor == 64 || valor == 96 || valor == 128 || valor == 160 || valor == 192 || valor == 224 || valor == 256 + valor == 64 || valor == 96 || valor == 128 || valor == 160 || esRey() } diff --git a/src/juego/yaku/Yaku.kt b/src/juego/yaku/Yaku.kt index 87e30b2..2798176 100644 --- a/src/juego/yaku/Yaku.kt +++ b/src/juego/yaku/Yaku.kt @@ -104,10 +104,11 @@ fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean if (yakuDobleSecuenciaPura(contenedorGrupos)) { listaYakus.add(Yaku.DobleSecuenciaPura) } - if (yakuRealeza(contenedorGrupos)) { + val cantidad = yakuRealeza(contenedorGrupos) + if (cantidad > 0) { listaYakus.add(Yaku.Realeza) } - if (yakuTripleSecuenciaCerrada(contenedorGrupos)) { + if (!esManoAbierta && yakuTripleSecuenciaCerrada(contenedorGrupos)) { listaYakus.add(Yaku.TripleSecuenciaCerrada) } if (verificarTripleTriples && yakuTripleTriples(contenedorGrupos)) { @@ -116,7 +117,8 @@ fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean if (yakuInterior(contenedorGrupos)) { listaYakus.add(Yaku.Interior) } - if (yakuDragones(contenedorGrupos)) { + val cantidadDragon = yakuDragones(contenedorGrupos) + if (cantidadDragon > 0) { listaYakus.add(Yaku.Dragones) } if (yakuParUnico(contenedorGrupos)) { diff --git a/src/juego/yaku/yaku3.kt b/src/juego/yaku/yaku3.kt index 8795d6f..84e7949 100644 --- a/src/juego/yaku/yaku3.kt +++ b/src/juego/yaku/yaku3.kt @@ -1,36 +1,68 @@ package dev.araozu.juego.yaku +import dev.araozu.juego.CartaNumero import dev.araozu.juego.ContenedorGrupos +// TODO internal fun yakuDobleSecuenciaPura(contenedorGrupos: ContenedorGrupos): Boolean { return false } -internal fun yakuRealeza(contenedorGrupos: ContenedorGrupos): Boolean { +internal fun yakuRealeza(contenedorGrupos: ContenedorGrupos): Int { + var cantidadRealeza = 0 + for (carrl in contenedorGrupos.tris) { + val cartaTri = carrl[0] + if (cartaTri.esRey()) cantidadRealeza++ + } - return false + return cantidadRealeza } -internal fun yakuTripleSecuenciaCerrada(contenedorGrupos: ContenedorGrupos): Boolean { - - return false -} +internal fun yakuTripleSecuenciaCerrada(contenedorGrupos: ContenedorGrupos) = + contenedorGrupos.tris.size == 3 internal fun yakuTripleTriples(contenedorGrupos: ContenedorGrupos) = contenedorGrupos.tris.size == 3 internal fun yakuInterior(contenedorGrupos: ContenedorGrupos): Boolean { - return false + for (carrl in contenedorGrupos.seqs) { + for (c in carrl) { + if (c !is CartaNumero) return false + if (c.esExterior()) return false + } + } + + for (carrl in contenedorGrupos.tris) { + for (c in carrl) { + if (c !is CartaNumero) return false + if (c.esExterior()) return false + } + } + + for (carrl in contenedorGrupos.pares) { + for (c in carrl) { + if (c !is CartaNumero) return false + if (c.esExterior()) return false + } + } + + return true } -internal fun yakuDragones(contenedorGrupos: ContenedorGrupos): Boolean { +// TODO +internal fun yakuDragones(contenedorGrupos: ContenedorGrupos): Int { - return false + return 0 } internal fun yakuParUnico(contenedorGrupos: ContenedorGrupos): Boolean { + val par = contenedorGrupos.pares[0] + val c1 = par[0] + val c2 = par[1] - return false + if (c1 !is CartaNumero || c2 !is CartaNumero) return false + + return c1.valor == c2.valor } diff --git a/src/juego/yaku/yaku4.kt b/src/juego/yaku/yaku4.kt index f5058e4..37c8811 100644 --- a/src/juego/yaku/yaku4.kt +++ b/src/juego/yaku/yaku4.kt @@ -102,7 +102,7 @@ internal fun yakuEscalera(contenedorGrupos: ContenedorGrupos): Boolean { var primeraCarta = false var numeroActual = 0 var colorCarta = "" - for (carrl in contenedorGrupos.tris) { + for (carrl in contenedorGrupos.seqs) { for (c in carrl) { if (c !is CartaNumero) return false