Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Створення Консольного Застосунку Для Гри у Вгадування | Створення Консольних Застосунків з Node.js
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Розробка бекенду з 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

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

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