-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
119 lines (102 loc) · 5.34 KB
/
main.js
File metadata and controls
119 lines (102 loc) · 5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// Obtiene una referencia a los elementos HTML por su ID.
// Cada casilla de verificación representa una operación matemática.
const plusCheckbox = document.getElementById('cuadro1'); // Casilla para la suma (Plus)
const lessCheckbox = document.getElementById('cuadro2'); // Casilla para la resta (Less)
const multiCheckbox = document.getElementById('cuadro3'); // Casilla para la multiplicación (For)
const diviCheckbox = document.getElementById('cuadro4'); // Casilla para la división (Among)
// El div donde se mostrará la operación (ej: "5 + 3 =")
const opDiv = document.getElementById('op');
// El botón que, al ser clicado, generará la operación y el resultado
const talButton = document.getElementById('tal');
// El div donde se mostrará el resultado de la operación
const resultadoDiv = document.getElementById('resultado'); // Este div ahora se usará para limpiar su contenido.
// --- INICIO DE CAMBIOS PARA RANGOS DINÁMICOS ---
// Obtiene los valores de rango mínimo y máximo desde los atributos de datos del cuerpo (body) del HTML.
// Si los atributos no están definidos, se usará un rango predeterminado (0-9).
const minRange = parseInt(document.body.dataset.minRange || '0');
const maxRange = parseInt(document.body.dataset.maxRange || '9');
// Muestra en consola los rangos que se están utilizando, útil para depuración.
console.log(`Rango de números actual: ${minRange} - ${maxRange}`);
// --- FIN DE CAMBIOS PARA RANGOS DINÁMICOS ---
/**
* Función para generar un número entero aleatorio dentro de un rango específico.
* Ahora utiliza los valores `minRange` y `maxRange` obtenidos del HTML.
* @param {number} min - El valor mínimo inclusivo del rango.
* @param {number} max - El valor máximo inclusivo del rango.
* @returns {number} Un número entero aleatorio.
*/
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// Añade un "escuchador de eventos" al botón 'Let's Go!'
// Cuando el botón es clicado, se ejecuta la función anónima.
talButton.addEventListener('click', () => {
// Array para almacenar las operaciones que están activas (marcadas por el usuario).
const activeOperations = [];
// Comprueba qué casillas de verificación están marcadas y añade su tipo de operación al array.
if (plusCheckbox.checked) {
activeOperations.push('suma');
}
if (lessCheckbox.checked) {
activeOperations.push('resta');
}
if (multiCheckbox.checked) {
activeOperations.push('multi');
}
if (diviCheckbox.checked) {
activeOperations.push('divi');
}
// Si no se ha seleccionado ninguna operación, muestra un mensaje y termina la ejecución.
if (activeOperations.length === 0) {
opDiv.textContent = 'Por favor, selecciona al menos una operación.';
resultadoDiv.textContent = ''; // Limpia el resultado anterior.
return;
}
// Selecciona una operación aleatoria de las que están activas.
const chosenOperation = activeOperations[Math.floor(Math.random() * activeOperations.length)];
// Ahora `num1` y `num2` usan los rangos `minRange` y `maxRange` configurados en el HTML.
let num1 = getRandomNumber(minRange, maxRange);
let num2 = getRandomNumber(minRange, maxRange);
let operationSymbol = ''; // Símbolo de la operación (+, -, *, /)
let result; // Variable para almacenar el resultado de la operación (aunque no se muestre)
// Usa una estructura 'switch' para realizar la operación basada en la opción elegida.
switch (chosenOperation) {
case 'suma':
operationSymbol = '+';
result = num1 + num2; // Calculamos el resultado, pero no lo mostraremos
break;
case 'resta':
operationSymbol = '-';
result = num1 - num2; // Calculamos el resultado, pero no lo mostraremos
break;
case 'multi':
operationSymbol = '*';
result = num1 * num2; // Calculamos el resultado, pero no lo mostraremos
break;
case 'divi':
// Para la división, nos aseguramos de que el segundo número (denominador) no sea cero.
// Si es cero, generamos un nuevo número hasta que sea diferente de cero.
// Aseguramos que el rango mínimo para num2 sea 1 en este caso.
while (num2 === 0) {
num2 = getRandomNumber(1, maxRange); // Genera un número diferente de cero.
}
operationSymbol = '/';
result = num1 / num2; // Calculamos el resultado, pero no lo mostraremos
// Si el resultado no es un número entero, lo redondeamos a dos decimales
// para una mejor visualización en casos de división no exacta.
if (result % 1 !== 0) {
result = result.toFixed(2);
}
break;
default:
// En caso de que se seleccione una operación no reconocida (esto no debería pasar).
opDiv.textContent = 'Operación no reconocida.';
resultadoDiv.textContent = ''; // Limpia el resultado anterior.
return;
}
// Muestra la operación completa en el div 'opDiv'.
// Por ejemplo: "5 + 3 ="
opDiv.textContent = `${num1} ${operationSymbol} ${num2} =`;
// Limpia el contenido del div 'resultadoDiv' para no mostrar el resultado.
resultadoDiv.textContent = '';
});