es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer que setInterval() incremente de 1 en lugar de 12?

Mi juego tiene dos jugadores que obtienen números aleatorios, y la persona que tiene el número más grande obtiene 1 “victoria”. Mi bucle while es para el botón de “auto-roll” y, en lugar de hacer clic en “lanzar dados” cada vez, el auto-roll lo hará por ti hasta que un jugador tenga victorias == límite del juego # (bestof.value). No importa donde ponga mi setInterval, este aumenta en grupos a la vez. Si bestof.value = 10, entonces cada intervalo muestra al menos 10 victorias para un jugador a la vez.

checkBox.checked = marca de verificación de entrada que habilita la función de auto-roll. Por lo tanto, este setInterval solo estará activo mientras el bucle de auto-roll esté activo.

De todos modos, ¿qué estoy haciendo mal?

button.addEventListener(“click”, myFunction);
function myFunction() {
let random = Math.floor((Math.random() * 6) + 1);
let random2 = Math.floor((Math.random() * 6) + 1);
screenID.innerHTML = random;
screenIDD.innerHTML = random2;
if (random > random2){
winNumber.innerHTML = ++a;
} else if(random2 > random){
winNumba1.innerHTML = ++b;
} else {
console.log(“Empate”);
}
if (a > b){
winNumber.style.color = ‘white’;
winNumba1.style.color = ‘black’;
} else if(b > a){
winNumba1.style.color = ‘white’;
winNumber.style.color = ‘black’;
} else {
winNumber.style.color = ‘black’;
winNumba1.style.color = ‘black’;
}
if (checkBox.checked){
setInterval(myFunction, 2000)
while(a < bestof.value && b < bestof.value){
myFunction();
}};
if (winNumba1.innerHTML == bestof.value){
winAlert.style.display = ‘flex’;
console.log(‘¡Gana winNumba1!’);
} else if (winNumber.innterHTML == bestof.value){
winAlert.style.display = ‘flex’;
console.log(‘¡Gana winNumber!’);
} else {}
};

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la función setInterval se llama cada vez que se llama a myFunction, lo que resulta en múltiples instancias de setInterval ejecutándose simultáneamente. Para solucionar este problema, debemos mover setInterval fuera de myFunction y asignarlo a una variable.

    Además, el bucle while dentro de myFunction es innecesario y puede causar un bucle infinito. En su lugar, podemos establecer una condición para verificar si alguno de los jugadores ha alcanzado el límite del juego y detener setInterval cuando se cumpla esa condición.

    Aquí tienes un fragmento de código actualizado:

    let intervalId;
    
    function myFunction() {
      let random = Math.floor((Math.random() * 6) + 1);
      let random2 = Math.floor((Math.random() * 6) + 1);
      screenID.innerHTML = random;
      screenIDD.innerHTML = random2; 
      if (random > random2){
        winNumber.innerHTML = ++a;
      } else if(random2 > random){
        winNumba1.innerHTML = ++b;
      } else {
        console.log("Empate");
      }
      if (a > b){
        winNumber.style.color = 'white';
        winNumba1.style.color = 'black';
      } else if(b > a){
        winNumba1.style.color = 'white';
        winNumber.style.color = 'black';
      } else {
        winNumber.style.color = 'black';
        winNumba1.style.color = 'black';
      }
      if (winNumba1.innerHTML == bestof.value){
        winAlert.style.display = "flex";
        console.log('¡Gana winNumba1!');
        clearInterval(intervalId);
      } else if (winNumber.innerHTML == bestof.value){
        winAlert.style.display = "flex";
        console.log('¡Gana winNumber!');
        clearInterval(intervalId);
      } else {}
    };
    
    button.addEventListener("click", function() {
      intervalId = setInterval(myFunction, 2000);
    });
    

    En este código actualizado, la función setInterval se asigna a intervalId cuando se hace clic en el botón “auto-roll”. Luego, myFunction se llama repetidamente con un retraso de 2000ms hasta que uno de los jugadores alcanza el límite del juego. Cuando eso sucede, llamamos a clearInterval para detener setInterval.

    Ten en cuenta que eliminamos el bucle while dentro de myFunction ya que es innecesario y puede causar un bucle infinito.

Comments are closed.