Основы программирования на JavaScript. Учебное пособие
.pdf
Теперь Гумба идет вправо и навсегда упирается в стену
(рис. 16).
Рис. 16. Персонаж Гумба упирается в стену
Сделайте так, чтобы он мог определять, что уперся в стену, и поворачивать в противоположную сторону (рис. 17).
Рис. 17. Персонаж Гумба двигается от одной стены до другой
Используйте horizWall, чтобы узнать, столкнулся ли Гумба со стеной по оси х. Если было столкновение (horizWall !== null), можно сравнить положение goomba.x и vertWall.x, чтобы узнать, упер-
91
ся ли Гумба в стену слева или справа от него, и изменить goomba.speedX соответственно.
Победа или поражение
Чтобы Марио не проходил сквозь Гумбу, необходимо сделать так, чтобы их коллизия оказалось фатальной для одного из них. Используйте для этого функцию checkCollision, очень похожую на ранее использованную moveAndCheckForObstacles:
function checkCollision(entity, otherTypes) {...}
Функция checkCollision проверяет, произошло ли столкновение сущности entity с какой-либо другой сущностью. Возвращает сущность, с которой произошло столкновение в данном кадре (object), или null. Параметры функции:
–entity (object) – сущность, которая проверяет столкновение;
–otherTypes (array) – список типов сущностей, с которыми будет рассчитываться столкновение.
const mario = checkCollision(goomba, [ENTITY_TYPE_ MARIO]);
В значение mario будет записана сущность Марио, если произошло столкновение в данный кадр. И, если это так (mario !== null), нужно только проверить, меньше ли goomba.y, чем mario.y, и удалить одного из них с помощью функции removeEntity
(рис. 18, 19):
function removeEntity(entity) {...}
Рис. 18. Удаление персонажа Марио
92
Рис. 19. Удаление персонажа Гумба
Звуки
За воспроизведение звука отвечает функция playSound: function playSound(sound, loop = false, volume = 0.02) {...}
Параметры функции:
–sound (object) – звук;
–loop (bool) – зацикливание звука;
–volume (number) – громкость.
Остановить вопроизведение звука можно с помощью функции stopSound:
function stopSound(sound) {...}
Практические задания
1.Ознакомьтесь с теоретической частью.
2.Скачайте, установите и запустите Mario.JS.
3.Создайте персонажа Марио в игровом уровне.
4.Добавьте движение Марио по оси x. Поэкспериментируйте со значением mario.x.
5.Настройте управление персонажем Марио с клавиатуры для клавиш «←» и «→».
6.Добавьте Марио силу тяжести.
7.Сделайте так, чтобы Марио не проваливался сквозь пол и
стены.
8.Добавьте Марио прыжок при нажатии клавиши «space».
9.Настройте движение камеры так, чтобы камера следовала за Марио по всему игровому уровню.
93
10.Скорректируйте код таким образом, чтобы направление изображения персонажа Марио менялось при нажатии клавиш «←» и «→».
11.Добавьте Марио анимацию бега.
12.Добавьте Марио анимацию прыжка.
13.Создайте персонажа Гумба в игровом уровне.
14.Добавьте Гумбе силу тяжести.
15.Добавьте движение Гумбы с помощью начальных парамет-
ров.
16.Настройте движение Гумбы так, чтобы при встрече со стеной он шел в противоположную сторону.
17.Сделайте так, чтобы коллизия Марио и Гумбы оказалась фатальной для одного из них.
18.Добавьте прыжок Марио после победы над Гумбой.
19.Скорректируйте код таким образом, чтобы звуки assets.sndJump, assets.sndStomp и assets.sndGameOver воспроизводи-
лись в подходящие моменты.
20.Добавьте в игру монетки. Символ на карте – 0 (ноль), функ-
ция updateCoin лежит в файле src/entities/coin.js.
21.Сделайте так, чтобы монетки исчезали со звуком assets.sndCoin, когда их касается Марио.
22.Измените гравитацию settings.gravity.
23.Измените скорость течения времени settings.timeSpeed.
94
Заключение
Учебное пособие содержит теоретические сведения и лабораторный практикум, позволяющие обучающимся овладеть основами программирования на современном языке JavaScript. Этот язык в настоящее время является одним из наиболее распространенных языков программирования, очень востребован при разработке распределенных клиент-серверных систем и имеет огромную популярность у программистов всего мира.
JavaScript изначально создавался как язык, от которого очень мало ожидалось. Его предназначением было стать дополнительной веткой языка Java внутри браузеров, подходящей для начинающих разработчиком веб-страниц и программистов, работающих не на полный рабочий день. Однако за короткое время JavaScript превзошел Java
истал преобладающим языком разработки интерактивных веб-страниц
ине только. В дополнение к тому что JavaScript используется для разработки серверных приложений на основе Node.js, он применяется для создания настольных приложений, приложений для мобильных устройств, фитнес-трекеров, роботов и многочисленных встроенных систем. Программное обеспечение на языке JavaScript используется даже для управления космическим телескопом «Джеймс Уэбб» [1]!
95
Библиографический список
1.Allen Wirfs-Brock and Brendan Eich. 2020. JavaScript: The First 20 Years. Proc. ACM Program. Lang. 4, HOPL, Article 77 (June 2020), 189 pages.
2.Кантор И.А. Современный учебник JavaScript [Электронный ресурс]. – URL: https://learn.javascript.ru/ (дата обращения: 19.06.2022).
3.Официальный сайт Visual Studio Code® [Электронный ре-
сурс]. – URL: https://code.visualstudio.com/ (дата обращения: 19.06.2022).
4.Статья в Википедии о Node.js® [Электронный ресурс]. – URL: https://ru.wikipedia.org/wiki/Node.js (дата обращения: 21.06.2022).
5.Официальный сайт Node.js® [Электронный ресурс]. – URL: https://nodejs.org/ru/ (дата обращения: 19.06.2022).
6.Статья в Википедии о простых числах [Электронный ре-
сурс]. – URL: https://ru.wikipedia.org/wiki/Простое_число (дата обра-
щения: 25.06.2022).
7.An introduction to the npm package manager [Электронный ре-
сурс]. – |
URL: |
https://flaviocopes.com/npm/ |
(дата |
обращения: |
19.06.2022). |
|
|
|
|
8.An introduction to Yarn [Электронный ресурс]. – URL: https://flaviocopes.com/yarn/ (дата обращения: 19.06.2022).
9.Рогатин С.В. Игровой движок Mario.JS [Электронный ре-
сурс]. – URL: https://github.com/sergey-rogatin/mariojs (дата обращения: 18.06.2022).
10.GitHub Repositories [Электронный ресурс]. – URL: https://docs.github.com/en/repositories (дата обращения: 19.06.2022).
96
