Arreglar error cuando los bots descartaban cartas. Arreglar error al descartar una carta de la mano.

This commit is contained in:
Araozu 2020-12-27 17:39:09 -05:00
parent 257a0b058c
commit e390d23da2
3 changed files with 13 additions and 5 deletions

View File

@ -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()
}
}

View File

@ -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.")

View File

@ -191,7 +191,7 @@ class OportunidadWin(override val cartaDescartada: Int, val yaku: ArrayList<Yaku
// Obtener yaku
val yaku = obtenerListaYakus(contenedorGrupos, esManoAbierta)
return OportunidadWin(valorCarta, yaku)
return if (yaku.isNotEmpty()) OportunidadWin(valorCarta, yaku) else null
}
}