EduMemory
App educativa de memoria y aprendizaje
Trabajo de Fin de Grado · Grado en Ingeniería Informática
Inés Araújo Gómez
Tutora: Lorena Otero Cerdeira
Co-Tutora: Encarnación González Rufino
Universidade de Vigo
ESEI · ABRIL 2026
TFG Nº 25/26-17
Índice de contenidos
01
Introducción y objetivos
Contexto educativo, motivación del proyecto y objetivos generales y específicos.
02
Solución, planificación y arquitectura
Resumen de la solución, metodología ágil, planificación temporal y patrón MVVM.
03
Tecnologías, requisitos y diseño
Stack tecnológico, análisis de requisitos, diseño estático y dinámico, gamificación.
04
Datos, pruebas y demostración
Gestión de datos con Room, plan de pruebas, resultados y demostración del programa
05
Conclusiones y trabajo futuro
Principales aportaciones técnicas y pedagógicas, conclusiones y líneas de mejora.
Introducción
La transformación digital ha cambiado profundamente la manera en que aprendemos. El alumnado actual convive con dispositivos móviles y videojuegos, lo que supone una oportunidad y un reto: captar su atención requiere actividades cercanas y motivadoras.
EduMemory nace de una pregunta clave: ¿cómo integrar la mecánica del juego de memoria con contenidos educativos para que el estudiante aprenda mientras juega y no solo repita un patrón mecánico?

La propuesta mantiene la esencia del juego de emparejar tarjetas, añadiendo un paso adicional: al encontrar una pareja, el usuario debe responder una pregunta de opción múltiple. Si falla, el tablero se mezcla de nuevo, reforzando tanto la memoria como los contenidos.
Objetivos del proyecto
Objetivo general
Diseñar y desarrollar una aplicación móvil educativa para Android que combine el juego de memoria con preguntas de opción múltiple, fomentando el aprendizaje activo y la motivación mediante la gamificación.
Objetivos específicos
  • Interfaz intuitiva y accesible: usable por estudiantes de diferentes edades y niveles, sin sobrecargar la pantalla.
  • Lógica de juego: sistema de cartas emparejadas con barajado aleatorio y control de estado (volteadas/no volteadas).
  • Sistema de preguntas educativas: preguntas de opción múltiple asociadas a cada pareja, validando respuestas y condicionando el avance.
Resumen de la solución propuesta
EduMemory es una aplicación nativa para Android programada íntegramente en Kotlin, con arquitectura MVVM, interfaz construida con Jetpack Compose y persistencia de datos mediante Room.
Kotlin + MVVM
Separación clara entre lógica del juego, gestión de datos e interfaz de usuario.
Jetpack Compose
Diseño fluido y reactivo que se adapta automáticamente a los cambios de estado del tablero.
Room
Persistencia local de preguntas, categorías y puntuaciones. Sin dependencia de internet.
Metodología ágil
Desarrollo iterativo-incremental en 5 fases: análisis, capacitación, diseño, desarrollo y pruebas.
Planificación y seguimiento
El proyecto se estructuró en cinco fases con una dedicación total estimada de 300 horas. La ejecución real fue de 305 horas, con una desviación mínima de +5 h.
El diseño requirió +5 h para lograr una estética coherente y accesible; el desarrollo necesitó +10 h por las iteraciones con Jetpack Compose. Las pruebas se completaron antes al haberse documentado en paralelo.
Arquitectura
Patrón MVVM en EduMemory
La arquitectura de EduMemory se basa en MVVM (Model-View-ViewModel), siguiendo las recomendaciones de Android Jetpack. Compose funciona de forma natural con este patrón: la interfaz se reconstruye automáticamente cada vez que el ViewModel notifica un cambio de estado.
1
Model
Entidades Room, EduDao, AppDatabase y EduRepository. Gestiona todos los datos persistentes.
2
ViewModel
GameViewModel con GameState. Controla volteo de cartas, parejas, preguntas, puntuación y temporizador.
3
View
LevelScreen, HomeScreen, GameScreen, ResultScreen y componentes reutilizables como MemoryCard.
Justificación arquitectónica
Separación de responsabilidades
La lógica del juego es independiente de la interfaz. Añadir un modo multijugador o estadísticas avanzadas no requeriría modificar las pantallas existentes.
Compatibilidad natural con Compose
Compose está pensado para modelos de estado inmutables y observables, encajando perfectamente con la gestión de estado del ViewModel.
Facilidad para pruebas
Testear el ViewModel sin depender de la interfaz resultó muy útil para validar la detección de parejas y la validación de respuestas.
Escalabilidad futura
El repositorio intermedio permitirá sustituir Room por Firestore sin reescribir la lógica del juego ni la interfaz.
Tecnologías utilizadas
Kotlin
Lenguaje oficial de Google para Android. Sintaxis expresiva, seguridad frente a nulos e integración natural con corutinas para el temporizador.
Jetpack Compose
Framework declarativo de UI. Actualiza la interfaz automáticamente al cambiar el estado. Facilita componentes reutilizables como las cartas del juego.
Room
Base de datos local oficial de Android. Consultas seguras con SQL, inicialización con datos predefinidos y soporte para Flow reactivo.
Navigation Compose
Gestión del flujo entre pantallas: nivel → categoría → partida → resultados. Flujo claro y estructurado.
Android Studio + Git
IDE con simuladores, inspector de Room y herramientas Compose. Control de versiones con repositorio privado en GitHub.
DALL-E 3
Generación de imágenes para las cartas del juego mediante IA, asegurando coherencia estética entre todas las temáticas.
Requisitos
Especificación de requisitos
Requisitos funcionales
RF1
Seleccionar nivel educativo y categoría temática, adaptando dificultad y preguntas.
RF2
Mostrar tablero de cartas ocultas adaptado al tamaño del dispositivo.
RF3
Voltear cartas y comprobar parejas, impidiendo más de dos volteos simultáneos.
RF4
Presentar pregunta tipo test al emparejar correctamente.
RF5
Validar respuestas: acierto mantiene cartas; fallo mezcla el tablero.
RF6–RF8
Gestionar temporizador, mostrar estadísticas finales y permitir reiniciar partida.
Requisitos no funcionales
RNF1
Compatibilidad con Android 8.0 (API 26) o superior.
RNF2
Rendimiento fluido: respuesta inferior a 100 ms en acciones clave.
RNF3
Interfaz intuitiva y accesible para estudiantes de distintas edades.
RNF4
Escalabilidad para integrar Firestore u otros servicios en la nube.
RNF5
Estabilidad ante interacciones rápidas o minimización de la app.
RNF6
Fiabilidad, robustez e integridad del sistema ante cualquier fallo.
Diseño del software
Diagrama de clases
Pantallas del juego
Navegación del juego
Diseño UX y gamificación
Para "disfrazar" el esfuerzo educativo de entretenimiento, se integraron elementos de gamificación seleccionados por su impacto directo en la conducta del alumnado.
Puntos
Recompensa inmediata que genera motivación extrínseca y fomenta la rejugabilidad para batir la propia marca.
Feedback inmediato
Mensajes de "¡Correcto!" o "Respuesta incorrecta" que reducen la frustración y anclan el conocimiento correcto en la memoria.
Estrellas de dificultad
Indican visualmente la complejidad de cada categoría, fomentando la autonomía y manteniendo al usuario en estado de "flujo".
Rachas
La "Mejor racha" activa la aversión a la pérdida, promoviendo atención sostenida y reflexión deliberada en lugar de pulsaciones impulsivas.
Victoria / Derrota
Estados claros de "Juego Completado" o "Tiempo Agotado" que proporcionan cierre psicológico y activan el efecto "solo un intento más".
Gestión de datos
Base de datos: estructura y persistencia
Entidades Room
LevelEntity
Niveles educativos disponibles.
CategoryEntity
Categorías temáticas con tiempo y número de parejas.
CardEntity
Cartas asociadas a cada categoría con su imageKey.
QuestionEntity
Preguntas tipo test vinculadas a cada carta y nivel.
Gestión del estado del juego
GameState inmutable
Toda la información dinámica (cartas volteadas, parejas, puntuación, temporizador, pregunta activa) se gestiona en un único objeto inmutable.
Cada actualización genera una nueva versión del estado, evitando inconsistencias en las recomposiciones de Compose.
EduRepository como puente
Transforma entidades Room en modelos de dominio listos para el ViewModel. Concentra la construcción del mazo, selección de imágenes y resolución de recursos.
Facilita la futura integración con Firestore sin alterar la lógica del juego.
Protección y estabilidad
No se permiten dos procesos simultáneos sobre el mismo estado. Las operaciones críticas (barajar, validar) se ejecutan en el hilo adecuado con corutinas.
El ViewModel preserva el estado ante cambios de orientación o pausas.
Pruebas
Plan de pruebas
Se diseñó un plan de pruebas combinando diferentes enfoques para garantizar estabilidad técnica y experiencia de usuario adecuada. Dedicación total: ~25 horas.
Unitarias
Lógica del GameViewModel y consultas a Room.
Integración
Cooperación entre Base de datos, Repositorio y ViewModel.
Interfaz (UI)
Pruebas manuales en emuladores y dispositivo físico Samsung Galaxy A52 (Android 14).
Trazabilidad
100% de RF y RNF cubiertos con casos de prueba específicos.
Ejemplo de uso de la aplicación
VIDEO
Aportaciones
Principales aportaciones
Aportaciones técnicas
  • Aplicación nativa funcional desde cero con Kotlin, MVVM, Compose, Room y Navigation.
  • Arquitectura escalable: preparada para integrar Firestore sin reescribir la lógica.
Aportaciones pedagógicas
  • Gamificación del aprendizaje
  • Flexible y adaptable a cualquier materia o nivel educativo.
  • Demuestra que el juego puede ser una herramienta eficaz para aprender.
Aportaciones personales
  • Aprendizaje intensivo de Kotlin, Jetpack Compose y programación funcional.
  • Demostración de que la programación puede tener impacto educativo y social.
Trabajo futuro
Vías de trabajo futuro
La arquitectura modular de EduMemory facilita todas estas ampliaciones sin necesidad de reescribir la lógica central del juego ni la interfaz de usuario.
¡Gracias!
EduMemory demuestra que la programación y la educación pueden unirse para crear herramientas con impacto real en el aula.
Inés Araújo Gómez
Graduado en Ingeniería Informática · Universidade de Vigo · ESEI · Abril 2026
TFG Nº 25/26-17
Tutora: Lorena Otero Cerdeira · Co-Tutora: Encarnación González Rufino · Área: Lenguajes y Sistemas Informáticos
"Con EduMemory busco no solo el desarrollo de una aplicación funcional, sino también la capacidad de integrar diseño educativo, programación y una metodología de trabajo que dé lugar a un recurso con utilidad real en entornos de aprendizaje."