Sistema de generación de ayuda - jsyh1/practica_aplicada GitHub Wiki
El sistema de ayuda de All Ten permitirá generar y mostrar automáticamente 10 expresiones válidas, correspondientes a los resultados del 1 al 10.
La funcionalidad se dividirá entre el controlador CalculadoraControler, la nueva clase GeneradorEcuaciones y la clase Operador.
1. Almacenamiento de las ecuaciones
Responsable: CalculadoraControler
El controlador será responsable de almacenar las ecuaciones generadas para poder utilizarlas posteriormente en la ventana de ayuda.
Se manejarán dos tipos de información:
- La expresión completa.
- Los elementos que forman la expresión.
Ejemplo:
Expresión completa:
2 + 3 * 4 - 1
Expresión por partes:
2
+
3
*
4
-
1
2. Contador de intentos fallidos
Responsable: CalculadoraControler
El controlador tendrá un contador encargado de registrar los intentos incorrectos realizados por el jugador.
El contador aumentará cada vez que el jugador introduzca una expresión que no produzca el resultado esperado.
Intento incorrecto
|
v
Aumentar contador
|
v
¿Llegó a 20?
/ \
NO SÍ
| |
v v
Continuar Mostrar
botón Ayuda
3. Activación del botón Ayuda
Responsable: CalculadoraControler
El botón Ayuda estará inicialmente oculto o deshabilitado.
Cuando el contador alcance 20 intentos fallidos, el botón será habilitado para que el jugador pueda consultar las soluciones.
0 - 19 intentos fallidos
|
v
Ayuda deshabilitada
20 o más intentos fallidos
|
v
Ayuda habilitada
4. Ventana de ayuda
Responsable: CalculadoraControler + ventana de ayuda
Al presionar el botón Ayuda, se abrirá una ventana donde se mostrarán las 10 expresiones válidas generadas.
Las soluciones deberán aparecer ordenadas:
Resultado 1 → expresión
Resultado 2 → expresión
Resultado 3 → expresión
Resultado 4 → expresión
Resultado 5 → expresión
Resultado 6 → expresión
Resultado 7 → expresión
Resultado 8 → expresión
Resultado 9 → expresión
Resultado 10 → expresión
5. Clase GeneradorEcuaciones
Se creará una nueva clase llamada:
GeneradorEcuaciones
Su responsabilidad será generar las expresiones que puedan utilizarse como soluciones.
La clase recibirá:
- Los 4 números generados por el juego.
- Los operadores disponibles.
Flujo:
CalculadoraControler
|
| 4 números
| operadores
v
GeneradorEcuaciones
6. Construcción y validación de expresiones
Responsable: GeneradorEcuaciones
GeneradorEcuaciones construirá diferentes expresiones utilizando los números y operadores recibidos.
Cada expresión deberá ser validada antes de almacenarse.
Ejemplo:
Números:
2, 3, 5, 7
Operadores:
+, -, *, /
El generador puede construir diferentes combinaciones hasta encontrar una expresión válida.
Construir expresión
|
v
¿La expresión es válida?
/ \
NO SÍ
| |
v v
Descartar Calcular
resultado
Las expresiones inválidas no serán almacenadas.
7. Uso de Operador
Responsable: GeneradorEcuaciones → Operador
Una vez construida una expresión, GeneradorEcuaciones utilizará la clase Operador para obtener su resultado.
El flujo será:
GeneradorEcuaciones
|
v
Construir expresión
|
v
Operador
|
v
Calcular resultado
|
v
Validar resultado
Si la expresión no puede ser procesada correctamente, se descartará y se generará otra.
8. Almacenamiento de expresiones válidas
Responsable: GeneradorEcuaciones
Una expresión solamente será almacenada cuando:
- Utilice correctamente los números disponibles.
- Utilice operadores válidos.
- Sea una expresión válida.
- Produzca el resultado que se está buscando.
Si alguna condición no se cumple, la expresión será descartada.
Expresión generada
|
v
¿Es válida?
/ \
NO SÍ
| |
v v
Descartar Calcular
resultado
|
v
¿Es el resultado
buscado?
/ \
NO SÍ
| |
v v
Buscar otra Guardar
9. Generación de soluciones del 1 al 10
Responsable: GeneradorEcuaciones
El generador deberá buscar una expresión válida para cada resultado comprendido entre 1 y 10.
El proceso será:
1
↓
Buscar expresión válida
↓
Guardar solución
2
↓
Buscar expresión válida
↓
Guardar solución
3
↓
Buscar expresión válida
↓
Guardar solución
...
10
↓
Buscar expresión válida
↓
Guardar solución
El proceso finalizará cuando se haya encontrado una expresión válida para cada uno de los 10 resultados.
10. Mostrar las soluciones ordenadas
Responsable: CalculadoraControler
Una vez generadas las soluciones, el controlador las organizará en orden ascendente.
El resultado final será:
1 → expresión válida para obtener 1
2 → expresión válida para obtener 2
3 → expresión válida para obtener 3
4 → expresión válida para obtener 4
5 → expresión válida para obtener 5
6 → expresión válida para obtener 6
7 → expresión válida para obtener 7
8 → expresión válida para obtener 8
9 → expresión válida para obtener 9
10 → expresión válida para obtener 10
Flujo general del sistema
CALCULADORA CONTROLER
|
┌─────────┴─────────┐
| |
4 números Operadores
| |
└─────────┬─────────┘
|
v
GENERADOR ECUACIONES
|
v
Construir expresión
|
v
Validar expresión
/ \
NO SÍ
| |
v v
Descartar Operador
|
v
Resultado
|
v
¿Resultado 1-10?
/ \
NO SÍ
| |
v v
Buscar otra Guardar
|
v
Siguiente resultado
|
v
Resultado 1-10
|
v
CalculadoraControler
|
v
Ventana Ayuda
Distribución de responsabilidades
CalculadoraControler
Se encargará de:
- Controlar la interacción con el jugador.
- Contabilizar los intentos fallidos.
- Activar el botón Ayuda después de 20 fallos.
- Entregar los números y operadores a
GeneradorEcuaciones. - Recibir las soluciones generadas.
- Organizar las soluciones.
- Mostrar la ventana de ayuda.
GeneradorEcuaciones
Se encargará de:
- Recibir los cuatro números.
- Recibir los operadores.
- Construir expresiones.
- Validar las expresiones.
- Utilizar
Operadorpara calcularlas. - Descartar expresiones inválidas.
- Buscar expresiones que produzcan los resultados del 1 al 10.
- Almacenar las soluciones válidas.
Operador
Se encargará de:
- Procesar la expresión recibida.
- Aplicar las operaciones correspondientes.
- Obtener el resultado de la expresión.
Resultado esperado
El sistema permitirá que, después de 20 intentos fallidos, el jugador pueda utilizar el botón Ayuda para consultar una ventana con las 10 soluciones válidas, ordenadas desde el resultado 1 hasta el 10.
La generación de las soluciones estará separada de la interfaz para mantener una división clara entre la lógica del juego, la generación de expresiones y el cálculo de resultados.