diff --git a/build.gradle b/build.gradle index 10dd5bb..ba36a9b 100644 --- a/build.gradle +++ b/build.gradle @@ -40,4 +40,5 @@ dependencies { implementation "io.ktor:ktor-gson:$ktor_version" implementation 'com.google.code.gson:gson:2.8.5' testImplementation "io.ktor:ktor-server-tests:$ktor_version" + testImplementation 'io.kotest:kotest-runner-junit5:$version' } diff --git a/src/juego/ContenedorGrupos.kt b/src/juego/ContenedorGrupos.kt index 34ce8ab..ffbd007 100644 --- a/src/juego/ContenedorGrupos.kt +++ b/src/juego/ContenedorGrupos.kt @@ -12,8 +12,7 @@ class ContenedorGrupos( arrayListOf>(), arrayListOf>(), arrayListOf() - ) { - } + ) fun agregarDesdeContenedor(c: ContenedorGrupos) { tris.addAll(c.tris) diff --git a/src/juego/OportunidadWin.kt b/src/juego/OportunidadRon.kt similarity index 96% rename from src/juego/OportunidadWin.kt rename to src/juego/OportunidadRon.kt index a9c9ddd..095642d 100644 --- a/src/juego/OportunidadWin.kt +++ b/src/juego/OportunidadRon.kt @@ -3,7 +3,7 @@ package dev.araozu.juego import dev.araozu.juego.yaku.Yaku import dev.araozu.juego.yaku.obtenerListaYakus -class OportunidadWin(override val cartaDescartada: Int, val yaku: ArrayList) : Oportunidad { +class OportunidadRon(override val cartaDescartada: Int, val yaku: ArrayList) : Oportunidad { override val nombreOportunidad = "Win" @@ -148,7 +148,11 @@ class OportunidadWin(override val cartaDescartada: Int, val yaku: ArrayList valorCont2) contenedor1 else contenedor2 } - fun verificar(valorCarta: Int, cartasMano: ArrayList, gruposAbiertos: ArrayList>): OportunidadWin? { + fun verificar( + valorCarta: Int, + cartasMano: ArrayList, + gruposAbiertos: ArrayList> = arrayListOf() + ): OportunidadRon? { val narrl = ArrayList(cartasMano.size + 1) narrl.addAll(cartasMano) narrl.add(valorCarta) @@ -191,7 +195,7 @@ class OportunidadWin(override val cartaDescartada: Int, val yaku: ArrayList { @@ -45,7 +49,7 @@ fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean return arrayListOf() } - // 15 puntos + // 10 puntos if (yakuDragonesFull(contenedorGrupos)) { listaYakus.add(Yaku.DragonesFull) return listaYakus @@ -55,7 +59,7 @@ fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean return listaYakus } - // 10 puntos + // 7 puntos if (yakuRealezaDragones(contenedorGrupos)) { listaYakus.add(Yaku.RealezaDragones) return listaYakus @@ -66,6 +70,9 @@ fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean } // 5 puntos + // TODO + + // 3 puntos if (yakuExterior(contenedorGrupos)) { listaYakus.add(Yaku.Exterior) } @@ -84,7 +91,7 @@ fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean verificarTripleTriples = false } - // 4 puntos + // 2 puntos if (yakuSemiExterior(contenedorGrupos)) { listaYakus.add(Yaku.SemiExterior) } @@ -94,24 +101,18 @@ fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean 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) + // 1 punto + if (yakuDobleSecuencia(contenedorGrupos)) { + listaYakus.add(Yaku.DobleSecuencia) } val cantidad = yakuRealeza(contenedorGrupos) if (cantidad > 0) { listaYakus.add(Yaku.Realeza) } - if (!esManoAbierta && yakuTripleSecuenciaCerrada(contenedorGrupos)) { - listaYakus.add(Yaku.TripleSecuenciaCerrada) - } if (verificarTripleTriples && yakuTripleTriples(contenedorGrupos)) { listaYakus.add(Yaku.TripleTriples) } @@ -122,9 +123,6 @@ fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean if (cantidadDragon > 0) { listaYakus.add(Yaku.Dragones) } - if (yakuParUnico(contenedorGrupos)) { - listaYakus.add(Yaku.ParUnico) - } return listaYakus } diff --git a/src/juego/yaku/yaku1.kt b/src/juego/yaku/yaku1.kt new file mode 100644 index 0000000..7e9abd5 --- /dev/null +++ b/src/juego/yaku/yaku1.kt @@ -0,0 +1,61 @@ +package dev.araozu.juego.yaku + +import dev.araozu.juego.CartaNumero +import dev.araozu.juego.ContenedorGrupos + +// TODO +internal fun yakuDobleSecuencia(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuVariedad(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuRealeza(contenedorGrupos: ContenedorGrupos): Int { + var cantidadRealeza = 0 + for (carrl in contenedorGrupos.tris) { + val cartaTri = carrl[0] + if (cartaTri.esRey()) cantidadRealeza++ + } + + return cantidadRealeza +} + +internal fun yakuTripleTriples(contenedorGrupos: ContenedorGrupos) = + contenedorGrupos.tris.size == 3 + +internal fun yakuInterior(contenedorGrupos: ContenedorGrupos): Boolean { + + 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 +} + +// TODO +internal fun yakuDragones(contenedorGrupos: ContenedorGrupos): Int { + + return 0 +} + diff --git a/src/juego/yaku/yaku10.kt b/src/juego/yaku/yaku10.kt index 601dd00..e1c2ae7 100644 --- a/src/juego/yaku/yaku10.kt +++ b/src/juego/yaku/yaku10.kt @@ -1,36 +1,42 @@ package dev.araozu.juego.yaku -import dev.araozu.juego.CartaRealeza +import dev.araozu.juego.CartaDragon import dev.araozu.juego.ContenedorGrupos -internal fun yakuRealezaDragones(contenedorGrupos: ContenedorGrupos): Boolean { +internal fun yakuDragonesFull(contenedorGrupos: ContenedorGrupos): Boolean { if (contenedorGrupos.tris.size != 3) return false for (carrl in contenedorGrupos.tris) { for (c in carrl) { - if (!c.esDragonORey()) return false + if (c !is CartaDragon) return false } } for (carrl in contenedorGrupos.pares) { for (c in carrl) { - if (!c.esDragonORey()) return false + if (c !is CartaDragon) return false } } return true } -internal fun yakuRealezaFull(contenedorGrupos: ContenedorGrupos): Boolean { +internal fun yakuVerde(contenedorGrupos: ContenedorGrupos): Boolean { if (contenedorGrupos.tris.size != 3) return false for (carrl in contenedorGrupos.tris) { for (c in carrl) { - if (c !is CartaRealeza) return false + if (!c.esCartaVerde()) return false } } - return false + for (carrl in contenedorGrupos.pares) { + for (c in carrl) { + if (!c.esCartaVerde()) return false + } + } + + return true } diff --git a/src/juego/yaku/yaku15.kt b/src/juego/yaku/yaku15.kt deleted file mode 100644 index e1c2ae7..0000000 --- a/src/juego/yaku/yaku15.kt +++ /dev/null @@ -1,42 +0,0 @@ -package dev.araozu.juego.yaku - -import dev.araozu.juego.CartaDragon -import dev.araozu.juego.ContenedorGrupos - -internal fun yakuDragonesFull(contenedorGrupos: ContenedorGrupos): Boolean { - - if (contenedorGrupos.tris.size != 3) return false - - for (carrl in contenedorGrupos.tris) { - for (c in carrl) { - if (c !is CartaDragon) return false - } - } - - for (carrl in contenedorGrupos.pares) { - for (c in carrl) { - if (c !is CartaDragon) return false - } - } - - return true -} - -internal fun yakuVerde(contenedorGrupos: ContenedorGrupos): Boolean { - - if (contenedorGrupos.tris.size != 3) return false - - for (carrl in contenedorGrupos.tris) { - for (c in carrl) { - if (!c.esCartaVerde()) return false - } - } - - for (carrl in contenedorGrupos.pares) { - for (c in carrl) { - if (!c.esCartaVerde()) return false - } - } - - return true -} diff --git a/src/juego/yaku/yaku4.kt b/src/juego/yaku/yaku2.kt similarity index 92% rename from src/juego/yaku/yaku4.kt rename to src/juego/yaku/yaku2.kt index 86c89ed..d8d52f0 100644 --- a/src/juego/yaku/yaku4.kt +++ b/src/juego/yaku/yaku2.kt @@ -3,6 +3,11 @@ package dev.araozu.juego.yaku import dev.araozu.juego.CartaNumero import dev.araozu.juego.ContenedorGrupos +internal fun yakuDobleSecuenciaPura(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + internal fun yakuSemiExterior(contenedorGrupos: ContenedorGrupos): Boolean { for (carrl in contenedorGrupos.seqs) { @@ -84,17 +89,6 @@ internal fun yakuNegro(contenedorGrupos: ContenedorGrupos): Boolean { return true } -internal fun yakuTripleCuadruples(contenedorGrupos: ContenedorGrupos): Boolean { - - if (contenedorGrupos.tris.size != 3) return false - - for (triple in contenedorGrupos.tris) { - if (triple.size != 4) return false - } - - return true -} - // TODO: Las secuencias pueden no estar en orden internal fun yakuEscalera(contenedorGrupos: ContenedorGrupos): Boolean { diff --git a/src/juego/yaku/yaku3.kt b/src/juego/yaku/yaku3.kt index 84e7949..f5a8766 100644 --- a/src/juego/yaku/yaku3.kt +++ b/src/juego/yaku/yaku3.kt @@ -3,66 +3,29 @@ package dev.araozu.juego.yaku import dev.araozu.juego.CartaNumero import dev.araozu.juego.ContenedorGrupos -// TODO -internal fun yakuDobleSecuenciaPura(contenedorGrupos: ContenedorGrupos): Boolean { +internal fun yakuExterior(contenedorGrupos: ContenedorGrupos): Boolean { - return false -} - -internal fun yakuRealeza(contenedorGrupos: ContenedorGrupos): Int { - var cantidadRealeza = 0 - for (carrl in contenedorGrupos.tris) { - val cartaTri = carrl[0] - if (cartaTri.esRey()) cantidadRealeza++ - } - - return cantidadRealeza -} - -internal fun yakuTripleSecuenciaCerrada(contenedorGrupos: ContenedorGrupos) = - contenedorGrupos.tris.size == 3 - -internal fun yakuTripleTriples(contenedorGrupos: ContenedorGrupos) = - contenedorGrupos.tris.size == 3 - -internal fun yakuInterior(contenedorGrupos: ContenedorGrupos): Boolean { - - for (carrl in contenedorGrupos.seqs) { - for (c in carrl) { - if (c !is CartaNumero) return false - if (c.esExterior()) return false - } - } + if (contenedorGrupos.tris.size != 3) return false for (carrl in contenedorGrupos.tris) { for (c in carrl) { - if (c !is CartaNumero) return false - if (c.esExterior()) return false + if (!c.esDragonORey() || c !is CartaNumero || !c.esExterior()) + return false } } for (carrl in contenedorGrupos.pares) { for (c in carrl) { - if (c !is CartaNumero) return false - if (c.esExterior()) return false + if (!c.esDragonORey() || c !is CartaNumero || !c.esExterior()) + return false } } return true } -// TODO -internal fun yakuDragones(contenedorGrupos: ContenedorGrupos): Int { +internal fun yakuTripleTriplesCerrados(contenedorGrupos: ContenedorGrupos): Boolean { - return 0 + return false } -internal fun yakuParUnico(contenedorGrupos: ContenedorGrupos): Boolean { - val par = contenedorGrupos.pares[0] - val c1 = par[0] - val c2 = par[1] - - if (c1 !is CartaNumero || c2 !is CartaNumero) return false - - return c1.valor == c2.valor -} diff --git a/src/juego/yaku/yaku5.kt b/src/juego/yaku/yaku5.kt index 0fb5e7d..937922e 100644 --- a/src/juego/yaku/yaku5.kt +++ b/src/juego/yaku/yaku5.kt @@ -3,26 +3,6 @@ package dev.araozu.juego.yaku import dev.araozu.juego.CartaNumero import dev.araozu.juego.ContenedorGrupos -internal fun yakuExterior(contenedorGrupos: ContenedorGrupos): Boolean { - - if (contenedorGrupos.tris.size != 3) return false - - for (carrl in contenedorGrupos.tris) { - for (c in carrl) { - if (!c.esDragonORey() || c !is CartaNumero || !c.esExterior()) - return false - } - } - - for (carrl in contenedorGrupos.pares) { - for (c in carrl) { - if (!c.esDragonORey() || c !is CartaNumero || !c.esExterior()) - return false - } - } - - return true -} // TODO: Las secuencias pueden no estar en orden internal fun yakuEscaleraFull(contenedorGrupos: ContenedorGrupos): Boolean { @@ -57,4 +37,3 @@ internal fun yakuEscaleraFull(contenedorGrupos: ContenedorGrupos): Boolean { return true } - diff --git a/src/juego/yaku/yaku7.kt b/src/juego/yaku/yaku7.kt new file mode 100644 index 0000000..ac03dc7 --- /dev/null +++ b/src/juego/yaku/yaku7.kt @@ -0,0 +1,46 @@ +package dev.araozu.juego.yaku + +import dev.araozu.juego.CartaRealeza +import dev.araozu.juego.ContenedorGrupos + +internal fun yakuA10(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuEscaleraPerfecta(contenedorGrupos: ContenedorGrupos): Boolean { + + return false +} + +internal fun yakuRealezaDragones(contenedorGrupos: ContenedorGrupos): Boolean { + + if (contenedorGrupos.tris.size != 3) return false + + for (carrl in contenedorGrupos.tris) { + for (c in carrl) { + if (!c.esDragonORey()) return false + } + } + + for (carrl in contenedorGrupos.pares) { + for (c in carrl) { + if (!c.esDragonORey()) return false + } + } + + return true +} + +internal fun yakuRealezaFull(contenedorGrupos: ContenedorGrupos): Boolean { + + if (contenedorGrupos.tris.size != 3) return false + + for (carrl in contenedorGrupos.tris) { + for (c in carrl) { + if (c !is CartaRealeza) return false + } + } + + return true +}