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 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>) {
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user