Modificar y corregir yaku
This commit is contained in:
parent
1ddb05a55d
commit
64c802ad85
@ -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'
|
||||
}
|
||||
|
@ -12,8 +12,7 @@ class ContenedorGrupos(
|
||||
arrayListOf<ArrayList<Carta>>(),
|
||||
arrayListOf<ArrayList<Carta>>(),
|
||||
arrayListOf<Carta>()
|
||||
) {
|
||||
}
|
||||
)
|
||||
|
||||
fun agregarDesdeContenedor(c: ContenedorGrupos) {
|
||||
tris.addAll(c.tris)
|
||||
|
@ -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<Yaku>) : Oportunidad {
|
||||
class OportunidadRon(override val cartaDescartada: Int, val yaku: ArrayList<Yaku>) : Oportunidad {
|
||||
|
||||
override val nombreOportunidad = "Win"
|
||||
|
||||
@ -148,7 +148,11 @@ class OportunidadWin(override val cartaDescartada: Int, val yaku: ArrayList<Yaku
|
||||
return if (valorCont1 > valorCont2) contenedor1 else contenedor2
|
||||
}
|
||||
|
||||
fun verificar(valorCarta: Int, cartasMano: ArrayList<Int>, gruposAbiertos: ArrayList<ArrayList<Int>>): OportunidadWin? {
|
||||
fun verificar(
|
||||
valorCarta: Int,
|
||||
cartasMano: ArrayList<Int>,
|
||||
gruposAbiertos: ArrayList<ArrayList<Int>> = arrayListOf()
|
||||
): OportunidadRon? {
|
||||
val narrl = ArrayList<Int>(cartasMano.size + 1)
|
||||
narrl.addAll(cartasMano)
|
||||
narrl.add(valorCarta)
|
||||
@ -191,7 +195,7 @@ class OportunidadWin(override val cartaDescartada: Int, val yaku: ArrayList<Yaku
|
||||
// Obtener yaku
|
||||
val yaku = obtenerListaYakus(contenedorGrupos, esManoAbierta)
|
||||
|
||||
return if (yaku.isNotEmpty()) OportunidadWin(valorCarta, yaku) else null
|
||||
return if (yaku.isNotEmpty()) OportunidadRon(valorCarta, yaku) else null
|
||||
}
|
||||
|
||||
}
|
@ -3,34 +3,38 @@ package dev.araozu.juego.yaku
|
||||
import dev.araozu.juego.ContenedorGrupos
|
||||
|
||||
enum class Yaku {
|
||||
// 15
|
||||
// 10
|
||||
DragonesFull,
|
||||
Verde,
|
||||
|
||||
// 10
|
||||
// 7
|
||||
RealezaDragones,
|
||||
RealezaFull,
|
||||
EscaleraPerfecta,
|
||||
A10,
|
||||
|
||||
// 5
|
||||
TripleTriplesCerrados,
|
||||
EscaleraFull,
|
||||
|
||||
// 3
|
||||
TripleTriplesCerrados,
|
||||
Exterior,
|
||||
|
||||
// 4
|
||||
// 2
|
||||
Escalera,
|
||||
TripleCuadruples,
|
||||
Negro,
|
||||
Rojo,
|
||||
SemiExterior,
|
||||
DobleSecuenciaPura,
|
||||
|
||||
// 3
|
||||
ParUnico,
|
||||
// 1
|
||||
Dragones,
|
||||
Interior,
|
||||
TripleTriples,
|
||||
TripleSecuenciaCerrada,
|
||||
Realeza,
|
||||
DobleSecuenciaPura
|
||||
Variedad,
|
||||
DobleSecuencia,
|
||||
ManoCompletamenteCerrada
|
||||
}
|
||||
|
||||
fun obtenerListaYakus(contenedorGrupos: ContenedorGrupos, esManoAbierta: Boolean): ArrayList<Yaku> {
|
||||
@ -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
|
||||
}
|
||||
|
61
src/juego/yaku/yaku1.kt
Normal file
61
src/juego/yaku/yaku1.kt
Normal file
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
46
src/juego/yaku/yaku7.kt
Normal file
46
src/juego/yaku/yaku7.kt
Normal file
@ -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
|
||||
}
|
Loading…
Reference in New Issue
Block a user