Esta es una Progressive Web App educativa para aprender música, con actividades interactivas en HTML5 y JavaScript.
- Interfaz simple y atractiva.
- Ejercicios interactivos para identificar y practicar las notas Sol y Mi.
index.html: Página principal y listado de actividades.game.html: Submenú "Atrapa Notas" con los distintos retos.solmi.html: Juego "Atrapa Notas" centrado en las notas Sol y Mi.solmila.html: Variante "Atrapa Notas" con las notas Sol, Mi y La.solmilado.html: Variante "Atrapa Notas" con Sol, Mi, La y Do grave.memory.html: tablero "Memory de Instrumentos" con modo 1 o 2 jugadores.css/: estilos (style.css).js/: scripts (app.js,game.js,memory.js).assets/audio/: clips.ogglibres para los sonidos de instrumentos.manifest.jsonyservice-worker.js: configuración PWA y caché.
solmi.htmlygame.js: Juego tipo arcade para atrapar notas "Sol" y "Mi".solmila.htmlreutilizagame.jscon un modo que añade la nota "La".solmilado.htmlreutilizagame.jsañadiendo también la nota "Do" grave con líneas adicionales.memory.htmlimplementa el tablero "Memory de Instrumentos" con modo 1 o 2 jugadores y dos conjuntos de instrumentos (base y orquesta clásica).- Controles: flechas izquierda/derecha o arrastrar en móvil.
- Objetivo: atrapar la nota en la mitad correcta de la barra (izquierda = Sol, derecha = Mi). Vidas: 3.
Abre index.html en tu navegador. Para instalar como PWA, accede desde un servidor local.
Este archivo se actualizará conforme se agreguen nuevas actividades y funcionalidades.
El ranking usa localStorage por defecto para que cada dispositivo mantenga sus puntuaciones. Para habilitar un ranking común:
- Crea un proyecto en Firebase, habilita Firestore en modo de producción y anota las credenciales públicas (apiKey, authDomain, projectId…).
- Edita
js/firebase-config.jsy reemplaza el valornullpor el objeto de configuración de tu proyecto. - Despliega reglas de seguridad en Firestore que limiten las escrituras únicamente a iniciales (3 caracteres) y puntuaciones numéricas. Un punto de partida:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /leaderboards/{board}/entries/{entry} { allow read: if true; allow create: if request.resource.data.keys().hasOnly( ['name', 'score', 'createdAt', 'createdAtLocal', 'tsString', 'gameId', 'version'] ) && request.resource.data.name is string && request.resource.data.name.size() == 3 && request.resource.data.score is number && request.resource.data.score >= 0 && request.resource.data.score <= 9999; allow update, delete: if false; } } } - Crea un índice compuesto (Firestore > Indexes) para
leaderboards/*/entriesordenando porscoredescendente ycreatedAtascendente.
Con la configuración cargada, ScoreService usa Firestore y mantiene un fallback local en caso de perder conexión.