Refactorizados archivos. Creada clase GestorDora.kt
This commit is contained in:
parent
cb1700ecca
commit
8a6c17563a
@ -1,5 +1,6 @@
|
|||||||
package dev.araozu
|
package dev.araozu
|
||||||
|
|
||||||
|
import dev.araozu.juego.Juego
|
||||||
import io.ktor.http.cio.websocket.*
|
import io.ktor.http.cio.websocket.*
|
||||||
import kotlinx.coroutines.isActive
|
import kotlinx.coroutines.isActive
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package dev.araozu
|
package dev.araozu
|
||||||
|
|
||||||
|
import dev.araozu.juego.Juego
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
import io.ktor.request.*
|
import io.ktor.request.*
|
||||||
@ -12,8 +13,6 @@ data class DataCrearJuego(val idUsuario: String)
|
|||||||
fun Routing.crearJuego() {
|
fun Routing.crearJuego() {
|
||||||
|
|
||||||
post("/partida") {
|
post("/partida") {
|
||||||
val dataUsuario = call.receive<DataCrearJuego>()
|
|
||||||
|
|
||||||
var sigId = GestorJuegos.generarId()
|
var sigId = GestorJuegos.generarId()
|
||||||
while (GestorJuegos.juegos.containsKey(sigId)) {
|
while (GestorJuegos.juegos.containsKey(sigId)) {
|
||||||
sigId = GestorJuegos.generarId()
|
sigId = GestorJuegos.generarId()
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dev.araozu
|
package dev.araozu.juego
|
||||||
|
|
||||||
data class DatosJuego(
|
data class DatosJuego(
|
||||||
val dora: Array<Int>,
|
val dora: Array<Int>,
|
@ -1,4 +1,4 @@
|
|||||||
package dev.araozu
|
package dev.araozu.juego
|
||||||
|
|
||||||
enum class EstadoJuego {
|
enum class EstadoJuego {
|
||||||
Espera,
|
Espera,
|
42
src/juego/GestorDora.kt
Normal file
42
src/juego/GestorDora.kt
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package dev.araozu.juego
|
||||||
|
|
||||||
|
class GestorDora(private val cartas: ArrayList<Int>) {
|
||||||
|
|
||||||
|
private val doraCerrado = arrayListOf(cartas[0])
|
||||||
|
private val doraAbierto = arrayListOf<Int>()
|
||||||
|
var turnosRestantesDoraCerrado = 32 // 32 16 8 4
|
||||||
|
private set
|
||||||
|
|
||||||
|
operator fun component1(): Array<Int> {
|
||||||
|
val numDora = doraCerrado.size
|
||||||
|
return Array(5) {
|
||||||
|
if (it < numDora) doraCerrado[it]
|
||||||
|
else 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun component2(): Array<Int> {
|
||||||
|
val numDora = doraCerrado.size
|
||||||
|
return Array(5) {
|
||||||
|
if (it < numDora) doraAbierto[it]
|
||||||
|
else 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun actualizarDoraTurno() {
|
||||||
|
if (doraCerrado.size >= 5) return
|
||||||
|
turnosRestantesDoraCerrado--
|
||||||
|
if (turnosRestantesDoraCerrado == 0) {
|
||||||
|
doraCerrado.add(cartas[doraCerrado.size])
|
||||||
|
}
|
||||||
|
if (doraCerrado.size == 5) {
|
||||||
|
turnosRestantesDoraCerrado = -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun actualizarDoraQuad() {
|
||||||
|
if (doraCerrado.size >= 5) return
|
||||||
|
doraAbierto.add(cartas[5 + doraAbierto.size])
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package dev.araozu
|
package dev.araozu.juego
|
||||||
|
|
||||||
|
import dev.araozu.*
|
||||||
import io.ktor.http.cio.websocket.*
|
import io.ktor.http.cio.websocket.*
|
||||||
|
|
||||||
class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
||||||
@ -8,13 +9,10 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|||||||
val conexiones: HashMap<String, WebSocketSession> = HashMap()
|
val conexiones: HashMap<String, WebSocketSession> = HashMap()
|
||||||
private val ordenJugadores = Array(4) { "" }
|
private val ordenJugadores = Array(4) { "" }
|
||||||
private val manos: HashMap<String, Mano> = HashMap()
|
private val manos: HashMap<String, Mano> = HashMap()
|
||||||
private val dora: ArrayList<Int> = arrayListOf()
|
private var gestorDora: GestorDora? = null
|
||||||
private val doraPublico = Array(5) { 0 }
|
|
||||||
private val doraOculto = Array(5) { 0 }
|
|
||||||
private var estadoJuego = EstadoJuego.Espera
|
private var estadoJuego = EstadoJuego.Espera
|
||||||
private var posCartaActual = 0
|
private var posCartaActual = 0
|
||||||
private var turnoActual = 0
|
private var turnoActual = 0
|
||||||
private var turnosHastaDora = 27 // 27 17 7 3
|
|
||||||
|
|
||||||
suspend fun iniciarJuego(ws: WebSocketSession) {
|
suspend fun iniciarJuego(ws: WebSocketSession) {
|
||||||
if (estadoJuego != EstadoJuego.Espera) return
|
if (estadoJuego != EstadoJuego.Espera) return
|
||||||
@ -25,12 +23,14 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
estadoJuego = EstadoJuego.Iniciado
|
estadoJuego = EstadoJuego.Iniciado
|
||||||
|
|
||||||
|
// Inicializar dora
|
||||||
|
val dora: ArrayList<Int> = arrayListOf()
|
||||||
for (i in posCartaActual until (posCartaActual + 10)) {
|
for (i in posCartaActual until (posCartaActual + 10)) {
|
||||||
dora.add(cartas[i])
|
dora.add(cartas[i])
|
||||||
}
|
}
|
||||||
|
gestorDora = GestorDora(dora)
|
||||||
posCartaActual += 10
|
posCartaActual += 10
|
||||||
doraPublico[0] = dora[0]
|
|
||||||
doraOculto[0] = dora[4]
|
|
||||||
|
|
||||||
// Asignar orden de jugadores
|
// Asignar orden de jugadores
|
||||||
var i = 0
|
var i = 0
|
||||||
@ -50,7 +50,7 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|||||||
val mano = if (idJugadorInicial == idUsuario) {
|
val mano = if (idJugadorInicial == idUsuario) {
|
||||||
val sigCarta = cartas[posCartaActual]
|
val sigCarta = cartas[posCartaActual]
|
||||||
posCartaActual++
|
posCartaActual++
|
||||||
turnosHastaDora--
|
gestorDora!!.actualizarDoraTurno()
|
||||||
|
|
||||||
Mano(cartasL, sigCarta = sigCarta)
|
Mano(cartasL, sigCarta = sigCarta)
|
||||||
} else {
|
} else {
|
||||||
@ -68,14 +68,10 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun enviarDatos(idUsuario: String, ws: WebSocketSession) {
|
private suspend fun enviarDatos(idUsuario: String, ws: WebSocketSession) {
|
||||||
var doraOcultoS = Array(5) { 0 }
|
|
||||||
val manosS = HashMap<String, Mano>()
|
val manosS = HashMap<String, Mano>()
|
||||||
|
|
||||||
for ((idUsuarioAct, mano) in manos) {
|
for ((idUsuarioAct, mano) in manos) {
|
||||||
if (idUsuarioAct == idUsuario) {
|
if (idUsuarioAct == idUsuario) {
|
||||||
if (mano.allIn) {
|
|
||||||
doraOcultoS = doraOculto
|
|
||||||
}
|
|
||||||
manosS[idUsuarioAct] = mano
|
manosS[idUsuarioAct] = mano
|
||||||
} else {
|
} else {
|
||||||
manosS[idUsuarioAct] = mano.obtenerManoPrivada()
|
manosS[idUsuarioAct] = mano.obtenerManoPrivada()
|
||||||
@ -83,14 +79,15 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val idJugadorTurnoActual = ordenJugadores[turnoActual]
|
val idJugadorTurnoActual = ordenJugadores[turnoActual]
|
||||||
|
val (doraCerrado, doraAbierto) = gestorDora!!
|
||||||
val datosJuego = DatosJuego(
|
val datosJuego = DatosJuego(
|
||||||
doraPublico,
|
doraCerrado,
|
||||||
doraOcultoS,
|
doraAbierto,
|
||||||
manosS,
|
manosS,
|
||||||
108 - posCartaActual,
|
108 - posCartaActual,
|
||||||
ordenJugadores,
|
ordenJugadores,
|
||||||
idJugadorTurnoActual,
|
idJugadorTurnoActual,
|
||||||
turnosHastaDora
|
gestorDora!!.turnosRestantesDoraCerrado
|
||||||
)
|
)
|
||||||
ws.send(Frame.Text("{\"operacion\": \"actualizar_datos\", \"datos\": ${gson.toJson(datosJuego)}}"))
|
ws.send(Frame.Text("{\"operacion\": \"actualizar_datos\", \"datos\": ${gson.toJson(datosJuego)}}"))
|
||||||
}
|
}
|
||||||
@ -154,7 +151,8 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|||||||
oportunidadesJugador.add("seq")
|
oportunidadesJugador.add("seq")
|
||||||
}
|
}
|
||||||
|
|
||||||
oportunidades[idSigJugador] = oportunidadesJugador
|
if (oportunidadesJugador.isNotEmpty())
|
||||||
|
oportunidades[idSigJugador] = oportunidadesJugador
|
||||||
|
|
||||||
return if (oportunidades.isNotEmpty()) oportunidades else null
|
return if (oportunidades.isNotEmpty()) oportunidades else null
|
||||||
}
|
}
|
||||||
@ -197,35 +195,19 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|||||||
val idSigUsuario = ordenJugadores[turnoActual]
|
val idSigUsuario = ordenJugadores[turnoActual]
|
||||||
val sigCarta = cartas[posCartaActual]
|
val sigCarta = cartas[posCartaActual]
|
||||||
posCartaActual++
|
posCartaActual++
|
||||||
turnosHastaDora--
|
|
||||||
manos[idSigUsuario]!!.sigCarta = sigCarta
|
manos[idSigUsuario]!!.sigCarta = sigCarta
|
||||||
|
|
||||||
// Actualizar dora
|
// Actualizar dora
|
||||||
if (turnosHastaDora == 0) {
|
gestorDora!!.actualizarDoraTurno()
|
||||||
val sigPosDora = doraPublico.indexOf(0)
|
|
||||||
// Si aun quedan doras
|
|
||||||
if (sigPosDora != -1) {
|
|
||||||
doraPublico[sigPosDora] = dora[sigPosDora]
|
|
||||||
turnosHastaDora = 15
|
|
||||||
}
|
|
||||||
// Si ya no hay doras
|
|
||||||
else {
|
|
||||||
turnosHastaDora = 108
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enviar datos
|
// Enviar datos
|
||||||
for ((idUsuarioEnvio, ws) in conexiones) {
|
for ((idUsuarioEnvio, ws) in conexiones) {
|
||||||
val manosS = HashMap<String, Mano>()
|
val manosS = HashMap<String, Mano>()
|
||||||
var doraOcultoS = Array(5) { 0 }
|
|
||||||
|
|
||||||
for ((idUsuarioAct, mano) in manos) {
|
for ((idUsuarioAct, mano) in manos) {
|
||||||
when (idUsuarioAct) {
|
when (idUsuarioAct) {
|
||||||
idUsuarioEnvio -> {
|
idUsuarioEnvio -> {
|
||||||
manosS[idUsuarioAct] = mano
|
manosS[idUsuarioAct] = mano
|
||||||
if (mano.allIn) {
|
|
||||||
doraOcultoS = doraOculto
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
idUsuario -> {
|
idUsuario -> {
|
||||||
manosS[idUsuarioAct] = mano.obtenerManoPrivada()
|
manosS[idUsuarioAct] = mano.obtenerManoPrivada()
|
||||||
@ -236,14 +218,15 @@ class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val (doraCerrado, doraAbierto) = gestorDora!!
|
||||||
val datosJuego = DatosJuego(
|
val datosJuego = DatosJuego(
|
||||||
doraPublico,
|
doraCerrado,
|
||||||
doraOcultoS,
|
doraAbierto,
|
||||||
manosS,
|
manosS,
|
||||||
108 - posCartaActual,
|
108 - posCartaActual,
|
||||||
ordenJugadores,
|
ordenJugadores,
|
||||||
ordenJugadores[turnoActual],
|
ordenJugadores[turnoActual],
|
||||||
turnosHastaDora
|
gestorDora!!.turnosRestantesDoraCerrado
|
||||||
)
|
)
|
||||||
ws.send(Frame.Text("{\"operacion\": \"actualizar_manos\", \"datos\": ${gson.toJson(datosJuego)}}"))
|
ws.send(Frame.Text("{\"operacion\": \"actualizar_manos\", \"datos\": ${gson.toJson(datosJuego)}}"))
|
||||||
}
|
}
|
@ -1,8 +1,7 @@
|
|||||||
package dev.araozu
|
package dev.araozu.juego
|
||||||
|
|
||||||
data class Mano(
|
data class Mano(
|
||||||
val cartas: ArrayList<Int>,
|
val cartas: ArrayList<Int>,
|
||||||
val allIn: Boolean = false,
|
|
||||||
val cartasReveladas: ArrayList<ArrayList<Int>> = ArrayList(),
|
val cartasReveladas: ArrayList<ArrayList<Int>> = ArrayList(),
|
||||||
val descartes: ArrayList<Int> = ArrayList(),
|
val descartes: ArrayList<Int> = ArrayList(),
|
||||||
var sigCarta: Int = -1
|
var sigCarta: Int = -1
|
8
src/juego/Oportunidad.kt
Normal file
8
src/juego/Oportunidad.kt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package dev.araozu.juego
|
||||||
|
|
||||||
|
interface Oportunidad {
|
||||||
|
|
||||||
|
val cartaDescartada: Int
|
||||||
|
val cartasOportunidad: ArrayList<Int>
|
||||||
|
|
||||||
|
}
|
4
src/juego/OportunidadSeq.kt
Normal file
4
src/juego/OportunidadSeq.kt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
package dev.araozu.juego
|
||||||
|
|
||||||
|
data class OportunidadSeq(override val cartaDescartada: Int, override val cartasOportunidad: ArrayList<Int>) :
|
||||||
|
Oportunidad
|
4
src/juego/OportunidadTri.kt
Normal file
4
src/juego/OportunidadTri.kt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
package dev.araozu.juego
|
||||||
|
|
||||||
|
data class OportunidadTri(override val cartaDescartada: Int, override val cartasOportunidad: ArrayList<Int>) :
|
||||||
|
Oportunidad
|
Loading…
Reference in New Issue
Block a user