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
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 🎮 Adivinhe o Número 🔢. Este jogo interativo desafia os jogadores a exercitarem 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 à Vista

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 para 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 arte de criar programas interativos.

🚀 Aplicativo Resultante

Veja a mágica em ação! Abaixo está um GIF ilustrando o empolgante jogo Adivinhe o Número que você irá desenvolver:

Construindo um Aplicativo de Adivinhação no Console

Você se depara com dois caminhos. A primeira opção convida você a embarcar na jornada sem assistência, enquanto a segunda oferece um guia útil para garantir seu sucesso. Seja mergulhando de forma ousada ou seguindo o guia 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.

Passo 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;

Crie 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 com arquivos. Criação de uma interface Readline chamada rl para gerenciar entrada e saída.

Etapa 2: Definição dos Parâmetros do Jogo

Definição dos números mínimo e máximo:

const minNumber = 1;
const maxNumber = 100;

Geração do 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 acompanhar as tentativas do usuário.

Passo 3: Definir Funções Utilitárias

Utilizar 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 ao usuário. Se o palpite for válido, a função verifica se ele 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 o Resultado do Jogo

Implemente a lógica para salvar as conquistas do usuário no jogo 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.

Etapa 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.

🎉 Conclusão: Volta da Vitória

Ao desenvolver o App Jogo de Adivinhação de Números, você adquiriu experiência valiosa em projetar aplicações de console interativas e envolventes. Este exemplo demonstra a integração de entrada do usuário, geração de números aleatórios, validação e manipulação de arquivos, resultando em uma experiência de jogo atrativa.

👨‍💻 Código Completo do App

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

Suggested prompts:

Can you explain how the recursive game loop works in the playGame function?

What happens if the user enters an invalid input?

How does the game save the results to the file?

Awesome!

Completion rate improved to 2.56

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 🎮 Adivinhe o Número 🔢. Este jogo interativo desafia os jogadores a exercitarem 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 à Vista

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 para 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 arte de criar programas interativos.

🚀 Aplicativo Resultante

Veja a mágica em ação! Abaixo está um GIF ilustrando o empolgante jogo Adivinhe o Número que você irá desenvolver:

Construindo um Aplicativo de Adivinhação no Console

Você se depara com dois caminhos. A primeira opção convida você a embarcar na jornada sem assistência, enquanto a segunda oferece um guia útil para garantir seu sucesso. Seja mergulhando de forma ousada ou seguindo o guia 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.

Passo 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;

Crie 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 com arquivos. Criação de uma interface Readline chamada rl para gerenciar entrada e saída.

Etapa 2: Definição dos Parâmetros do Jogo

Definição dos números mínimo e máximo:

const minNumber = 1;
const maxNumber = 100;

Geração do 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 acompanhar as tentativas do usuário.

Passo 3: Definir Funções Utilitárias

Utilizar 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 ao usuário. Se o palpite for válido, a função verifica se ele 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 o Resultado do Jogo

Implemente a lógica para salvar as conquistas do usuário no jogo 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.

Etapa 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.

🎉 Conclusão: Volta da Vitória

Ao desenvolver o App Jogo de Adivinhação de Números, você adquiriu experiência valiosa em projetar aplicações de console interativas e envolventes. Este exemplo demonstra a integração de entrada do usuário, geração de números aleatórios, validação e manipulação de arquivos, resultando em uma experiência de jogo atrativa.

👨‍💻 Código Completo do App

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