Creadas clases para manejar el juego
This commit is contained in:
parent
aaa95cc784
commit
ea4c05c15e
7
src/EstadoJuego.kt
Normal file
7
src/EstadoJuego.kt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package dev.araozu
|
||||||
|
|
||||||
|
enum class EstadoJuego {
|
||||||
|
Espera,
|
||||||
|
Iniciado,
|
||||||
|
Terminado
|
||||||
|
}
|
@ -2,21 +2,6 @@ package dev.araozu
|
|||||||
|
|
||||||
import io.ktor.http.cio.websocket.*
|
import io.ktor.http.cio.websocket.*
|
||||||
|
|
||||||
data class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
|
||||||
|
|
||||||
private val cartas: Array<Int> = GestorJuegos.generarCartas()
|
|
||||||
val conexiones: ArrayList<WebSocketSession> = arrayListOf()
|
|
||||||
|
|
||||||
fun agregarConexion(conexion: WebSocketSession) {
|
|
||||||
conexiones.add(conexion)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun agregarUsuario(idUsuario: String) {
|
|
||||||
usuarios.add(Pair(idUsuario, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
object GestorJuegos {
|
object GestorJuegos {
|
||||||
|
|
||||||
private val todasCartas = arrayOf(
|
private val todasCartas = arrayOf(
|
||||||
|
60
src/Juego.kt
60
src/Juego.kt
@ -1,41 +1,49 @@
|
|||||||
package dev.araozu
|
package dev.araozu
|
||||||
|
|
||||||
import io.ktor.application.*
|
import io.ktor.http.cio.websocket.*
|
||||||
import io.ktor.http.*
|
|
||||||
import io.ktor.request.*
|
|
||||||
import io.ktor.response.*
|
|
||||||
import io.ktor.routing.*
|
|
||||||
|
|
||||||
data class InfoJuego(val id: String)
|
class Juego(val usuarios: ArrayList<Pair<String, Boolean>>) {
|
||||||
data class DataCrearJuego(val idUsuario: String)
|
|
||||||
|
|
||||||
fun Routing.crearJuego() {
|
private val cartas: Array<Int> = GestorJuegos.generarCartas()
|
||||||
|
val conexiones: ArrayList<WebSocketSession> = arrayListOf()
|
||||||
|
private val manos: HashMap<String, Mano> = HashMap()
|
||||||
|
private val dora: ArrayList<Int> = arrayListOf()
|
||||||
|
var estadoJuego = EstadoJuego.Espera
|
||||||
|
var posCartaActual = 0
|
||||||
|
|
||||||
post("/partida") {
|
suspend fun iniciarJuego() {
|
||||||
val dataUsuario = call.receive<DataCrearJuego>()
|
if (estadoJuego != EstadoJuego.Espera) return
|
||||||
|
|
||||||
var sigId = GestorJuegos.generarId()
|
estadoJuego = EstadoJuego.Iniciado
|
||||||
while (GestorJuegos.juegos.containsKey(sigId)) {
|
for (i in posCartaActual until (posCartaActual + 10)) {
|
||||||
sigId = GestorJuegos.generarId()
|
dora.add(cartas[i])
|
||||||
|
}
|
||||||
|
posCartaActual += 10
|
||||||
|
|
||||||
|
for ((idUsuario, _) in usuarios) {
|
||||||
|
val cartas = ArrayList<Int>()
|
||||||
|
|
||||||
|
for (i in posCartaActual until (posCartaActual + 10)) {
|
||||||
|
cartas.add(cartas[i])
|
||||||
|
}
|
||||||
|
posCartaActual += 10
|
||||||
|
|
||||||
|
val mano = Mano(cartas)
|
||||||
|
manos[idUsuario] = mano
|
||||||
}
|
}
|
||||||
|
|
||||||
val juego = Juego(arrayListOf())
|
conexiones.forEach { socket ->
|
||||||
GestorJuegos.juegos[sigId] = juego
|
socket.send(Frame.Text("{\"operacion\": \"juego_iniciado\"}"))
|
||||||
|
}
|
||||||
call.respondText("{\"id\": \"$sigId\"}", contentType = ContentType.Application.Json)
|
conexiones.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
post("/partida-join") {
|
fun agregarConexion(conexion: WebSocketSession) {
|
||||||
val infoJuego = call.receive<InfoJuego>()
|
conexiones.add(conexion)
|
||||||
if (infoJuego.id.length != 6) {
|
|
||||||
call.respondText("{\"error\": \"ID invalido.\"}", contentType = ContentType.Application.Json)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GestorJuegos.juegos.containsKey(infoJuego.id)) {
|
fun agregarUsuario(idUsuario: String) {
|
||||||
call.respondText("{\"ok\": true}", contentType = ContentType.Application.Json)
|
usuarios.add(Pair(idUsuario, true))
|
||||||
} else {
|
|
||||||
call.respondText("{\"error\": \"El juego no existe\"}", contentType = ContentType.Application.Json)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
3
src/Mano.kt
Normal file
3
src/Mano.kt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
package dev.araozu
|
||||||
|
|
||||||
|
class Mano(cartas: ArrayList<Int>)
|
41
src/MetodosJuego.kt
Normal file
41
src/MetodosJuego.kt
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package dev.araozu
|
||||||
|
|
||||||
|
import io.ktor.application.*
|
||||||
|
import io.ktor.http.*
|
||||||
|
import io.ktor.request.*
|
||||||
|
import io.ktor.response.*
|
||||||
|
import io.ktor.routing.*
|
||||||
|
|
||||||
|
data class InfoJuego(val id: String)
|
||||||
|
data class DataCrearJuego(val idUsuario: String)
|
||||||
|
|
||||||
|
fun Routing.crearJuego() {
|
||||||
|
|
||||||
|
post("/partida") {
|
||||||
|
val dataUsuario = call.receive<DataCrearJuego>()
|
||||||
|
|
||||||
|
var sigId = GestorJuegos.generarId()
|
||||||
|
while (GestorJuegos.juegos.containsKey(sigId)) {
|
||||||
|
sigId = GestorJuegos.generarId()
|
||||||
|
}
|
||||||
|
|
||||||
|
val juego = Juego(arrayListOf())
|
||||||
|
GestorJuegos.juegos[sigId] = juego
|
||||||
|
|
||||||
|
call.respondText("{\"id\": \"$sigId\"}", contentType = ContentType.Application.Json)
|
||||||
|
}
|
||||||
|
|
||||||
|
post("/partida-join") {
|
||||||
|
val infoJuego = call.receive<InfoJuego>()
|
||||||
|
if (infoJuego.id.length != 6) {
|
||||||
|
call.respondText("{\"error\": \"ID invalido.\"}", contentType = ContentType.Application.Json)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GestorJuegos.juegos.containsKey(infoJuego.id)) {
|
||||||
|
call.respondText("{\"ok\": true}", contentType = ContentType.Application.Json)
|
||||||
|
} else {
|
||||||
|
call.respondText("{\"error\": \"El juego no existe\"}", contentType = ContentType.Application.Json)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user