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

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