курси програмування для дітей безкоштовно

24. Гра на JavaScript “Єдиноріг і веселки”

Сьогодні на нас чекає гра на JavaScript “Єдиноріг і веселки”. В цій грі ми гратимемо за єдинорога і шукатимемо веселку. Єдиноріжка буде збирати веселки, за кожну отримуватиме бали.

Суть гри на JavaScript “Єдиноріг і веселки”

Мета гри – зібрати якнайбільше веселок. На сторінці випадковим чином розміщується єдиноріг і веселка. Ми керуватимемо єдинорогом за допомогою стрілок. За кожну зібрану веселку нараховуються бали.

Створюємо гру

1: Створіть новий проєкт. Додайте файл javascript і підключіть його на сторінці html

  <script src="script.js"></script>

2: Створіть html-код сторінки гри. Всі елементи мають розміщатися у div з id=”game”: додайте туди поле для рахунку, div для єдинорожки та веселки (unicorn, rainbow, game).

    <div id="🎲">
      <div class="score">Очки: <span id="score">0</span></div>
      <div class="🦄" id="🦄"></div>
      <div class="🌈" id="🌈"></div>
    </div>

3: Додайте стилі для гри

body {
  margin: 0;
  overflow: hidden;
  font-family: sans-serif;
  background: #cce7ff;
}
#game {
  width: 100vw;
  height: 100vh;
  position: relative;
}
.unicorn {
  width: 50px;
  height: 50px;
  background: url("https://unicorn.dev/wp-content/uploads/2022/07/Purple-Blue-Neon-Gaming-Facebook-Cover-Logo-4.png") no-repeat center/contain;
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
}
.rainbow {
  width: 40px;
  height: 40px;
  background: url("https://360031.fs1.hubspotusercontent-na1.net/hub/360031/hubfs/feature_rainbow_seven_colors.png?width=500&name=feature_rainbow_seven_colors.png") no-repeat center/contain;
  position: absolute;
}
.score {
  position: absolute;
  top: 10px;
  left: 10px;
  font-size: 24px;
}

4: Створимо функцію для onload (працює від завантаження сторінки). Надалі увесь код будемо складати у цю функцію

 window.onload = function () {
 };

5: В середині функції window.onload створіть клас UnicornGame

  class UnicornGame {


  }

  new UnicornGame();
};

6: В нашому новому класі створіть конструктор. З атрибутами

      this.unicorn = document.getElementById("🦄");
      // аналогічно для 🌈
      this.scoreEl = document.getElementById("score");
      this.score = 0;
      this.unicornX = window.innerWidth / 2 - 25;
      this.unicornY = window.innerHeight / 2 - 25;

scoreEl- це елемент на формі, який показуватиме рахунок. score- рахунок.
this.unicornX та this.unicornY: початкові координати для єдинорога (розміщення по центру екрану).

7: Наступним кроком створимо метод для розтащування єдинорога на початку гри. Для розташування задаємо відступ зліва та зверху. Поставте правильні артибути

     updateUnicornPosition() {
      this.unicorn.style.left = `${this.⭐️}px`;
      this.unicorn.style.top = `${this.⭐️}px`;
    }

8: Далі витавляємо веселку. З нею трохи складніше, бо для неї варто задати випадкові координати

    placeRainbow() {
      const x = Math.random() * (window.innerWidth - 100);
      const y = Math.random() * (window.innerHeight - 40);
      this.rainbow.style.left = `${x}px`;
      this.rainbow.style.top = `${y}px`;
    }

100 – ширина веселки, а 40 – її висота. Ви віднімаємо ці цифри, щоб випадково не закинути веселку частково за межі екрану.

9: Додаймо у конструктор класу виклик методів розташування героїв на початку гри.

      this.updateUnicornPosition();
      this.placeRainbow();

Якщо ви все зробили правильно, то при оновленні сторінки веселка буде розташовуватись у новому місці, а єдиноріг ставитися по центру.

Рух єдинорога

10: Час єдинорогу почати рухатися, а то що він завмер на одному місці. Для цього у клас додамо новий метод moveUnicorn, який отримує параметром подію е (натиснення кнопки). Якщо натиснули кнопку зі стрілкою (вгору, вниз, вправо чи вліво), то єдиноріг має почати рухатися.

    moveUnicorn(e) {
      if (e.key === "ArrowLeft") this.unicornX -= 20;
   // Додайте код для всіх стілок (Напр. ArrowUp, ArrowDown). Відрізнятися буде назва клавіші, unicornY\unicornX  та знак перед дорівнює (плюс чи мінус)


      this.unicornX = Math.max(0, Math.min(window.innerWidth - 50, this.unicornX));
      this.unicornY = Math.max(0, Math.min(window.innerHeight - 50, this.unicornY));

      this.updateUnicornPosition();
    }

this.unicornX = Math.max(0, Math.min(window.innerWidth – 50, this.unicornX)); цей і наступний рядок контроює, щоб єдиноріг не вийшов за межі екрану. Він встановлює граничне значення, яке він не перетне.
this.updateUnicornPosition(); оновлює розташування єдинорога

11: Додайте цей рядок у конструктор класу. Він буде слухати поділю натискання клавіші. І якщо клавішу натиснуто, то відразу викличе метод moveUnicorn.

      document.addEventListener("keydown", (e) => this.moveUnicorn(e));

Перевірте, що ваш єдиноріг рухаєься по клавішам мишки.

Єдиноріг натрапив на веселку

12: Залишилося додати метод checkCollisionLoop(),що відповідає за перевірку зіткнення між єдинорогом та веселкою в грі. Цей метод виконується періодично, кожні 100 мілісекунд, і перевіряє, чи відбулося зіткнення між героями. Якщо зіткнення відбулося, збільшується рахунок, і веселка переміщується на нове випадкове місце.

    checkCollisionLoop() {
      setInterval(() => {
        const unicornRect = this.unicorn.getBoundingClientRect();
        const rainbowRect = this.rainbow.getBoundingClientRect();

        if (
          unicornRect.left < rainbowRect.right &&
          unicornRect.right > rainbowRect.left &&
          🦄.🦄< 🌈.🌈&&
          🦄.🦄> 🌈.🌈
// замініть смайли на перевірки по верху top і низу bottom
        ) {
          this.score++;
          this.scoreEl.textContent = this.score;
          this.placeRainbow();
        }
      }, 100);
    }
  }

setInterval(() => { … }, 100); функція, яка виконує певну дію через певний інтервал часу. У нашому випадку через 100 мілісекунд.

const unicornRect = this.unicorn.getBoundingClientRect(); – метод прямокутника, який покриває прямокутником розміри єдинорога на екрані.

Перевірка зіткнення :
unicornRect.left < rainbowRect.right: перевіряється, чи лівий край єдинорога знаходиться лівіше правого краю веселки (тобто єдиноріг може потрапити до веселки зліва).

Якщо зіткнення відбулося :
this.score++: збільшується рахунок гри на 1
this.scoreEl.textContent = this.score: оновлюється текст на екрані, щоб відобразити новий рахунок.
this.placeRainbow(): переміщаємо веселку на нову випадкову позицію на екрані.

13: Додайте у конструктор виклик методу для перевірки зіткнення

this.checkCollisionLoop();
Уроки програмування для дітей. Домашня робота

Домашня робота

1: Замініть єдинорога та веселку на нових героїв.

2: Додайте ще якийсь об’єкт, який має збирати ваш герой. За цей об’єкт має нараховуватися +3 бали

3: Додайте таймер у гру, щоб вона закінчувалася через 30 секунд. Після закінчення має виводитися повідомлення про завершення і рахунок.

Для цього додайте у конструктор (в кінець!)

      this.gameDuration = 30 * 1000; // 30 секунд
      setTimeout(() => {
        this.endGame();
      }, this.gameDuration);

У checkCollisionLoop додайте змінну (тільки жирний код), яка допоможе зупинити перевірку заткнень, коли час вийшов.

 this.collisionInterval = setInterval(() => { ....}

Додайте метод для завершення гри (повідомлення про завершення гри напишіть самостійно, замінивши смайлик. Виведіть фінальний рахунок у повідомленні)

    // Метод для завершення гри
    endGame() {
      clearInterval(this.collisionInterval); // Зупиняємо перевірку зіткнень
      alert("🌻🌻🌻🌻🌻 ");
    }

Час показувати не буде, але якщо все правильно зробили, то через 30 секунд побачите повідомлення про завершення гри.

Уроки програмування для дітей ускладнені завдання level up

Level Up
Гра на JavaScript “Єдиноріг і веселки”

1: Додайте ворога у гру, який рухається випадково. Якщо герой зіштовхнеться з ворогом, то втратить всі свої очки.

Вам може допомогти цей код:

   moveEnemy() {
      let enemyY = 0; // Початкова вертикальна позиція ворога
      const move = setInterval(() => {
        enemyY += 5; // Рухаємо ворога вниз
        if (enemyY > window.innerHeight) {
          enemyY = 0; // Якщо ворог виходить за межі екрану, повертаємо його на верх
          this.enemy.style.left = `${Math.random() * (window.innerWidth - 40)}px`; // Випадкова горизонтальна позиція
        }
        this.enemy.style.top = `${enemyY}px`; // Оновлюємо позицію ворога
        // Перевірка на зіткнення з ворогом вже всередині moveEnemy()
        const unicornRect = this.unicorn.getBoundingClientRect();
        const enemyRect = this.enemy.getBoundingClientRect();
        if (unicornRect.left < enemyRect.right && unicornRect.right > enemyRect.left && unicornRect.top < enemyRect.bottom && unicornRect.bottom > enemyRect.top) {
          🖤🖤🖤🖤// обнуляємо бали при зіткненні
        }
      }, 50); // Оновлюємо позицію ворога кожні 50 мілісекунд
    }

Перевірка зіткнення з ворогом

        // Перевірка на зіткнення з ворогом
        const enemyRect = this.enemy.getBoundingClientRect();
        if (unicornRect.left < enemyRect.right && unicornRect.right > enemyRect.left && unicornRect.top < enemyRect.bottom && unicornRect.bottom > enemyRect.top) {
          🖤🖤🖤🖤// обнуляємо бали при зіткненні
        }

Хочете дізнатися більше ? Переходьте на сторінку з уроками по CSS та Javascript і прокачайте навички з веброзробки 😎🤖 !!!

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *