Construindo 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();
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
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 result to the file?
Awesome!
Completion rate improved to 2.56
Construindo 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();
Obrigado pelo seu feedback!