From b84531f66a0e63111dba1d6ea50e2404dd221818 Mon Sep 17 00:00:00 2001 From: Araozu Date: Thu, 31 Dec 2020 09:24:20 -0500 Subject: [PATCH] Implementar Ron --- src/GestorJuegos.kt | 11 ++++++++++- src/JuegoWS.kt | 6 +++++- src/juego/Juego.kt | 6 +++--- src/juego/Jugador.kt | 14 ++++++-------- src/juego/Mano.kt | 5 ++++- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/GestorJuegos.kt b/src/GestorJuegos.kt index 1aedb23..428783e 100644 --- a/src/GestorJuegos.kt +++ b/src/GestorJuegos.kt @@ -89,9 +89,18 @@ object GestorJuegos { juego.ignorarOportunidades(idUsuario) } - suspend fun manejarLlamarSeq(idJuego: String, idUsuario: String, cartaDescartada: Int, combinacion: Pair) { + suspend fun manejarLlamarSeq( + idJuego: String, + idUsuario: String, + cartaDescartada: Int, + combinacion: Pair + ) { val juego = juegos[idJuego]!! juego.manejarSeqTri(idUsuario, cartaDescartada, combinacion) } + suspend fun manejarRon(idJuego: String, idUsuario: String) { + juegos[idJuego]!!.manejarRon(idUsuario) + } + } diff --git a/src/JuegoWS.kt b/src/JuegoWS.kt index cd50c26..786d593 100644 --- a/src/JuegoWS.kt +++ b/src/JuegoWS.kt @@ -46,13 +46,17 @@ fun Routing.juegows() { ) } "llamar_ron" -> { - TODO("Ron no implementado") + val datos = gson.fromJson(sol.datos, DatosIgnorarOportunidad::class.java) + GestorJuegos.manejarRon(datos.idJuego, datos.idUsuario) } "llamar_tsumo" -> { TODO("Tsumo no implementado") } } } + else -> { + System.err.println("Tipo de dato enviado al socket no admitido") + } } } diff --git a/src/juego/Juego.kt b/src/juego/Juego.kt index 9b496f9..b2362c0 100644 --- a/src/juego/Juego.kt +++ b/src/juego/Juego.kt @@ -208,15 +208,15 @@ class Juego(val idJuego: String) { enviarDatosATodos() } - suspend fun manejarRon(idUsuario: String, cartaDescartada: Int) { + suspend fun manejarRon(idUsuario: String) { val jugadorRon = jugadores.find { it.idUsuario == idUsuario } ?: return - val jugadorDescate = jugadores[posJugadorActual] - val ronExitoso = jugadorRon.manejarRon(cartaDescartada) + val ronExitoso = jugadorRon.manejarRon() if (!ronExitoso) return estadoJuego = EstadoJuego.Terminado + enviarDatosATodos() } } diff --git a/src/juego/Jugador.kt b/src/juego/Jugador.kt index 64ee084..6c1a479 100644 --- a/src/juego/Jugador.kt +++ b/src/juego/Jugador.kt @@ -7,7 +7,6 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.time.delay sealed class Jugador(val juego: Juego, val idUsuario: String) { @@ -122,15 +121,14 @@ sealed class Jugador(val juego: Juego, val idUsuario: String) { return true } - fun manejarRon(cartaDescartada: Int): Boolean { + fun manejarRon(): Boolean { + mano.oportunidades.find { it is OportunidadRon } ?: return false - // Verificar que el jugador tenga la oportunidad + // Limpiar oportunidades + mano.oportunidades.clear() - // Verificar que la carta descartada sea correcta - - // Verificar los yaku - - return false + mano.esGanador = true + return true } private fun ultimaCartaDescartadaEs(carta: Int): Boolean = diff --git a/src/juego/Mano.kt b/src/juego/Mano.kt index 40fdcda..1cc6e8d 100644 --- a/src/juego/Mano.kt +++ b/src/juego/Mano.kt @@ -6,10 +6,13 @@ data class Mano( val descartes: ArrayList = arrayListOf(), var sigCarta: Int = -1, var oportunidades: ArrayList = arrayListOf(), - var dragon: Dragon = Dragon.Negro + var dragon: Dragon = Dragon.Negro, + var esGanador: Boolean = false ) { fun obtenerManoPrivada(): Mano { + if (esGanador) return this + val l = ArrayList() l.addAll(cartas.map { 0 }) return this.copy(