From e390d23da2926d0ce475145412f55765b8494a36 Mon Sep 17 00:00:00 2001 From: Araozu Date: Sun, 27 Dec 2020 17:39:09 -0500 Subject: [PATCH] Arreglar error cuando los bots descartaban cartas. Arreglar error al descartar una carta de la mano. --- src/juego/Jugador.kt | 15 +++++++++++---- src/juego/Mano.kt | 1 + src/juego/OportunidadWin.kt | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/juego/Jugador.kt b/src/juego/Jugador.kt index f8031c2..a3342c7 100644 --- a/src/juego/Jugador.kt +++ b/src/juego/Jugador.kt @@ -6,6 +6,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex sealed class Jugador(val juego: Juego, val idUsuario: String) { @@ -151,7 +152,7 @@ class JugadorHumano(juego: Juego, idUsuario: String, private var ws: WebSocketSe if (it === this) { manos[idUsuario] = this.mano } else { - manos[it.idUsuario] = it.mano + manos[it.idUsuario] = it.mano.obtenerManoPrivada() } } @@ -170,6 +171,8 @@ class JugadorHumano(juego: Juego, idUsuario: String, private var ws: WebSocketSe class JugadorBot(juego: Juego, idUsuario: String) : Jugador(juego, idUsuario) { override val isActive: Boolean = true + private val mutexDescarte = Mutex() + private val mutexOportunidad = Mutex() override suspend fun send(v: Frame.Text) { println("Datos enviados a bot, pero ignorados.") @@ -181,12 +184,14 @@ class JugadorBot(juego: Juego, idUsuario: String) : Jugador(juego, idUsuario) { println("Bot $idUsuario pensando") // Si el bot tiene una carta adicional - if (mano.sigCarta != 1) { + if (mano.sigCarta != -1) { // Espera 1s y la descarta GlobalScope.launch { + mutexDescarte.lock() delay(1000) - println("Bot $idUsuario descartando la carta que recibio") + println("Bot $idUsuario descartando la carta que recibio (${mano.sigCarta})") juego.manejarDescarte(idUsuario, mano.sigCarta) + mutexDescarte.unlock() } } @@ -194,9 +199,11 @@ class JugadorBot(juego: Juego, idUsuario: String) : Jugador(juego, idUsuario) { if (mano.oportunidades.size > 0) { // Espera 1s e ignora oportunidades GlobalScope.launch { + mutexOportunidad.lock() delay(1000) - println("Bot $idUsuario ignorando sus oportunidades") + println("Bot $idUsuario ignorando sus oportunidades (${mano.oportunidades.size}") juego.ignorarOportunidades(idUsuario) + mutexOportunidad.unlock() } } diff --git a/src/juego/Mano.kt b/src/juego/Mano.kt index 3d3938c..40fdcda 100644 --- a/src/juego/Mano.kt +++ b/src/juego/Mano.kt @@ -43,6 +43,7 @@ data class Mano( // Incluir la carta entrante a la mano del jugador if (sigCarta != -1) { cartas.add(sigCarta) + sigCarta = -1 } } else { System.err.println("Error al descartar carta: El jugador no tiene dicha carta.") diff --git a/src/juego/OportunidadWin.kt b/src/juego/OportunidadWin.kt index ec2a7ba..a9c9ddd 100644 --- a/src/juego/OportunidadWin.kt +++ b/src/juego/OportunidadWin.kt @@ -191,7 +191,7 @@ class OportunidadWin(override val cartaDescartada: Int, val yaku: ArrayList