Actualizar funcion para ignorar oportunidades
This commit is contained in:
parent
f325a586d3
commit
31059422d9
@ -2,7 +2,6 @@ package dev.araozu
|
||||
|
||||
import dev.araozu.juego.Juego
|
||||
import io.ktor.http.cio.websocket.*
|
||||
import kotlinx.coroutines.isActive
|
||||
|
||||
object GestorJuegos {
|
||||
|
||||
@ -84,7 +83,7 @@ object GestorJuegos {
|
||||
|
||||
suspend fun manejarIgnorarOportunidad(idJuego: String, idUsuario: String) {
|
||||
val juego = juegos[idJuego]!!
|
||||
juego.ignorarOportunidadSeq(idUsuario)
|
||||
juego.ignorarOportunidades(idUsuario)
|
||||
}
|
||||
|
||||
suspend fun manejarLlamarSeq(idJuego: String, idUsuario: String, cartaDescartada: Int, combinacion: Pair<Int, Int>) {
|
||||
|
@ -49,7 +49,7 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
||||
ordenJugadores = Array(4) { jugadores[it].idUsuario }
|
||||
}
|
||||
|
||||
private fun obtenerDatosJuegoActuales(): DatosJuego {
|
||||
fun obtenerDatosJuegoActuales(): DatosJuego {
|
||||
val idJugadorTurnoActual = jugadores[posJugadorActual].idUsuario
|
||||
return DatosJuego(
|
||||
dora = arrayListOf(),
|
||||
@ -126,10 +126,12 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
||||
|
||||
val cantidadOportunidades = jugadores[posJugadorActual].descartarCarta(cartaDescartada)
|
||||
|
||||
if (cantidadOportunidades > 0) {
|
||||
when {
|
||||
cantidadOportunidades > 0 -> {
|
||||
// Enviar datos
|
||||
enviarDatosATodos()
|
||||
} else {
|
||||
}
|
||||
cantidadOportunidades == 0 -> {
|
||||
cambiarTurnoSigJugadorConsecutivo()
|
||||
|
||||
// Actualizar dora
|
||||
@ -138,30 +140,20 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
||||
// Enviar datos
|
||||
enviarDatosATodos()
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Usar diferente metodo para ignorar oportunidad Tsumo
|
||||
suspend fun ignorarOportunidadSeq(idUsuario: String) {
|
||||
|
||||
var aunHayOportunidades = false
|
||||
oportunidadesRestantes--
|
||||
|
||||
for ((id, mano) in manos) {
|
||||
// Eliminar oportunidad del usuario
|
||||
if (id == idUsuario) {
|
||||
mano.oportunidades = arrayListOf()
|
||||
enviarDatos(id, conexiones[id]!!)
|
||||
continue
|
||||
}
|
||||
|
||||
// Si algun otro jugador tiene una oportunidad
|
||||
if (mano.oportunidades.isNotEmpty()) {
|
||||
aunHayOportunidades = true
|
||||
else -> {
|
||||
System.err.println("Se intento descartar en un estado invalido.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun ignorarOportunidades(idUsuario: String) {
|
||||
val jugador = jugadores.find { it.idUsuario == idUsuario } ?: return
|
||||
val aunHayOportunidades = jugador.ignorarOportunidades()
|
||||
|
||||
// Si no quedan oportunidades cambiar el turno al sig jugador
|
||||
if (!aunHayOportunidades) {
|
||||
if (aunHayOportunidades) {
|
||||
jugador.enviarDatos(obtenerDatosJuegoActuales())
|
||||
} else {
|
||||
cambiarTurnoSigJugadorConsecutivo()
|
||||
|
||||
// Actualizar dora
|
||||
|
@ -80,6 +80,18 @@ sealed class Jugador(val juego: Juego, val idUsuario: String) {
|
||||
return oportunidadesRestantes
|
||||
}
|
||||
|
||||
/**
|
||||
* Limpia las oportunidades del jugador y verifica si algun otro jugador tiene alguna oportunidad
|
||||
* @return Si otro jugador tiene alguna oportunidad
|
||||
*/
|
||||
fun ignorarOportunidades(): Boolean {
|
||||
mano.oportunidades.clear()
|
||||
|
||||
return null != juego.jugadores.find {
|
||||
it !== this && it.mano.oportunidades.size > 0
|
||||
}
|
||||
}
|
||||
|
||||
abstract fun verificarTsumo()
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user