Una aplicación frontend desarrollada con Angular 16 que implementa un juego de conexión de números con algoritmos de resolución automática y análisis estadístico.
FreeFlow es un puzzle de conexión donde el objetivo es conectar pares de números idénticos en un tablero mediante caminos ortogonales (horizontal y vertical), sin que los caminos se crucen entre sí y llenando completamente el tablero.
- Conectar cada par de números idénticos con un camino continuo
- Los caminos no pueden cruzarse entre sí
- Todas las celdas del tablero deben estar ocupadas al final
- Solo se permiten movimientos ortogonales (arriba, abajo, izquierda, derecha)
- Iniciar trazo: Haz clic en un número para comenzar a trazar un camino
- Trazar camino: Arrastra el mouse por las celdas adyacentes para crear el camino
- Finalizar trazo: Suelta el mouse sobre el número correspondiente para completar la conexión
- Borrar camino: Haz clic en un extremo de un camino ya trazado para borrarlo
- Retroceder: Durante el trazado, puedes retroceder pasando por celdas ya trazadas
- Interfaz intuitiva: Trazado de caminos con mouse drag & drop
- Validación en tiempo real: El juego previene movimientos inválidos
- Detección automática de victoria: Modal de celebración al completar el puzzle
- Sistema de retroceso: Permite deshacer movimientos durante el trazado
- Algoritmo de backtracking: Implementa heurística MRV (Minimum Remaining Values)
- Resolución paso a paso: Muestra la solución aplicando un camino cada segundo
- Detección de tableros imposibles: Identifica cuando no existe solución
- Métricas del algoritmo:
- Caminos explorados
- Callejones sin salida encontrados
- Caminos exitosos
- Tiempo de ejecución
- Historial de exploración: Registro completo del proceso de resolución
- Visualización de estadísticas: Vista detallada del comportamiento del algoritmo
- Tablero por defecto: Tablero 7x7 precargado para comenzar a jugar
- Carga desde archivo: Importa tableros personalizados desde archivos de texto
- Formato de archivo: Sencillo formato CSV para definir tableros
- Reinicio de tablero: Limpia solo los caminos manteniendo los números originales
Los tableros se definen en archivos de texto con el siguiente formato:
7,7
1,4,4
2,2,3
2,5,2
2,6,5
3,4,3
3,5,1
4,4,5
6,3,1
7,1,2
7,5,4
- Primera línea:
filas,columnasdel tablero - Líneas siguientes:
fila,columna,valorpara cada número en el tablero - Las coordenadas son 1-indexadas (comienzan en 1, no en 0)
Antes de comenzar, asegúrate de tener instalado en tu sistema:
- Node.js (versión 16 o superior)
- npm (incluido con Node.js)
- Git
node --version
npm --version
git --versiongit clone [URL_DEL_REPOSITORIO]
cd frontendNavega al directorio de la aplicación principal e instala las dependencias:
cd freeflow-ui
npm installPara ejecutar la aplicación en modo desarrollo:
cd freeflow-ui
npm startO alternativamente:
ng serveLa aplicación estará disponible en http://localhost:4200/. La aplicación se recargará automáticamente si modificas algún archivo fuente.
Para compilar automáticamente los cambios durante el desarrollo:
npm run watchPara construir la aplicación para producción:
cd freeflow-ui
npm run buildLos archivos construidos se almacenarán en el directorio dist/freeflow-ui/.
frontend/
├── algoritmos base/ # Algoritmos base del sistema
├── tableros/ # Configuraciones de tableros
├── freeflow-ui/ # Aplicación Angular principal
│ ├── src/
│ │ ├── app/
│ │ │ ├── algorithm-stats/ # Estadísticas de algoritmos
│ │ │ ├── grid/ # Componentes de grilla
│ │ │ └── model/ # Modelos de datos
│ │ └── assets/ # Recursos estáticos
│ ├── package.json # Dependencias del proyecto
│ └── angular.json # Configuración de Angular
└── README.md # Este archivo
- Angular 16 - Framework principal
- TypeScript - Lenguaje de programación
- TailwindCSS - Framework de CSS (configurado con PostCSS)
- RxJS - Programación reactiva
En el directorio freeflow-ui/, puedes ejecutar:
npm start- Inicia el servidor de desarrollonpm run build- Construye la aplicación para producciónnpm run watch- Construye automáticamente los cambiosnpm test- Ejecuta las pruebas unitariasng generate component [nombre]- Genera un nuevo componente
El proyecto utiliza Angular CLI versión 16.2.16. Para comandos adicionales de Angular CLI:
ng helpEl proyecto incluye TailwindCSS configurado. Los estilos se pueden encontrar en:
src/styles.css- Estilos globalestailwind.config.js- Configuración de TailwindCSS
Si encuentras errores al instalar dependencias:
cd freeflow-ui
rm -rf node_modules package-lock.json
npm installSi el puerto 4200 está ocupado, puedes especificar otro puerto:
ng serve --port 4201Si experimentas problemas de cache:
ng cache clean- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
MIT
La aplicación incluye un sofisticado algoritmo de resolución automática que:
- Análisis de endpoints: Identifica automáticamente los pares de números a conectar
- Heurística MRV: Prioriza los pares con menor número de caminos posibles
- Backtracking inteligente: Explora soluciones de manera eficiente
- Poda temprana: Descarta ramas imposibles para optimizar el rendimiento
Después de ejecutar el auto-resolvedor, puedes acceder a estadísticas detalladas que incluyen:
- Caminos explorados: Número total de caminos intentados
- Eficiencia del algoritmo: Ratio de éxito vs. callejones sin salida
- Tiempo de ejecución: Performance del algoritmo en milisegundos
- Historial completo: Estados del tablero durante la exploración
- Análisis de fallas: Razones específicas de por qué falló cada intento
| Acción | Método |
|---|---|
| Iniciar trazo | Clic en un número |
| Trazar camino | Arrastar mouse por celdas adyacentes |
| Finalizar camino | Soltar mouse en número correspondiente |
| Borrar camino | Clic en extremo de camino existente |
| Retroceder | Pasar por celdas ya trazadas |
| Reiniciar tablero | Botón "Reiniciar" |
| Auto-resolver | Botón "Auto Resolver" |
| Ver estadísticas | Botón "Ver Estadísticas" (después de auto-resolver) |