Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Construindo um Aplicativo de Adivinhação no Console | Construindo Aplicações de Console com Node.js
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Desenvolvimento Backend com Node.js e Express.js

bookConstruindo um Aplicativo de Adivinhação no Console

Neste capítulo, prepare-se para aprimorar suas habilidades em aplicações de console enquanto exploramos a criação de um empolgante aplicativo de Adivinhação de Números. Este jogo interativo desafiará os jogadores a exercitar sua intuição ao tentar adivinhar um número gerado aleatoriamente dentro de um intervalo pré-definido. Ao longo do caminho, vamos desvendar os fundamentos de conceitos como:

  • Geração de números aleatórios;
  • Validação de entrada;
  • Interação com o usuário;
  • Até mesmo salvar os resultados do jogo em um arquivo.

Desafio

Imagine explorar um aplicativo que promete emoção e mistério. Os jogadores são convidados a adivinhar um número escolhido misteriosamente dentro de um intervalo pré-definido. O aplicativo oferece feedback instantâneo a cada tentativa e mantém um registro detalhado das tentativas realizadas.

Este exemplo prático é sua oportunidade de aprimorar habilidades na construção de aplicativos CLI e demonstra a técnica de criar programas interativos.

Aplicativo Final

Veja a mágica em ação! Abaixo está um GIF ilustrando o empolgante aplicativo de Adivinhação de Números que você irá desenvolver:

Construindo um Aplicativo de Jogo de Adivinhação no Console

Você tem dois caminhos à sua frente. A primeira opção convida você a embarcar nessa jornada sem auxílio, enquanto a segunda oferece um guia útil para garantir seu sucesso. Seja mergulhando de forma independente ou seguindo o roteiro estruturado, você terá uma experiência fascinante que resultará em um aplicativo de console funcional e envolvente.

Plano Mestre

  • Passo 1: Configuração e Inicializações;
  • Passo 2: Definir Parâmetros do Jogo;
  • Passo 3: Definir Funções Utilitárias;
  • Passo 4: Lógica do Jogo;
  • Passo 5: Salvar Resultado do Jogo;
  • Passo 6: Iniciar o Jogo;
  • Conclusão;
  • Código Completo do Aplicativo.

Etapa 1: Configuração e Inicializações

Prepare o ambiente criando um novo diretório e um arquivo chamado app.js. Dentro deste arquivo, importe os módulos necessários:

const readline = require('readline');
const fs = require('fs').promises;

Criação de uma interface Readline:

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

Explicação: Importação dos módulos necessários: readline para interação com o usuário e fs.promises para operações de arquivos. Em seguida, criação de uma interface Readline chamada rl para gerenciar entrada e saída.

Etapa 2: Definir Parâmetros do Jogo

Definir os números mínimo e máximo:

const minNumber = 1;
const maxNumber = 100;

Gerar o número secreto:

const secretNumber =
  Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;

Inicializar o contador de tentativas:

let attempts = 0;

Explicação: Definimos o intervalo de números (minNumber e maxNumber) dentro do qual o número secreto será gerado. O número secreto é gerado aleatoriamente usando Math.random() e atribuído à variável secretNumber. A variável attempts é inicializada para registrar as tentativas do usuário.

Etapa 3: Definir Funções Utilitárias

Disponibilização de uma função utilitária para validação precisa:

function isValidGuess(guess) {
  return !isNaN(guess)
    && guess >= minNumber
    && guess <= maxNumber;
}

Explicação: A função isValidGuess verifica se o palpite do usuário é um número válido dentro do intervalo especificado (minNumber a maxNumber).

Etapa 4: Lógica do Jogo

A mecânica central do jogo por meio da função playGame:

function playGame() {
  rl.question(`Guess a number between ${minNumber} and ${maxNumber}: `, guess => {
    if (isValidGuess(guess)) {
      attempts++;
      const guessNumber = parseInt(guess);

      if (guessNumber === secretNumber) {
        console.log(`Congratulations! You guessed the number in ${attempts} attempts.`);
        saveGameResult(`Player won in ${attempts} attempts.`);
        rl.close();
      } else if (guessNumber < secretNumber) {
        console.log('Try higher.');
        playGame();
      } else {
        console.log('Try lower.');
        playGame();
      }
    } else {
      console.log('Please enter a valid number within the specified range.');
      playGame();
    }
  });
}

Explicação: A função playGame constitui o loop principal do jogo. Ela utiliza rl.question para solicitar um palpite do usuário. Se o palpite for válido, a função verifica se o valor corresponde ao número secreto. Caso contrário, fornece um retorno ao usuário e continua o loop do jogo de forma recursiva.

Etapa 5: Salvar Resultado do Jogo

Implementação da lógica para salvar as conquistas do usuário no arquivo game_results.txt.

async function saveGameResult(result) {
  try {
    await fs.appendFile('game_results.txt', `${result}\n`);
    console.log('Game result saved.');
  } catch (err) {
    console.log('Failed to save game result.');
  }
}

Explicação: A função saveGameResult utiliza fs.promises para adicionar o resultado do jogo a um arquivo chamado game_results.txt. Ela fornece um retorno sobre o sucesso ou falha ao salvar o resultado.

Passo 6: Iniciar o Jogo

Crie a mensagem de boas-vindas e inicie o jogo:

console.log('Welcome to the Guess the Number game!');
playGame();

Explicação: Exibimos uma mensagem de boas-vindas e iniciamos o loop do jogo chamando a função playGame.

Código Completo do Aplicativo

const readline = require("readline");
const fs = require("fs").promises;

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const minNumber = 1;
const maxNumber = 100;

const secretNumber =
  Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
let attempts = 0;

function isValidGuess(guess) {
  return !isNaN(guess) && guess >= minNumber && guess <= maxNumber;
}

function playGame() {
  rl.question(
    `Guess a number between ${minNumber} and ${maxNumber}: `,
    (guess) => {
      if (isValidGuess(guess)) {
        attempts++;
        const guessNumber = parseInt(guess);

        if (guessNumber === secretNumber) {
          console.log(
            `Congratulations! You guessed the number in ${attempts} attempts.`
          );
          saveGameResult(`Player won in ${attempts} attempts.`);
          rl.close();
        } else if (guessNumber < secretNumber) {
          console.log("Try higher.");
          playGame();
        } else {
          console.log("Try lower.");
          playGame();
        }
      } else {
        console.log("Please enter a valid number within the specified range.");
        playGame();
      }
    }
  );
}

async function saveGameResult(result) {
  try {
    await fs.appendFile("game_results.txt", `${result}\n`);
    console.log("Game result saved.");
  } catch (err) {
    console.log("Failed to save game result.");
  }
}

console.log("Welcome to the Guess the Number game!");
playGame();
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 8

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

bookConstruindo um Aplicativo de Adivinhação no Console

Deslize para mostrar o menu

Neste capítulo, prepare-se para aprimorar suas habilidades em aplicações de console enquanto exploramos a criação de um empolgante aplicativo de Adivinhação de Números. Este jogo interativo desafiará os jogadores a exercitar sua intuição ao tentar adivinhar um número gerado aleatoriamente dentro de um intervalo pré-definido. Ao longo do caminho, vamos desvendar os fundamentos de conceitos como:

  • Geração de números aleatórios;
  • Validação de entrada;
  • Interação com o usuário;
  • Até mesmo salvar os resultados do jogo em um arquivo.

Desafio

Imagine explorar um aplicativo que promete emoção e mistério. Os jogadores são convidados a adivinhar um número escolhido misteriosamente dentro de um intervalo pré-definido. O aplicativo oferece feedback instantâneo a cada tentativa e mantém um registro detalhado das tentativas realizadas.

Este exemplo prático é sua oportunidade de aprimorar habilidades na construção de aplicativos CLI e demonstra a técnica de criar programas interativos.

Aplicativo Final

Veja a mágica em ação! Abaixo está um GIF ilustrando o empolgante aplicativo de Adivinhação de Números que você irá desenvolver:

Construindo um Aplicativo de Jogo de Adivinhação no Console

Você tem dois caminhos à sua frente. A primeira opção convida você a embarcar nessa jornada sem auxílio, enquanto a segunda oferece um guia útil para garantir seu sucesso. Seja mergulhando de forma independente ou seguindo o roteiro estruturado, você terá uma experiência fascinante que resultará em um aplicativo de console funcional e envolvente.

Plano Mestre

  • Passo 1: Configuração e Inicializações;
  • Passo 2: Definir Parâmetros do Jogo;
  • Passo 3: Definir Funções Utilitárias;
  • Passo 4: Lógica do Jogo;
  • Passo 5: Salvar Resultado do Jogo;
  • Passo 6: Iniciar o Jogo;
  • Conclusão;
  • Código Completo do Aplicativo.

Etapa 1: Configuração e Inicializações

Prepare o ambiente criando um novo diretório e um arquivo chamado app.js. Dentro deste arquivo, importe os módulos necessários:

const readline = require('readline');
const fs = require('fs').promises;

Criação de uma interface Readline:

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

Explicação: Importação dos módulos necessários: readline para interação com o usuário e fs.promises para operações de arquivos. Em seguida, criação de uma interface Readline chamada rl para gerenciar entrada e saída.

Etapa 2: Definir Parâmetros do Jogo

Definir os números mínimo e máximo:

const minNumber = 1;
const maxNumber = 100;

Gerar o número secreto:

const secretNumber =
  Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;

Inicializar o contador de tentativas:

let attempts = 0;

Explicação: Definimos o intervalo de números (minNumber e maxNumber) dentro do qual o número secreto será gerado. O número secreto é gerado aleatoriamente usando Math.random() e atribuído à variável secretNumber. A variável attempts é inicializada para registrar as tentativas do usuário.

Etapa 3: Definir Funções Utilitárias

Disponibilização de uma função utilitária para validação precisa:

function isValidGuess(guess) {
  return !isNaN(guess)
    && guess >= minNumber
    && guess <= maxNumber;
}

Explicação: A função isValidGuess verifica se o palpite do usuário é um número válido dentro do intervalo especificado (minNumber a maxNumber).

Etapa 4: Lógica do Jogo

A mecânica central do jogo por meio da função playGame:

function playGame() {
  rl.question(`Guess a number between ${minNumber} and ${maxNumber}: `, guess => {
    if (isValidGuess(guess)) {
      attempts++;
      const guessNumber = parseInt(guess);

      if (guessNumber === secretNumber) {
        console.log(`Congratulations! You guessed the number in ${attempts} attempts.`);
        saveGameResult(`Player won in ${attempts} attempts.`);
        rl.close();
      } else if (guessNumber < secretNumber) {
        console.log('Try higher.');
        playGame();
      } else {
        console.log('Try lower.');
        playGame();
      }
    } else {
      console.log('Please enter a valid number within the specified range.');
      playGame();
    }
  });
}

Explicação: A função playGame constitui o loop principal do jogo. Ela utiliza rl.question para solicitar um palpite do usuário. Se o palpite for válido, a função verifica se o valor corresponde ao número secreto. Caso contrário, fornece um retorno ao usuário e continua o loop do jogo de forma recursiva.

Etapa 5: Salvar Resultado do Jogo

Implementação da lógica para salvar as conquistas do usuário no arquivo game_results.txt.

async function saveGameResult(result) {
  try {
    await fs.appendFile('game_results.txt', `${result}\n`);
    console.log('Game result saved.');
  } catch (err) {
    console.log('Failed to save game result.');
  }
}

Explicação: A função saveGameResult utiliza fs.promises para adicionar o resultado do jogo a um arquivo chamado game_results.txt. Ela fornece um retorno sobre o sucesso ou falha ao salvar o resultado.

Passo 6: Iniciar o Jogo

Crie a mensagem de boas-vindas e inicie o jogo:

console.log('Welcome to the Guess the Number game!');
playGame();

Explicação: Exibimos uma mensagem de boas-vindas e iniciamos o loop do jogo chamando a função playGame.

Código Completo do Aplicativo

const readline = require("readline");
const fs = require("fs").promises;

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const minNumber = 1;
const maxNumber = 100;

const secretNumber =
  Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
let attempts = 0;

function isValidGuess(guess) {
  return !isNaN(guess) && guess >= minNumber && guess <= maxNumber;
}

function playGame() {
  rl.question(
    `Guess a number between ${minNumber} and ${maxNumber}: `,
    (guess) => {
      if (isValidGuess(guess)) {
        attempts++;
        const guessNumber = parseInt(guess);

        if (guessNumber === secretNumber) {
          console.log(
            `Congratulations! You guessed the number in ${attempts} attempts.`
          );
          saveGameResult(`Player won in ${attempts} attempts.`);
          rl.close();
        } else if (guessNumber < secretNumber) {
          console.log("Try higher.");
          playGame();
        } else {
          console.log("Try lower.");
          playGame();
        }
      } else {
        console.log("Please enter a valid number within the specified range.");
        playGame();
      }
    }
  );
}

async function saveGameResult(result) {
  try {
    await fs.appendFile("game_results.txt", `${result}\n`);
    console.log("Game result saved.");
  } catch (err) {
    console.log("Failed to save game result.");
  }
}

console.log("Welcome to the Guess the Number game!");
playGame();
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 8
some-alt