Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Projeto "palavra secreta" ou "jogo da forca"

Mais uma dúvida, um mano muito maneiro chamado Evandro deu a dica de botar limites de tentativas no meu jogo da forca ou "palavra secreta". Mas apareceu um problema :/

O MEU CÓDIGO DE JS NÃO RESPEITA O LIMITE MESMO O JOGADOR ACERTANDO, e eu ja tentei a lógica e tals e não consegui.

E de novo, se algum instrutor e/ou aluno mais experiente puder me ajudar e me dar mais dicas sobre programação (tanto em lógica quanto boas práticas ou sobre a vida) estou aceitando :)

segue o código em js:

alert ('welcome to the secret word project');
let secretWord = 'javascript';;
let displayWord = '_'.repeat(secretWord.length);
let correct = false;
let attempts = 0;
const maxAttempts = 6;

while (correct === false) { 
    let userGuess = prompt (`Guess a letter: ${displayWord}`);
    
    if (userGuess === null || attempts >= maxAttempts) {
        alert(`Game over! The secret word was: ${secretWord}`);
        break
    } 
    let newDisplayWord = '';
    for (let i = 0 ; i< secretWord.length; i++){
        if (userGuess === secretWord[i] || displayWord[i] !== '_') {
            newDisplayWord += secretWord[i];
} else {
            newDisplayWord += '_';
        }
    }

    displayWord = newDisplayWord;
    if (displayWord === secretWord) {
        correct = true;
        alert(`Congratulations! You guessed the secret word: ${secretWord}`);
    } else if (attempts >= maxAttempts) {
        alert(`Game over! The secret word was: ${secretWord}`);
}   else {      attempts++;
        alert(`Wrong guess! Attempts left: ${maxAttempts - attempts}`);
    }
}
1 resposta

Oi, Guilherme! Como vai?

Gostei da sua iniciativa de implementar limite de tentativas, isso mostra evolução na lógica do jogo. O ponto que chamou atenção é que o contador attempts só é incrementado quando o jogador erra, mas a verificação de limite acontece antes e depois de forma meio desconectada, o que faz o controle não funcionar como esperado quando há acertos.

Uma dica interessante para o futuro é centralizar o controle de tentativas logo após a jogada, garantindo que sempre seja atualizado de forma previsível:


let tentativas = 0;
let maximo = 6;

if (!secretWord.includes(userGuess)) {
    tentativas++;
}

if (tentativas >= maximo) {
    console.log("fim de jogo");
}

Esse código verifica se a letra não existe na palavra e incrementa tentativas, depois valida se atingiu o limite.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!