Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

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

Olá pessoas, tudo certo? Me chamo Guilherme e estou entrando nesse mundo de programação. Comecei por lógica de programação e terminei o curso com aquele projeto do número secreto. Entretanto eu não estava satisfeito e decidi criar um "jogo da forca" (e como não sei a tradução em inglês usei como 'secret word') eu acho que ficou bom, mas ainda dá para melhorar. Gostaria de pedir para que os instrutores e/ou alunos mais experientes dessem dicas para melhoras ou até mesmo para substituição.

fazendo esse projeto aprendi outras coisas como o "for", o "+=", o "null" para caso o jogador cancele, o ".repeat" e o ".length". mas quero mais dicas e mais apendizado. Tamo junto rapaziada S2.

segue o código de js:

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

while (correct === false){ 
    let userGuess = prompt (`Guess a letter: ${displayWord}`);
    
    if (userGuess === null) {
        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}`);
    }
}   
1 resposta
solução!

Olá, Guilherme. Como vai?

Parabéns pela iniciativa de ir além do que foi ensinado nas aulas! Essa é uma das melhores formas de aprender programação: pegando um conceito conhecido e tentando expandi-lo para algo novo. O seu jogo da forca está muito bem estruturado e a lógica de utilizar o .repeat() para criar a palavra mascarada foi uma excelente sacada.

Para te ajudar a evoluir esse projeto, separei algumas sugestões técnicas e boas práticas que vão tornar seu código mais robusto e "limpo":

  • Tratamento de Maiúsculas e Minúsculas: No JavaScript, "A" é diferente de "a". Se a sua palavra secreta for "javascript" e o usuário digitar "J", o código não vai reconhecer. Uma boa prática é transformar a entrada do usuário sempre em minúscula usando o método .toLowerCase().

  • Validação de Entrada: Atualmente, se o usuário digitar uma palavra inteira no prompt, o código pode se comportar de forma estranha. Você pode adicionar uma verificação para garantir que ele digitou apenas uma letra.

  • Uso de const e let: Para valores que não mudam durante a execução, como a própria palavra secreta, prefira usar const. Isso evita alterações acidentais no decorrer do programa e é uma prática padrão no mercado.

  • Limite de Tentativas: Um jogo da forca clássico costuma ter um limite de erros. Você poderia criar uma variável tentativas e diminuir o valor dela cada vez que o usuário errar uma letra.

Veja como o seu código poderia ficar com algumas dessas melhorias aplicadas:

alert('Welcome to the Secret Word project');

const secretWord = 'javascript'.toLowerCase();
let displayWord = '_'.repeat(secretWord.length);
let attempts = 6; // Limite de erros

while (attempts > 0) {
    let userGuess = prompt(`Word: ${displayWord}\nAttempts left: ${attempts}\nGuess a letter:`);

    if (userGuess === null) {
        alert(`Game over! The secret word was: ${secretWord}`);
        break;
    }

    userGuess = userGuess.toLowerCase();

    // Verifica se a letra existe na palavra
    if (secretWord.includes(userGuess)) {
        let newDisplayWord = '';
        for (let i = 0; i < secretWord.length; i++) {
            if (userGuess === secretWord[i] || displayWord[i] !== '_') {
                newDisplayWord += secretWord[i];
            } else {
                newDisplayWord += '_';
            }
        }
        displayWord = newDisplayWord;
    } else {
        attempts--; // Se errar, perde uma vida
        alert(`The letter "${userGuess}" is not in the word!`);
    }

    if (displayWord === secretWord) {
        alert(`Congratulations! You guessed the secret word: ${secretWord}`);
        break;
    }

    if (attempts === 0) {
        alert(`You ran out of attempts! The word was: ${secretWord}`);
    }
}
  • Dica Extra para Estudos: No futuro, você pode trocar o for que reconstrói a string por métodos de array, como .split(), .map() e .join(). Isso deixará o código ainda mais conciso, mas continue focando nos laços de repetição agora, pois eles são a base fundamental da lógica.

Continue com essa curiosidade de aprender novos métodos como o .length e o +=, pois eles são ferramentas essenciais no dia a dia de um desenvolvedor.

Espero que possa ter lhe ajudado!