Mi juego tiene dos jugadores que obtienen números al azar, y la persona que tiene el número más grande obtiene 1 "ganancia". Mi bucle while es para el botón "tirar automáticamente", y en lugar de hacer clic en "tirar dados" cada vez, la tirada automática lo hará por ti hasta que un jugador gane == límite del juego # (bestof.value). No importa dónde coloque mi setInterval, aumenta un montón a la vez. Si bestof.value = 10, 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 desplazamiento automático. Por lo tanto, este setInterval solo estará activo mientras el bucle de rotación automática 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("Draw"); } 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('winNumba1 wins!'); } else if (winNumber.innterHTML == bestof.value){ winAlert.style.display = "flex"; console.log('winNumber wins!'); } else {} };Escribí una versión js simplificada de tu juego aquí ya que no tengo html a mano, pero estoy seguro de que puedes ajustarlo a tu entorno.
Diferencia principal: compruebo si alguien ganó y uso el return para detener la función. Si nadie ganó y la reproducción automática está activada, juego automáticamente después de 500 ms nuevamente.
let playerA = 0 let playerB = 0 let autoPlay = true let bestOf = 3 function myFunction() { let random = Math.floor((Math.random() * 6) + 1); let random2 = Math.floor((Math.random() * 6) + 1); console.log("New Round " + random + " vs " + random2) if (random > random2) { playerA++ } else if (random2 > random) { playerB++ } else { console.log("Draw"); } if (playerA > playerB) { console.log("a is winning") } else if (playerB > playerA) { console.log("b is winning") } else { console.log("There has been a draw") } if (playerA == bestOf) { console.log('A won'); return } else if (playerB == bestOf) { console.log('B won'); return } if (autoPlay) { setTimeout(myFunction, 500) }; }; myFunction()