Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Створення Консольного Застосунку Для Гри у Вгадування | Створення Консольних Застосунків з Node.js
Розробка бекенду з Node.js та Express.js

bookСтворення Консольного Застосунку Для Гри у Вгадування

У цьому розділі підготуйтеся підвищити свої навички створення консольних застосунків, занурившись у розробку захопливої гри Вгадай число. Ця інтерактивна гра кине виклик гравцям, пропонуючи вгадати випадково згенероване число в заданому діапазоні. У процесі ми розглянемо основні поняття, такі як:

  • Генерація випадкових чисел;
  • Валідація введення;
  • Взаємодія з користувачем;
  • Збереження результатів гри у файл.

Завдання

Уявіть, що ви занурюєтеся у застосунок, який обіцяє захоплення та інтригу. Гравцям пропонується вгадати загадане число в заданому діапазоні. Додаток миттєво повідомляє про кожну спробу та ретельно підраховує кількість зроблених спроб.

Цей практичний приклад — ваша можливість вдосконалити навички створення 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();
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 8

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 2.56

bookСтворення Консольного Застосунку Для Гри у Вгадування

Свайпніть щоб показати меню

У цьому розділі підготуйтеся підвищити свої навички створення консольних застосунків, занурившись у розробку захопливої гри Вгадай число. Ця інтерактивна гра кине виклик гравцям, пропонуючи вгадати випадково згенероване число в заданому діапазоні. У процесі ми розглянемо основні поняття, такі як:

  • Генерація випадкових чисел;
  • Валідація введення;
  • Взаємодія з користувачем;
  • Збереження результатів гри у файл.

Завдання

Уявіть, що ви занурюєтеся у застосунок, який обіцяє захоплення та інтригу. Гравцям пропонується вгадати загадане число в заданому діапазоні. Додаток миттєво повідомляє про кожну спробу та ретельно підраховує кількість зроблених спроб.

Цей практичний приклад — ваша можливість вдосконалити навички створення 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();
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 8
some-alt