Найти в Дзене

JavaScript. Pong. Первая самостоятельно написанная игра

Фрагмент геймплея игры взят с сайта WikiPedia.
Фрагмент геймплея игры взят с сайта WikiPedia.

Одной из ранних аркадных видеоигр, в далёком 1972-м году была игра Pong, идея которой, согласно WikiPedia, была предложена талантливому программисту Аллану Алькорну одним из отцов-основателей индустрии компьютерных игр Ноланом Бушнеллом . Для Аллана игра послужила тренировочным проектом, поскольку, как и у меня, у него не было опыта разработки игр. Я решил, что было бы символично начать самостоятельно писать игры именно с Pong (я ведь уже как минимум так же крут (: , как Аллан в 72-м), поэтому попробовал написать её на JavaScript, вот что получилось:

Pong - классика аркадных игр! - это ссылка на игру, ниже просто иллюстрация (Дзен не умеет ссылки из картинки).

Pong версия от Paltus-Pangasius-Zubatka
Pong версия от Paltus-Pangasius-Zubatka

Да, она работает! Это классное чувство, когда получается то, что задумал! Очень мотивирует.

Однако есть пара нюансов. Самый на данный момент раздражающий - я пока не научился делать опрос двух и более клавиш клавиатуры одновременно, из-за этого перемещение платформ игроками возможно только по очереди. Второму игроку я добавил возможность управления мышью, что несколько сглаживает проблему. В идеале опрашивать две мыши :), тогда управление было бы удобным для обоих игроков.

Второй нюанс - не удалось пока 100% правильно обрабатывать отскоки от платформ. Это проявляется в моменты, когда мяч проходит у самого края платформы - иногда он заскакивает под неё :). В последней версии игры я попытался это исправить, вроде баг не проявляется. Недостаточно тестирования, нужно больше тестирования.

Прежде, чем начинать писать игру, я набросал план разработки, которого придерживался:

  • Готовлю графику экрана, на котором происходит действие. Графика в HTML5 - canvas.
  • Создаю объекты мяча и ракеток.
  • Задаю переменные для счёта, исходные координаты и т.п.
  • Создаю функцию движения ракеток. Опрос клавиатуры через jQuery
  • Создаю функцию проверки столкновений - если мяч выходит за левую границу - зачисляю очко правому игроку; если за правую - левому. Если мяч касается платформ или верхней/нижней границы экрана - он отскакивает. Игра до 4-х очков.
  • Запускаю анимацию через 'setInterval'

В коде много цитат из упражнений по книге "JavaScript для детей", например, конструктор Ball - адаптирован под игру. Часть кода написана по собственным наработкам. Собрать всё воедино - в готовую игру было не просто, но интересно. Да, есть ещё забавные побочные продукты :) - в процессе программирования Pong, я экспериментировал с управлением одной платформой. Результат эксперимента - игра похожая на BreakOut, но пока без кирпичей, которые надо разбивать мячом. Своего рода заготовка.

BreakOut - версия 1.0. Написал за пару часов, к сожалению управлять можно только мышью на PC. Чуть позже приделаю Touch для смартфонов.

Возвращаясь к Pong - из того, что хочется ещё сделать - это чувствительность платформ к попаданию мяча в определенные их области. Чтобы отскок от края платформ был под более острым углом - тогда функционал был бы максимально близок к оригинальному Pong. Так же до сих пор не умею самостоятельно делать аналог модального окна, оно пригодилось бы для старта, рестарта и паузы в игре. Сейчас она стартует сразу после загрузки. Ну и последнее - надо бы добавить звук, правда я не уверен, что он был в оригинальном Pong.

Игра Pong для меня - это что-то вроде экзамена самому себе после изучения книги "JavaScript для детей". Прошёл ровно месяц, как я начал изучать JavaScript - результат обнадёживает, хочется расти дальше. На Pong я потратил примерно 6-7 часов чистого времени.

Чтобы посмотреть код игры, нужно кликнуть по ссылке с игрой, нажать F12, откроются "инструменты" для разработчиков, далее перейти во вкладку Elements. Выглядит примерно так:

Инструменты для разработчика Google Chrome
Инструменты для разработчика Google Chrome