Actualizar funcion para ignorar oportunidades

master
Araozu 2020-12-27 13:20:57 -05:00
parent f325a586d3
commit 31059422d9
3 changed files with 35 additions and 32 deletions

View File

@ -2,7 +2,6 @@ package dev.araozu
import dev.araozu.juego.Juego import dev.araozu.juego.Juego
import io.ktor.http.cio.websocket.* import io.ktor.http.cio.websocket.*
import kotlinx.coroutines.isActive
object GestorJuegos { object GestorJuegos {
@ -84,7 +83,7 @@ object GestorJuegos {
suspend fun manejarIgnorarOportunidad(idJuego: String, idUsuario: String) { suspend fun manejarIgnorarOportunidad(idJuego: String, idUsuario: String) {
val juego = juegos[idJuego]!! val juego = juegos[idJuego]!!
juego.ignorarOportunidadSeq(idUsuario) juego.ignorarOportunidades(idUsuario)
} }
suspend fun manejarLlamarSeq(idJuego: String, idUsuario: String, cartaDescartada: Int, combinacion: Pair<Int, Int>) { suspend fun manejarLlamarSeq(idJuego: String, idUsuario: String, cartaDescartada: Int, combinacion: Pair<Int, Int>) {

View File

@ -49,7 +49,7 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
ordenJugadores = Array(4) { jugadores[it].idUsuario } ordenJugadores = Array(4) { jugadores[it].idUsuario }
} }
private fun obtenerDatosJuegoActuales(): DatosJuego { fun obtenerDatosJuegoActuales(): DatosJuego {
val idJugadorTurnoActual = jugadores[posJugadorActual].idUsuario val idJugadorTurnoActual = jugadores[posJugadorActual].idUsuario
return DatosJuego( return DatosJuego(
dora = arrayListOf(), dora = arrayListOf(),
@ -126,42 +126,34 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
val cantidadOportunidades = jugadores[posJugadorActual].descartarCarta(cartaDescartada) val cantidadOportunidades = jugadores[posJugadorActual].descartarCarta(cartaDescartada)
if (cantidadOportunidades > 0) { when {
// Enviar datos cantidadOportunidades > 0 -> {
enviarDatosATodos() // Enviar datos
} else { enviarDatosATodos()
cambiarTurnoSigJugadorConsecutivo() }
cantidadOportunidades == 0 -> {
cambiarTurnoSigJugadorConsecutivo()
// Actualizar dora // Actualizar dora
gestorDora.actualizarDora() gestorDora.actualizarDora()
// Enviar datos // Enviar datos
enviarDatosATodos() enviarDatosATodos()
}
else -> {
System.err.println("Se intento descartar en un estado invalido.")
}
} }
} }
// TODO: Usar diferente metodo para ignorar oportunidad Tsumo suspend fun ignorarOportunidades(idUsuario: String) {
suspend fun ignorarOportunidadSeq(idUsuario: String) { val jugador = jugadores.find { it.idUsuario == idUsuario } ?: return
val aunHayOportunidades = jugador.ignorarOportunidades()
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
}
}
// Si no quedan oportunidades cambiar el turno al sig jugador // Si no quedan oportunidades cambiar el turno al sig jugador
if (!aunHayOportunidades) { if (aunHayOportunidades) {
jugador.enviarDatos(obtenerDatosJuegoActuales())
} else {
cambiarTurnoSigJugadorConsecutivo() cambiarTurnoSigJugadorConsecutivo()
// Actualizar dora // Actualizar dora

View File

@ -80,6 +80,18 @@ sealed class Jugador(val juego: Juego, val idUsuario: String) {
return oportunidadesRestantes 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() abstract fun verificarTsumo()
} }