Implementar Ron

master
Araozu 2020-12-31 09:24:20 -05:00
parent 8c58639a61
commit b84531f66a
5 changed files with 28 additions and 14 deletions

View File

@ -89,9 +89,18 @@ object GestorJuegos {
juego.ignorarOportunidades(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>
) {
val juego = juegos[idJuego]!! val juego = juegos[idJuego]!!
juego.manejarSeqTri(idUsuario, cartaDescartada, combinacion) juego.manejarSeqTri(idUsuario, cartaDescartada, combinacion)
} }
suspend fun manejarRon(idJuego: String, idUsuario: String) {
juegos[idJuego]!!.manejarRon(idUsuario)
}
} }

View File

@ -46,13 +46,17 @@ fun Routing.juegows() {
) )
} }
"llamar_ron" -> { "llamar_ron" -> {
TODO("Ron no implementado") val datos = gson.fromJson(sol.datos, DatosIgnorarOportunidad::class.java)
GestorJuegos.manejarRon(datos.idJuego, datos.idUsuario)
} }
"llamar_tsumo" -> { "llamar_tsumo" -> {
TODO("Tsumo no implementado") TODO("Tsumo no implementado")
} }
} }
} }
else -> {
System.err.println("Tipo de dato enviado al socket no admitido")
}
} }
} }

View File

@ -208,15 +208,15 @@ class Juego(val idJuego: String) {
enviarDatosATodos() enviarDatosATodos()
} }
suspend fun manejarRon(idUsuario: String, cartaDescartada: Int) { suspend fun manejarRon(idUsuario: String) {
val jugadorRon = jugadores.find { it.idUsuario == idUsuario } ?: return val jugadorRon = jugadores.find { it.idUsuario == idUsuario } ?: return
val jugadorDescate = jugadores[posJugadorActual]
val ronExitoso = jugadorRon.manejarRon(cartaDescartada) val ronExitoso = jugadorRon.manejarRon()
if (!ronExitoso) return if (!ronExitoso) return
estadoJuego = EstadoJuego.Terminado estadoJuego = EstadoJuego.Terminado
enviarDatosATodos()
} }
} }

View File

@ -7,7 +7,6 @@ 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 import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.time.delay
sealed class Jugador(val juego: Juego, val idUsuario: String) { sealed class Jugador(val juego: Juego, val idUsuario: String) {
@ -122,15 +121,14 @@ sealed class Jugador(val juego: Juego, val idUsuario: String) {
return true return true
} }
fun manejarRon(cartaDescartada: Int): Boolean { fun manejarRon(): Boolean {
mano.oportunidades.find { it is OportunidadRon } ?: return false
// Verificar que el jugador tenga la oportunidad // Limpiar oportunidades
mano.oportunidades.clear()
// Verificar que la carta descartada sea correcta mano.esGanador = true
return true
// Verificar los yaku
return false
} }
private fun ultimaCartaDescartadaEs(carta: Int): Boolean = private fun ultimaCartaDescartadaEs(carta: Int): Boolean =

View File

@ -6,10 +6,13 @@ data class Mano(
val descartes: ArrayList<Int> = arrayListOf(), val descartes: ArrayList<Int> = arrayListOf(),
var sigCarta: Int = -1, var sigCarta: Int = -1,
var oportunidades: ArrayList<Oportunidad> = arrayListOf(), var oportunidades: ArrayList<Oportunidad> = arrayListOf(),
var dragon: Dragon = Dragon.Negro var dragon: Dragon = Dragon.Negro,
var esGanador: Boolean = false
) { ) {
fun obtenerManoPrivada(): Mano { fun obtenerManoPrivada(): Mano {
if (esGanador) return this
val l = ArrayList<Int>() val l = ArrayList<Int>()
l.addAll(cartas.map { 0 }) l.addAll(cartas.map { 0 })
return this.copy( return this.copy(