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:

  1. Utilice correctamente los números disponibles.
  2. Utilice operadores válidos.
  3. Sea una expresión válida.
  4. 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 Operador para 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.