Створення Консольного Застосунку Для Гри у Вгадування
Свайпніть щоб показати меню
У цьому розділі підготуйтеся підвищити свої навички створення консольних застосунків, занурившись у розробку захопливої гри Вгадай число. Ця інтерактивна гра кине виклик гравцям, пропонуючи вгадати випадково згенероване число в заданому діапазоні. У процесі ми розглянемо основні поняття, такі як:
- Генерація випадкових чисел;
- Валідація введення;
- Взаємодія з користувачем;
- Збереження результатів гри у файл.
Завдання
Уявіть, що ви занурюєтеся у застосунок, який обіцяє захоплення та інтригу. Гравцям пропонується вгадати загадане число в заданому діапазоні. Додаток миттєво повідомляє про кожну спробу та ретельно підраховує кількість зроблених спроб.
Цей практичний приклад — ваша можливість вдосконалити навички створення CLI-застосунків і продемонструвати мистецтво розробки інтерактивних програм.
Готовий застосунок
Погляньте, як це працює! Нижче наведено GIF, що ілюструє захопливу гру "Вгадай число", яку ви створите:
Створення консольної гри "Вгадай число"
Перед вами два шляхи. Перший варіант запрошує розпочати шлях самостійно, другий — пропонує корисний гайд для досягнення успіху. Незалежно від того, чи зануритесь ви сміливо, чи скористаєтеся структурованим керівництвом, на вас чекає захопливий досвід, після якого у вас буде функціональний та цікавий консольний застосунок.
Майстер-план
- Крок 1: Налаштування та ініціалізація;
- Крок 2: Визначення параметрів гри;
- Крок 3: Визначення допоміжних функцій;
- Крок 4: Логіка гри;
- Крок 5: Збереження результату гри;
- Крок 6: Запуск гри;
- Висновок;
- Повний код застосунку.
Крок 1: Налаштування та ініціалізація
Підготовка середовища шляхом створення нової директорії та файлу з назвою app.js. У цьому файлі підключаються необхідні модулі:
const readline = require('readline');
const fs = require('fs').promises;
Створення інтерфейсу Readline:
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
Пояснення: Імпортуються необхідні модулі: readline для взаємодії з користувачем та fs.promises для роботи з файлами. Далі створюється інтерфейс Readline з іменем rl для обробки введення та виведення.
Крок 2: Визначення параметрів гри
Встановлення мінімального та максимального чисел:
const minNumber = 1;
const maxNumber = 100;
Генерація секретного числа:
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
Ініціалізація лічильника спроб:
let attempts = 0;
Пояснення: Ми визначаємо діапазон чисел (minNumber і maxNumber), у межах якого буде згенеровано секретне число. Секретне число генерується випадковим чином за допомогою Math.random() і присвоюється змінній secretNumber. Змінна attempts ініціалізується для відстеження кількості спроб користувача.
Крок 3: Визначення допоміжних функцій
Оснастіть застосунок допоміжною функцією для бездоганної валідації:
function isValidGuess(guess) {
return !isNaN(guess)
&& guess >= minNumber
&& guess <= maxNumber;
}
Пояснення: Функція isValidGuess перевіряє, чи є припущення користувача дійсним числом у заданому діапазоні (minNumber до maxNumber).
Крок 4: Логіка гри
Основні механіки гри через функцію 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();
}
});
}
Пояснення: Функція playGame формує основний ігровий цикл. Вона використовує rl.question для запиту числа у користувача. Якщо введене число коректне, функція перевіряє, чи співпадає воно із секретним числом. Якщо ні, надає користувачу зворотний зв'язок і рекурсивно продовжує ігровий цикл.
Крок 5: Збереження результату гри
Реалізація логіки збереження досягнень користувача у файл 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.');
}
}
Пояснення: Функція saveGameResult використовує fs.promises для додавання результату гри у файл з назвою game_results.txt. Вона надає зворотний зв'язок щодо успішності або невдачі збереження результату.
Крок 6: Запуск гри
Виведення вітального повідомлення та запуск гри:
console.log('Welcome to the Guess the Number game!');
playGame();
Пояснення: Виводиться вітальне повідомлення та запускається ігровий цикл шляхом виклику функції playGame.
Повний код застосунку
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();
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат