🎮 JavaScript и мини-игры Урок 16 из 16 · 0 из 16

Урок 16. Финал: игра «Поймай кружок»

Финал. Собираем всё вместе — холст, события, случайность, условия и счёт.

Новой теории почти нет — только одна вещь, без которой игру не сделать: как понять, куда именно кликнули по холсту.

Координаты клика

Событие клика знает координаты относительно всего окна, а нам нужны — относительно холста. Разницу даёт getBoundingClientRect:

holst.addEventListener('click', function (e) {
  const ramka = holst.getBoundingClientRect();
  const mx = e.clientX - ramka.left;
  const my = e.clientY - ramka.top;
});

Попали или нет

Клик засчитан, если расстояние от него до центра кружка меньше радиуса. Расстояние между двумя точками считают по теореме Пифагора:

const rasstoyanie = Math.sqrt((mx - x) * (mx - x) + (my - y) * (my - y));
if (rasstoyanie < r) { /* попал */ }

Как устроена игра

  1. функция narisui стирает холст и рисует кружок в точке (x, y);
  2. функция pereprygni ставит кружку новые случайные координаты и вызывает narisui;
  3. по клику проверяем попадание: если да — увеличиваем счёт и вызываем pereprygni;
  4. в самом конце один раз вызываем narisui, чтобы кружок появился на старте.
Подсказка. Чтобы кружок не вылезал за край, случайные координаты берут с отступом в один радиус: Math.random() * (holst.width - 2 * r) + r.

Твой прогресс

Опыт и значки хранятся прямо в этом браузере — ни имени, ни почты для этого не нужно. Все треки и значки →

Частые вопросы

Как узнать, куда кликнули на canvas?

Из события берут clientX и clientY, а из холста — getBoundingClientRect(). Вычитая left и top рамки из координат клика, получают позицию внутри самого холста.

Что учить после JavaScript?

Хорошее продолжение — Python: он проще синтаксисом и на нём удобно решать задачи и писать игры. В нашем разделе есть отдельный бесплатный трек по Python.