Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Problema con juego del Ahorcado.

Tengo el problema de que al momento de añadir una letra a un array para verificar las letras que son presionadas, no me agrega las letras duplicadas de la palabra. Por ejemplo: "Azul", como no se repite ni una letra, me da bien el array y puedo verificar si el jugador a ganado. El problema es al intentar poner palabras como "Casa" que tienen dos letras idénticas, solo me pasa una de ellas al array. Anexo mi código a ver si alguien me puede ayudar. Gracias de antemano.

let pincel = document.getElementById('canvas-0').getContext('2d');
let btnAgregar = document.querySelector("#btn-agregar-func");

let palabras = ["javascript", "purpura", "casa", "html", "automata", "gundam", "azul"];
let hiddenWord = "";
let correctWord = "";

let letters = [];
let wrongLetter = [];
let errors = 10;

//Selecciona una palabra random del array "palabras".
function secretWord(){
    let palabra = palabras[Math.floor(Math.random() * palabras.length)];
    hiddenWord = palabra.toUpperCase();
    console.log(hiddenWord);
}

//Inicia el estado del juego.
function playGame(){
    document.getElementById("btn-iniciar-func").style.display = "none";

    secretWord();
    drawLines();

    document.onkeydown = (e) => {
        let letra = e.key.toUpperCase();
        if (keyPress(letra) && hiddenWord.includes(letra)){
            for (let i = 0; i < hiddenWord.length; i++){
                if (hiddenWord[i] === letra){
                    validLetters(letra);
                    drawCorrectLetters(i);
                    win();
                }
            }
        }
        else{  
            console.log(errors);
            drawIncorrectLetters(letra, errors);
            addWrongLetter()
            drawGallow(errors);
            lose();
        }

    }
}

//Revisa si una tecla es presionada.
function keyPress(key){
    let estado = false;
    if (key >= 65 && letters.indexOf(key) || key <= 90 && letters.indexOf(key)){
        console.log(key);
        return estado
    }    
    else{
        estado = true;
        console.log(key);
        return estado
    }
}

//Añade el error a la variable.
function addWrongLetter() {
    errors -= 1
}

//Valida si la letra ya ha sido presionada.
function validLetters(letra) {
    let check = true;
    if (correctWord.includes(letra) && hiddenWord.includes(letra)) {
        check = true;
    }
    else {
        check = false;
        correctWord += letra;
        console.log(correctWord);
    }

}

//Revisa si el jugador ha ganado la partida.
function win() {
    if (correctWord.length === hiddenWord.length) {
        alert('Has Ganado!')
    }
}
1 respuesta

Hola Luis Ángel espero estés bien.

Gracias por compartir tu duda con nosotros, me alegra mucho ver que estás realizando el challenge del juego del ahorcado.

Revisando el código que nos enviaste y con el problema que relatas, note que en tu función play game, te hace falta agregar otra condición para que la verificación de la letra que fue presionada, así podrás hacer la comparación, también pienso que te estarían faltando agregar algunas otras funciones.

Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte. ¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. ¡Continúa con tus estudios!