diff --git a/src/OportunidadesJuego.kt b/src/OportunidadesJuego.kt deleted file mode 100644 index c2dcfba..0000000 --- a/src/OportunidadesJuego.kt +++ /dev/null @@ -1,6 +0,0 @@ -package dev.araozu - -data class OportunidadesJuego ( - val tipos: ArrayList, - val cartaDescartada: Int -) diff --git a/src/TestRon.kt b/src/TestRon.kt deleted file mode 100644 index 49b44df..0000000 --- a/src/TestRon.kt +++ /dev/null @@ -1,102 +0,0 @@ -package dev.araozu - -/* - 122334 - 112233 - -*/ - -fun obtSeq(arrl: ArrayList): ArrayList> { - val arrlR = arrayListOf>() - var i = 0 - while (i < arrl.size) { - val primerElem = arrl[i] - if (arrl.contains(primerElem + 1) && arrl.contains(primerElem + 2)) { - arrl.remove(primerElem) - arrl.remove(primerElem + 1) - arrl.remove(primerElem + 2) - arrlR.add(arrayListOf(primerElem, primerElem + 1, primerElem + 2)) - } else { - i++ - } - } - - return arrlR -} - -fun obtSeqInv(arrl: ArrayList): ArrayList> { - val arrlR = arrayListOf>() - var i = arrl.size - 1 - while (i >= 0) { - val primerElem = arrl[i] - if (arrl.contains(primerElem - 1) && arrl.contains(primerElem - 2)) { - arrl.remove(primerElem) - arrl.remove(primerElem - 1) - arrl.remove(primerElem - 2) - i -= 3 - arrlR.add(arrayListOf(primerElem, primerElem - 1, primerElem - 2)) - } else { - i-- - } - } - - return arrlR -} - -fun obtTri(arrl: ArrayList): ArrayList> { - val arrlR = arrayListOf>() - var i = 0 - while (i + 2 < arrl.size) { - val primerElem = arrl[i] - if (primerElem == arrl[i + 1] && primerElem == arrl[i + 2]) { - arrl.remove(primerElem) - arrl.remove(primerElem) - arrl.remove(primerElem) - arrlR.add(arrayListOf(primerElem, primerElem, primerElem)) - } else { - i++ - } - } - return arrlR -} - -fun obtPar(arrl: ArrayList): ArrayList> { - val arrlR = arrayListOf>() - var i = 0 - while (i + 1 < arrl.size) { - val primerElem = arrl[i] - if (primerElem == arrl[i + 1]) { - arrl.remove(primerElem) - arrl.remove(primerElem) - arrlR.add(arrayListOf(primerElem, primerElem)) - } else { - i++ - } - } - return arrlR -} - -fun main() { - val cartas = arrayListOf(2, 2, 2, 3, 3, 4, 4) - val cartas2 = arrayListOf(2, 2, 2, 3, 3, 4, 4) - - val arrlR = obtSeq(cartas) - val arrlT = obtTri(cartas) - val arrlP = obtPar(cartas) - - println("-------------------") - println(arrlR) - println(arrlT) - println(arrlP) - println(cartas) - - val arrlR2 = obtSeqInv(cartas2) - val arrlT2 = obtTri(cartas2) - val arrlP2 = obtPar(cartas2) - - println("-------------------") - println(arrlR2) - println(arrlT2) - println(arrlP2) - println(cartas2) -} diff --git a/src/juego/Juego.kt b/src/juego/Juego.kt index 61a8d0b..715c2df 100644 --- a/src/juego/Juego.kt +++ b/src/juego/Juego.kt @@ -129,62 +129,69 @@ class Juego(val usuarios: ArrayList>) { } suspend fun manejarDescarte(idUsuario: String, carta: Int) { - if (ordenJugadores[turnoActual] == idUsuario) { - val m = manos[idUsuario]!! + if (ordenJugadores[turnoActual] != idUsuario) return + + val m = manos[idUsuario]!! + + if (m.sigCarta == carta) { + m.sigCarta = -1 + } else { + val posCarta = m.cartas.indexOf(carta) + if (posCarta != -1) { + m.cartas.removeAt(posCarta) + + // Tras llamar un Seq/Tri el jugador no tiene una carta adicional en su mano. + if (m.sigCarta != -1) m.cartas.add(m.sigCarta) - if (m.sigCarta == carta) { m.sigCarta = -1 } else { - val posCarta = m.cartas.indexOf(carta) - if (posCarta != -1) { - m.cartas.removeAt(posCarta) - - // Tras llamar un Seq/Tri el jugador no tiene una carta adicional en su mano. - if (m.sigCarta != -1) m.cartas.add(m.sigCarta) - - m.sigCarta = -1 - } else { - return - } + return } + } - m.descartes.add(carta) + m.descartes.add(carta) - // Verificar seq/tri/quad/win - var hayOportunidades = false - for ((idUsuarioActual, mano) in manos) { - // No buscar oportunidades en el usuario que acaba de descartar. - if (idUsuarioActual == idUsuario) continue + // Verificar seq/tri/quad/win + var hayOportunidades = false + for ((idUsuarioActual, mano) in manos) { + // No buscar oportunidades en el usuario que acaba de descartar. + if (idUsuarioActual == idUsuario) continue - // Solo verificar seq en el jugador a la derecha del que descarto - if (esUsuarioIzq(idUsuario, idUsuarioActual)) { - val oportunidadSeq = OportunidadSeq.verificar(carta, mano.cartas) - if (oportunidadSeq != null) { - hayOportunidades = true - mano.oportunidades.add(oportunidadSeq) - } - } - - // Oportunidades tri - val oportunidadTri = OportunidadTri.verificar(carta, mano.cartas) - if (oportunidadTri != null) { + // Solo verificar seq en el jugador a la derecha del que descarto + if (esUsuarioIzq(idUsuario, idUsuarioActual)) { + val oportunidadSeq = OportunidadSeq.verificar(carta, mano.cartas) + if (oportunidadSeq != null) { hayOportunidades = true - mano.oportunidades.add(oportunidadTri) + mano.oportunidades.add(oportunidadSeq) } } - if (hayOportunidades) { - // Enviar datos - enviarDatosATodos() - } else { - cambiarTurnoSigJugadorConsecutivo() - - // Actualizar dora - gestorDora!!.actualizarDoraCerrado() - - // Enviar datos - enviarDatosATodos() + // Oportunidades tri + val oportunidadTri = OportunidadTri.verificar(carta, mano.cartas) + if (oportunidadTri != null) { + hayOportunidades = true + mano.oportunidades.add(oportunidadTri) } + + // Oportunidades win + val oportunidadWin = OportunidadWin.verificar(carta, mano.cartas) + if (oportunidadWin != null) { + hayOportunidades = true + mano.oportunidades.add(oportunidadWin) + } + } + + if (hayOportunidades) { + // Enviar datos + enviarDatosATodos() + } else { + cambiarTurnoSigJugadorConsecutivo() + + // Actualizar dora + gestorDora!!.actualizarDoraCerrado() + + // Enviar datos + enviarDatosATodos() } } diff --git a/src/juego/OportunidadWin.kt b/src/juego/OportunidadWin.kt index 0ca55f8..16200cf 100644 --- a/src/juego/OportunidadWin.kt +++ b/src/juego/OportunidadWin.kt @@ -145,7 +145,7 @@ class OportunidadWin(override val cartaDescartada: Int) : Oportunidad { return if (valorCont1 > valorCont2) contenedor1 else contenedor2 } - fun verificar(valorCarta: Int, cartasMano: ArrayList) { + fun verificar(valorCarta: Int, cartasMano: ArrayList): OportunidadWin? { val narrl = ArrayList(cartasMano.size + 1) narrl.addAll(cartasMano) narrl.add(valorCarta) @@ -165,7 +165,11 @@ class OportunidadWin(override val cartaDescartada: Int) : Oportunidad { contenedorGrupos.agregarDesdeContenedor(obtenerContenedorCartasNumero(cartasRojo)) contenedorGrupos.agregarDesdeContenedor(obtenerContenedorCartasNumero(cartasNegro)) - + return if (contenedorGrupos.estaListo()) { + OportunidadWin(valorCarta) + } else { + null + } } }