Creación de una Aplicación de Consola de Juego de Adivinanzas
En este capítulo, prepárate para mejorar tus habilidades en aplicaciones de consola mientras nos sumergimos en la creación de un emocionante juego de Adivina el Número. Este juego interactivo desafiará a los jugadores a ejercitar su intuición adivinando un número generado aleatoriamente dentro de un rango predefinido. A lo largo del proceso, exploraremos conceptos fundamentales como:
- Generación de números aleatorios;
- Validación de entradas;
- Interacción con el usuario;
- Incluso guardar los resultados del juego en un archivo.
Desafío
Imagina sumergirte en una aplicación que promete emoción e intriga. Se invita a los jugadores a adivinar un número misteriosamente elegido dentro de un rango predefinido. La aplicación ofrece retroalimentación instantánea sobre cada intento y un registro meticuloso de los intentos realizados.
Este ejemplo práctico es una oportunidad para perfeccionar tus habilidades en la construcción de aplicaciones CLI y muestra el arte de crear programas interactivos.
Aplicación resultante
¡Observa la magia en acción! A continuación se muestra un GIF que ilustra la emocionante aplicación del juego Adivina el Número que estarás creando:
Construcción de una aplicación de consola de adivinanzas
Se te presentan dos caminos. La primera opción te invita a embarcarte en el viaje sin ayuda, mientras que la segunda ofrece una guía útil para asegurar tu éxito. Ya sea que te lances con valentía o sigas la guía estructurada, te espera una experiencia fascinante que te dejará con una aplicación de consola funcional y cautivadora.
Plan maestro
- Paso 1: Configuración e inicializaciones;
- Paso 2: Definir los parámetros del juego;
- Paso 3: Definir funciones utilitarias;
- Paso 4: Lógica del juego;
- Paso 5: Guardar el resultado del juego;
- Paso 6: Iniciar el juego;
- Conclusión;
- Código completo de la aplicación.
Paso 1: Configuración e inicializaciones
Preparar el entorno creando un nuevo directorio y un archivo llamado app.js. Dentro de este archivo, importar los módulos necesarios:
const readline = require('readline');
const fs = require('fs').promises;
Crear una interfaz de Readline:
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
Explicación: Se importan los módulos necesarios: readline para la interacción con el usuario y fs.promises para las operaciones con archivos. Luego, se crea una interfaz Readline llamada rl para gestionar la entrada y salida.
Paso 2: Definir los parámetros del juego
Establecer el número mínimo y máximo:
const minNumber = 1;
const maxNumber = 100;
Generar el número secreto:
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
Inicializar el contador de intentos:
let attempts = 0;
Explicación: Definimos el rango de números (minNumber y maxNumber) dentro del cual se generará el número secreto. El número secreto se genera aleatoriamente usando Math.random() y se asigna a secretNumber. La variable attempts se inicializa para llevar el registro de los intentos del usuario.
Paso 3: Definir funciones utilitarias
Provisión de una función utilitaria para validación precisa:
function isValidGuess(guess) {
return !isNaN(guess)
&& guess >= minNumber
&& guess <= maxNumber;
}
Explicación: La función isValidGuess verifica si la suposición del usuario es un número válido dentro del rango especificado (minNumber a maxNumber).
Paso 4: Lógica del Juego
La mecánica principal del juego a través de la función 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();
}
});
}
Explicación: La función playGame constituye el bucle principal del juego. Utiliza rl.question para solicitar al usuario una suposición. Si la suposición es válida, la función verifica si coincide con el número secreto. Si no es así, proporciona retroalimentación al usuario y continúa el bucle del juego de forma recursiva.
Paso 5: Guardar el Resultado del Juego
Implementar la lógica para guardar los logros del usuario en el archivo 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.');
}
}
Explicación: La función saveGameResult utiliza fs.promises para agregar el resultado del juego a un archivo llamado game_results.txt. Proporciona retroalimentación sobre el éxito o fracaso al guardar el resultado.
Paso 6: Iniciar el juego
Crear el mensaje de bienvenida e iniciar el juego:
console.log('Welcome to the Guess the Number game!');
playGame();
Explicación: Se muestra un mensaje de bienvenida y se inicia el ciclo del juego llamando a la función playGame.
Código Completo de la Aplicación
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();
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 2.56
Creación de una Aplicación de Consola de Juego de Adivinanzas
Desliza para mostrar el menú
En este capítulo, prepárate para mejorar tus habilidades en aplicaciones de consola mientras nos sumergimos en la creación de un emocionante juego de Adivina el Número. Este juego interactivo desafiará a los jugadores a ejercitar su intuición adivinando un número generado aleatoriamente dentro de un rango predefinido. A lo largo del proceso, exploraremos conceptos fundamentales como:
- Generación de números aleatorios;
- Validación de entradas;
- Interacción con el usuario;
- Incluso guardar los resultados del juego en un archivo.
Desafío
Imagina sumergirte en una aplicación que promete emoción e intriga. Se invita a los jugadores a adivinar un número misteriosamente elegido dentro de un rango predefinido. La aplicación ofrece retroalimentación instantánea sobre cada intento y un registro meticuloso de los intentos realizados.
Este ejemplo práctico es una oportunidad para perfeccionar tus habilidades en la construcción de aplicaciones CLI y muestra el arte de crear programas interactivos.
Aplicación resultante
¡Observa la magia en acción! A continuación se muestra un GIF que ilustra la emocionante aplicación del juego Adivina el Número que estarás creando:
Construcción de una aplicación de consola de adivinanzas
Se te presentan dos caminos. La primera opción te invita a embarcarte en el viaje sin ayuda, mientras que la segunda ofrece una guía útil para asegurar tu éxito. Ya sea que te lances con valentía o sigas la guía estructurada, te espera una experiencia fascinante que te dejará con una aplicación de consola funcional y cautivadora.
Plan maestro
- Paso 1: Configuración e inicializaciones;
- Paso 2: Definir los parámetros del juego;
- Paso 3: Definir funciones utilitarias;
- Paso 4: Lógica del juego;
- Paso 5: Guardar el resultado del juego;
- Paso 6: Iniciar el juego;
- Conclusión;
- Código completo de la aplicación.
Paso 1: Configuración e inicializaciones
Preparar el entorno creando un nuevo directorio y un archivo llamado app.js. Dentro de este archivo, importar los módulos necesarios:
const readline = require('readline');
const fs = require('fs').promises;
Crear una interfaz de Readline:
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
Explicación: Se importan los módulos necesarios: readline para la interacción con el usuario y fs.promises para las operaciones con archivos. Luego, se crea una interfaz Readline llamada rl para gestionar la entrada y salida.
Paso 2: Definir los parámetros del juego
Establecer el número mínimo y máximo:
const minNumber = 1;
const maxNumber = 100;
Generar el número secreto:
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
Inicializar el contador de intentos:
let attempts = 0;
Explicación: Definimos el rango de números (minNumber y maxNumber) dentro del cual se generará el número secreto. El número secreto se genera aleatoriamente usando Math.random() y se asigna a secretNumber. La variable attempts se inicializa para llevar el registro de los intentos del usuario.
Paso 3: Definir funciones utilitarias
Provisión de una función utilitaria para validación precisa:
function isValidGuess(guess) {
return !isNaN(guess)
&& guess >= minNumber
&& guess <= maxNumber;
}
Explicación: La función isValidGuess verifica si la suposición del usuario es un número válido dentro del rango especificado (minNumber a maxNumber).
Paso 4: Lógica del Juego
La mecánica principal del juego a través de la función 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();
}
});
}
Explicación: La función playGame constituye el bucle principal del juego. Utiliza rl.question para solicitar al usuario una suposición. Si la suposición es válida, la función verifica si coincide con el número secreto. Si no es así, proporciona retroalimentación al usuario y continúa el bucle del juego de forma recursiva.
Paso 5: Guardar el Resultado del Juego
Implementar la lógica para guardar los logros del usuario en el archivo 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.');
}
}
Explicación: La función saveGameResult utiliza fs.promises para agregar el resultado del juego a un archivo llamado game_results.txt. Proporciona retroalimentación sobre el éxito o fracaso al guardar el resultado.
Paso 6: Iniciar el juego
Crear el mensaje de bienvenida e iniciar el juego:
console.log('Welcome to the Guess the Number game!');
playGame();
Explicación: Se muestra un mensaje de bienvenida y se inicia el ciclo del juego llamando a la función playGame.
Código Completo de la Aplicación
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();
¡Gracias por tus comentarios!