diff --git a/src/juego/DatosJuego.kt b/src/juego/DatosJuego.kt index 4f699ec..13fc824 100644 --- a/src/juego/DatosJuego.kt +++ b/src/juego/DatosJuego.kt @@ -7,7 +7,8 @@ data class DatosJuego( val cartasRestantes: Int, val ordenJugadores: Array, val turnoActual: String, - val turnosHastaDora: Int + val turnosHastaDora: Int, + val dragonPartida: Dragon ) { override fun equals(other: Any?): Boolean { @@ -23,6 +24,7 @@ data class DatosJuego( if (!ordenJugadores.contentEquals(other.ordenJugadores)) return false if (turnoActual != other.turnoActual) return false if (turnosHastaDora != other.turnosHastaDora) return false + if (dragonPartida != other.dragonPartida) return false return true } @@ -35,7 +37,8 @@ data class DatosJuego( result = 31 * result + ordenJugadores.contentHashCode() result = 31 * result + turnoActual.hashCode() result = 31 * result + turnosHastaDora + result = 31 * result + dragonPartida.hashCode() return result } -} \ No newline at end of file +} diff --git a/src/juego/Dragon.kt b/src/juego/Dragon.kt new file mode 100644 index 0000000..b53d35a --- /dev/null +++ b/src/juego/Dragon.kt @@ -0,0 +1,28 @@ +package dev.araozu.juego + +enum class Dragon { + Negro, + Rojo, + Verde, + Azul; + + companion object { + fun get(pos: Int) = + when (pos) { + 0 -> Negro + 1 -> Rojo + 2 -> Verde + 3 -> Azul + else -> throw Error("Dragon incorrecto.") + } + + fun sigDragon(d: Dragon) = + when (d) { + Negro -> Rojo + Rojo -> Verde + Verde -> Azul + Azul -> Negro + } + } + +} diff --git a/src/juego/GestorDora.kt b/src/juego/GestorDora.kt index 5c186ca..2b5d8ff 100644 --- a/src/juego/GestorDora.kt +++ b/src/juego/GestorDora.kt @@ -3,7 +3,7 @@ package dev.araozu.juego class GestorDora(private val cartas: ArrayList) { private val doraCerrado = arrayListOf(cartas[0]) - private val doraAbierto = arrayListOf(cartas[5]) + private val doraAbierto = arrayListOf() private var turnosSigDora = 20 var turnosRestantesDoraCerrado = turnosSigDora // 20 15 10 5 private set diff --git a/src/juego/Juego.kt b/src/juego/Juego.kt index 734cdf7..6026b72 100644 --- a/src/juego/Juego.kt +++ b/src/juego/Juego.kt @@ -13,6 +13,7 @@ class Juego(val usuarios: ArrayList>) { private var estadoJuego = EstadoJuego.Espera private var posCartaActual = 0 private var turnoActual = 0 + private var dragonPartida = Dragon.Negro suspend fun iniciarJuego(ws: WebSocketSession) { if (estadoJuego != EstadoJuego.Espera) return @@ -46,15 +47,17 @@ class Juego(val usuarios: ArrayList>) { cartasL.add(cartas[j]) } posCartaActual += 10 + val dragonActual = Dragon.get(i) val mano = if (idJugadorInicial == idUsuario) { val sigCarta = cartas[posCartaActual] posCartaActual++ gestorDora!!.actualizarDoraCerrado() + dragonPartida = dragonActual - Mano(cartasL, sigCarta = sigCarta) + Mano(cartasL, sigCarta = sigCarta, dragon = dragonActual) } else { - Mano(cartasL) + Mano(cartasL, dragon = dragonActual) } manos[idUsuario] = mano @@ -87,7 +90,8 @@ class Juego(val usuarios: ArrayList>) { 108 - posCartaActual, ordenJugadores, idJugadorTurnoActual, - gestorDora!!.turnosRestantesDoraCerrado + gestorDora!!.turnosRestantesDoraCerrado, + dragonPartida ) ws.send(Frame.Text("{\"operacion\": \"actualizar_datos\", \"datos\": ${gson.toJson(datosJuego)}}")) } diff --git a/src/juego/Mano.kt b/src/juego/Mano.kt index 7dca410..a370005 100644 --- a/src/juego/Mano.kt +++ b/src/juego/Mano.kt @@ -5,7 +5,8 @@ data class Mano( val cartasReveladas: ArrayList> = arrayListOf(), val descartes: ArrayList = arrayListOf(), var sigCarta: Int = -1, - var oportunidades: ArrayList = arrayListOf() + var oportunidades: ArrayList = arrayListOf(), + val dragon: Dragon ) { fun obtenerManoPrivada(): Mano { @@ -18,6 +19,4 @@ data class Mano( ) } - - }