Создадим проект, в котором объект, управляемый кнопками нарисованного пульта, будет двигаться по лабиринту.
Ваш браузер не поддерживает проигрывание HTML5 видео
Видео \(1\). Движение по лабиринту
Если объект наткнётся на стену лабиринта, то игра будет окончена. В этом случае подразумевается, что объект вышел из строя и продолжать движение не может.
Ваш браузер не поддерживает проигрывание HTML5 видео
Видео \(2\). Проигрыш
Позже добавим в проект возможность собирать какие-то другие объекты и получать за это бонусы.
Определимся с действующими спрайтами:
• поле с лабиринтом и кнопками для управления объектом;
• жук: он и будет двигаться по лабиринту.
На поле изобразим лабиринт. Мы выбрали простой лабиринт, но можно нарисовать любой, для реализации важен только цвет стен, так как в проекте предусмотрена реакция объекта-жука на цвет стен лабиринта.
Рис. \(1\). Лабиринт
Пульт управления — \(4\) спрайта со стрелками.
\(4\) спрайта со стрелочками образуют нарисованный пульт для управления.
Как связать движение жука с нажатием на спрайт стрелочку? Ответ — через сообщение. Нажатие на спрайт стрелочку передаёт спрайту жуку соответствующее сообщение.
Рис. \(2\). Связь жука и стрелки
Спрайт жука
Жук, получив сообщение, присваивает переменной «Ход» значение вверх, вниз, вправо или влево и в зависимости от значение переменной «Ход» поворачивается в указанную сторону и выполняет несколько шагов.
Начальное значение переменной «Ход» — пустая строка, для начала движения жук ждёт любого значения переменной «Ход», кроме пустого.
Движение жука могут быть дискретными («Идти \(10\) шагов») или непрерывными. Для непрерывных движений составим алгоритм, выполняющий движение вперёд при нажатой кнопке мыши.
Рис. \(3\). Движение по нажатой кнопке
Остаётся только реализовать реакцию на касание стенок лабиринта и завершение движения.
| | По нажатию на зелёный флажок жук занимает исходное положение |
| --- | --- |
| | Повторяет действия до того, пока не коснётся цвета выхода из лабиринта |
| | Ждёт значения переменной «Ход». Значение переменной передаёт нажатие на кнопки со стрелкой |
| | Если жук касается цвета стен лабиринта, блок «Говорить...» объявляет «Игра проиграна!», и в программу передаётся сообщение «Стоп». После сообщения «Стоп» заканчивается игра, и жук возвращается в начальное положение |
| | Такое же сообщение, но с объявлением «Игра закончена с победой», будет получено, если жук коснётся черты окончания лабиринта |
По нажатию на зелёный флажок жук занимает исходное положение.
Усложним проект возможностью собирать, например, «звёздочки».
Добавим два спрайта: «звёздочку» и «кнопку».
Спрайт звёздочки и спрайт кнопки
«Звёздочку» разместим где-нибудь в стороне от лабиринта и спрячем.
При нажатии на кнопку создаётся несколько клонов «звёздочки», каждый из которых появится в случайном месте. Это можно сделать с помощью цикла «Повторить… раз». Посмотрим программу, когда звёздочка начинает как клон.
Она показывается | |
---|---|
Переходит в случайное положение, положение «звёздочки» ограничивается границами лабиринта | |
Ждёт касания с скриптом «жук», и клон удаляется |
Подсказки
Проверь, что в твоём проекте есть следующие спрайты.
Рис. \(4\). Спрайты
Убедись, что написаны и работают следующие программы:
• для спрайта «Жук» — программа «Когда нажат зелёный флажок», \(4\) программы «Когда я получу вверх (влево, вправо, вниз)» от кнопок со стрелочками; \(1\) программа — «Когда я получу стоп»;
• для каждой из \(4\) кнопок «Когда спрайт нажат» — передать вверх (влево, вправо, вниз);
• для «звёздочки»: «Когда нажат зелёный флажок» — спрятаться; «Когда я начинаю как клон» — описано в таблице выше;
• для кнопки: «Когда спрайт нажат», «Повторить… раз», «Создать клон "звёздочки"».
Продолжая работу над проектом, ты можешь реализовать подсчёт баллов за каждый собранный объект, добавить другие объекты, которые будут не добавлять баллы, а уменьшать их. Также ты можешь ограничить время прохождения лабиринта, добавить уровни игры и ботов, которые будут препятствовать выполнению задачи.