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 🎮 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();
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 results 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 🎮 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();
Obrigado pelo seu feedback!