Arreglar error cuando los bots descartaban cartas. Arreglar error al descartar una carta de la mano.
This commit is contained in:
parent
257a0b058c
commit
e390d23da2
@ -6,6 +6,7 @@ import kotlinx.coroutines.GlobalScope
|
|||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.isActive
|
import kotlinx.coroutines.isActive
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.sync.Mutex
|
||||||
|
|
||||||
sealed class Jugador(val juego: Juego, val idUsuario: String) {
|
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) {
|
if (it === this) {
|
||||||
manos[idUsuario] = this.mano
|
manos[idUsuario] = this.mano
|
||||||
} else {
|
} 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) {
|
class JugadorBot(juego: Juego, idUsuario: String) : Jugador(juego, idUsuario) {
|
||||||
|
|
||||||
override val isActive: Boolean = true
|
override val isActive: Boolean = true
|
||||||
|
private val mutexDescarte = Mutex()
|
||||||
|
private val mutexOportunidad = Mutex()
|
||||||
|
|
||||||
override suspend fun send(v: Frame.Text) {
|
override suspend fun send(v: Frame.Text) {
|
||||||
println("Datos enviados a bot, pero ignorados.")
|
println("Datos enviados a bot, pero ignorados.")
|
||||||
@ -181,12 +184,14 @@ class JugadorBot(juego: Juego, idUsuario: String) : Jugador(juego, idUsuario) {
|
|||||||
println("Bot $idUsuario pensando")
|
println("Bot $idUsuario pensando")
|
||||||
|
|
||||||
// Si el bot tiene una carta adicional
|
// Si el bot tiene una carta adicional
|
||||||
if (mano.sigCarta != 1) {
|
if (mano.sigCarta != -1) {
|
||||||
// Espera 1s y la descarta
|
// Espera 1s y la descarta
|
||||||
GlobalScope.launch {
|
GlobalScope.launch {
|
||||||
|
mutexDescarte.lock()
|
||||||
delay(1000)
|
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)
|
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) {
|
if (mano.oportunidades.size > 0) {
|
||||||
// Espera 1s e ignora oportunidades
|
// Espera 1s e ignora oportunidades
|
||||||
GlobalScope.launch {
|
GlobalScope.launch {
|
||||||
|
mutexOportunidad.lock()
|
||||||
delay(1000)
|
delay(1000)
|
||||||
println("Bot $idUsuario ignorando sus oportunidades")
|
println("Bot $idUsuario ignorando sus oportunidades (${mano.oportunidades.size}")
|
||||||
juego.ignorarOportunidades(idUsuario)
|
juego.ignorarOportunidades(idUsuario)
|
||||||
|
mutexOportunidad.unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ data class Mano(
|
|||||||
// Incluir la carta entrante a la mano del jugador
|
// Incluir la carta entrante a la mano del jugador
|
||||||
if (sigCarta != -1) {
|
if (sigCarta != -1) {
|
||||||
cartas.add(sigCarta)
|
cartas.add(sigCarta)
|
||||||
|
sigCarta = -1
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
System.err.println("Error al descartar carta: El jugador no tiene dicha carta.")
|
System.err.println("Error al descartar carta: El jugador no tiene dicha carta.")
|
||||||
|
@ -191,7 +191,7 @@ class OportunidadWin(override val cartaDescartada: Int, val yaku: ArrayList<Yaku
|
|||||||
// Obtener yaku
|
// Obtener yaku
|
||||||
val yaku = obtenerListaYakus(contenedorGrupos, esManoAbierta)
|
val yaku = obtenerListaYakus(contenedorGrupos, esManoAbierta)
|
||||||
|
|
||||||
return OportunidadWin(valorCarta, yaku)
|
return if (yaku.isNotEmpty()) OportunidadWin(valorCarta, yaku) else null
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user