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)
}
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]!!
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" -> {
TODO("Ron no implementado")
val datos = gson.fromJson(sol.datos, DatosIgnorarOportunidad::class.java)
GestorJuegos.manejarRon(datos.idJuego, datos.idUsuario)
}
"llamar_tsumo" -> {
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()
}
suspend fun manejarRon(idUsuario: String, cartaDescartada: Int) {
suspend fun manejarRon(idUsuario: String) {
val jugadorRon = jugadores.find { it.idUsuario == idUsuario } ?: return
val jugadorDescate = jugadores[posJugadorActual]
val ronExitoso = jugadorRon.manejarRon(cartaDescartada)
val ronExitoso = jugadorRon.manejarRon()
if (!ronExitoso) return
estadoJuego = EstadoJuego.Terminado
enviarDatosATodos()
}
}

View File

@ -7,7 +7,6 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.time.delay
sealed class Jugador(val juego: Juego, val idUsuario: String) {
@ -122,15 +121,14 @@ sealed class Jugador(val juego: Juego, val idUsuario: String) {
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
// Verificar los yaku
return false
mano.esGanador = true
return true
}
private fun ultimaCartaDescartadaEs(carta: Int): Boolean =

View File

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