Skip to content

youbinarey/SimonDice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

🎮 SimonDice

🎯 Propósito

El objetivo principal es recrear el juego "Simón dice", donde el usuario debe recordar y repetir una secuencia de colores generada aleatoriamente. A medida que el usuario avanza, la secuencia incorpora un nuevo color, aumentando progresivamente la dificultad.


🛠️ Estructura General del Código

1️⃣ Datos (Model)

Clases y objetos auxiliares que gestionan la información básica del juego:

  • Datos:
    Contiene datos compartidos como:

    • 🔢 La ronda inicial.
    • 🎨 La secuencia actual.
    • 🏆 La ronda máxima alcanzada.
  • Colores:
    Enum que define los colores disponibles en el juego:

    • ROJO, VERDE, AZUL, AMARILLO.
  • Estados:
    Enum que define los estados posibles del juego:

    • INICIO: 🟢 El juego está listo para comenzar.
    • GENERANDO: 🔄 Se está creando la secuencia para que el jugador la memorice.
    • ADIVINANDO: 🤔 El jugador intenta repetir la secuencia.
    • FIN: ❌ El juego ha terminado.

2️⃣ UI (View)

🚀 JetPack Compose

  • SimonDiceUI:
    Componente principal que organiza la interfaz. @Composable:
    • InfoRonda: 📋 Muestra información del estado del juego y la ronda actual.
    • ShowSequence: 🎥 Reproduce la secuencia generada con animaciones para que el jugador la memorice.
    • CrearBoton: 🔘 Modelo reutilizable para crear botones de colores y el botón "Start".

🖥️ Distribución de la Interfaz

La pantalla se divide en tres bloques principales:

  1. Bloque Superior:
    📊 Muestra información del juego, como la ronda y el estado.
  2. Bloque Central:
    🎨 Presenta la secuencia de colores generada para que el jugador la memorice.
  3. Bloque Inferior:
    🔘 Incluye los botones de colores y el botón "Start".

3️⃣ SimonDiceViewModel (ViewModel)

🧠 Responsabilidades del ViewModel

Encargado de la lógica del juego y el manejo de estados. Dadas las consultas en foros y documentación de android. Se ha reemplazado el uso de Livedata para exponer los datos reactivos mediante StateFlow:

  • ronda: Representa la ronda actual del juego.
  • secuencia: Lista de colores generada para la ronda actual.
  • estadoJuego: Estado actual del juego.

⚙️ Funciones clave

  • start: ▶️ Inicia el juego generando una nueva secuencia.
  • incrementarRonda: ➕ Incrementa la ronda, genera una nueva secuencia y actualiza el estado.
  • intento: ✅ Verifica si el jugador acertó al elegir un color.
  • resetRonda: 🔄 Reinicia las rondas y el estado del juego.

🔍 Depuración

Funciones como showEstado y showSecuencia registran en Logcat el estado del juego y las secuencias generadas.


4️⃣ Mecánica del Juego

🚀 Inicio del Juego

El usuario pulsa el botón "Start", generando una secuencia aleatoria de colores que se muestra para que el jugador la memorice.

📈 Progreso

El jugador intenta reproducir la secuencia pulsando los botones de colores en el orden correcto.
Si acierta, se avanza a la siguiente ronda, añadiendo un nuevo color a la.

🏁 Finalización

Si el jugador falla, el estado cambia a FIN, mostrando la ronda alcanzada.


5️⃣ Animaciones y Fluidez

  • ShowSequence:
    🎥 Utiliza coroutines y delays para simular el "parpadeo" de los colores, ofreciendo una experiencia visual fluida y atractiva.

  • ⚡ Reactividad:
    Se emplea StateFlow para actualizar automáticamente la UI en función de los cambios de datos o estados.


📱 Demostración

✨ Vista previa

Vista previa de la app


About

App en Android con Kotlin, Jetpack Compose y MVVM

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages