Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
4
respuestas

No puedo mejorar mi codigo con button y input. No me sale. Problema en bucle creo. Ayuda!

Buenas! vengo hace días trabado. Llegué hasta acá pero no me esta funcionando el bucle creo. puse que me imprima el contador siempre para ver q funcione pero no funciona siempre me marca en 1 y que me quedan siempre 2 intentos. comparto el código:


<meta charset="UTF-8">

<h1>JUEGO: ADIVINAR NUMERO SECRETO (con Button)</h1>

<input/>
<button>Verificar numero</button>

<script> 

    var input = document.querySelector("input");
    input.focus();
    input.value = "";

    var button = document.querySelector("button");
    button.onclick = verificar;

    var n = parseInt(prompt("Buenas! \nTe pido un numero para limitar el rango en el que deberas adivinar. \nEl rango quedaria de 0 hasta el numero elegido: "));

    var numeroSecreto = Math.round(Math.random() * n);

    var intentos = 3;
    //var contadorIntentos;

    alert ("Muy bien, empezemos. Solo contaras con 3 intentos. Mucha suerte!");


    function verificar() {

        for ( var contadorIntentos =  1; contadorIntentos <= 3 ; contadorIntentos++) {

            //var numeroElegido =  parseInt(document.querySelector(input.value));
            var numeroElegido =  parseInt(input.value);

            if (numeroElegido == numeroSecreto){

                alert("Felicitaciones acertaste! El numero secreto era el "+ numeroSecreto);
                break;

            }else if (numeroElegido > numeroSecreto) {

                    alert("Erraste! El numero secreto es menor a " + input.value);
                    alert("Te quedan " + (intentos - contadorIntentos) + " intentos.");
                    alert(contadorIntentos);

            }else{     

                    if (numeroElegido < numeroSecreto) {

                        alert("Erraste! El numero secreto es mayor a " + input.value);
                        alert("Te quedan " + (intentos - contadorIntentos) + " intentos.");
                        alert(contadorIntentos);

                    }

            }

            input.value="";
            input.focus();
            //alert("Lo siento, perdiste! Te quedaste sin intentos.");
        }alert("Fin.")

    }   // alert("Fin.")

</script>

Saludos, bienvenido a quien me pueda ayudar.

4 respuestas

tu bucle for se ejecuta completo. El primer intento con el numero ingresado y los otros 2 con "". Usa un contador externo a la funcion, y que esta verifique si ya se llego a la cantidad de intentos. Algo como:

var contadorIntentos = 0;
function verificar(){
    contadorIntentos++;
    if(contadorIntentos >= Intentos){
        return alert("Lo siento, perdiste! Te quedaste sin intentos.");
    }
    else{
        //tu codigo de verificacion (sin el for ni el break xD)
    }

Gracias Sergio!!! seguí tu consejo y lo pude hacer funcionar, el único problema es que si la persona acierta el juego no corta, ya que no pude poner un break por no usar ni for ni while . Como podría corregir eso? osea que si gana el juego corte. Comparto como me quedo el código :

<meta charset="UTF-8">

<h1>JUEGO: ADIVINAR NúMERO SECRETO (con Button)</h1>

<input/>
<button>Verificar número</button>

<script> 

    var input = document.querySelector("input");
    input.focus();
    input.value = "";

    var button = document.querySelector("button");
    button.onclick = verificar;

    var n = parseInt(prompt("Buenas! \nTe pido un número para limitar el rango en el que deberas adivinar. \nEl rango quedaria de 0 hasta el número elegido: "));

    var numeroSecreto = Math.round(Math.random() * n);

    var intentos = 3;
    var contadorIntentos = 0;

    alert ("Muy bien, empezemos. Solo contaras con 3 intentos. Mucha suerte!");

    function verificar() {
        //for ( var contadorIntentos =  1; contadorIntentos <= 3 ; contadorIntentos++) {

        contadorIntentos++;
        //var numeroElegido =  parseInt(document.querySelector(input.value));
        var numeroElegido =  parseInt(input.value);

        if(contadorIntentos >= intentos){

            alert("Lo siento, perdiste! Te quedaste sin intentos.");
            alert("El número secreto era el " + numeroSecreto);
            alert("Fin.")
            //break;

        }else if (numeroElegido > numeroSecreto) {

            alert("Erraste! El número secreto es menor a " + input.value);
            alert("Te quedan " + (intentos - contadorIntentos) + " intentos.");

        }else if (numeroElegido < numeroSecreto) {

            alert("Erraste! El número secreto es mayor a " + input.value);
            alert("Te quedan " + (intentos - contadorIntentos) + " intentos.");

        }else {

            if (numeroElegido == numeroSecreto){

            alert("Felicitaciones acertaste! El número secreto era el "+ numeroSecreto);
            alert("Fin.");
            //break;

            }

        }   // alert("Fin.")

        input.value="";
        input.focus();

    }    

</script>

Muchas gracias!!!

Se me ocurre poniendo una variable que indique si ya fue encontrado para dejar de intentar. Algo como:

    var intentos = 3;
    var contadorIntentos = 0;
    var encontrado= false; // <==nueva variable

    alert ("Muy bien, empezemos. Solo contaras con 3 intentos. Mucha suerte!");

    function verificar() {
        //for ( var contadorIntentos =  1; contadorIntentos <= 3 ; contadorIntentos++) {
        if(encontrado){//
            return alert("Ya acertaste. Si queres seguir jugando recarga la pagina!");
        }
        else{
            contadorIntentos++;
            // el resto del codigo....
            if (numeroElegido == numeroSecreto){
            encotrado=true;// <== al encontrarlo declara true encontrado
            alert("Felicitaciones acertaste! El número secreto era el "+ numeroSecreto);
            alert("Fin.");

depende de como quieras mostrar que termino

Muy buena, no se me habia ocurrido, voy a tratar de esa manera haber si lo consigo! te agradezco Sergio!