Игрок управляет голубым кораблём клавишами A/D или стрелками. Жёлтые звёзды дают очки, красные метеориты отнимают жизни. Экран постоянно обновляется, поэтому это настоящая 2D-аркада.
Аркадная игра: Лови звёзды: учителю
Это уже не консольный квест. На компьютере открывается игровое окно: ребёнок двигает корабль клавишами, ловит падающие звёзды и уклоняется от метеоритов. Мы разбираем рисунок, движение по кадрам, клавиши, столкновения, счёт и перезапуск.
За 30 секунд
Чтобы быстро решить, подходит ли проект для занятия.
Собрать 10 звёзд раньше, чем закончатся три жизни. После победы или проигрыша клавиша R запускает новую попытку.
После основных тем Python: переменные, условия, списки, словари и функции. Лучше проводить на компьютере с установленным Python и Arcade; браузерная Python IDE не открывает графические окна Arcade.
8 занятий по 40–60 минут. Сначала играем в готовый проект, затем меняем по одной механике и объясняем её код.
«Сегодня мы создаём игру, которая живёт в отдельном окне. Корабль слушает клавиатуру, предметы падают каждый кадр, а программа решает, поймали мы звезду или метеорит. Начнём с окна и рисунка, затем добавим движение и правила победы.»
Что дети освоят
- Понимать, зачем нужны игровое окно, on_draw() и on_update().
- Реагировать на нажатие и отпускание клавиш, двигать объект с учётом времени кадра.
- Хранить падающие предметы в списке, проверять столкновения и менять счёт, жизни и состояние игры.
Первое занятие
Готовый сценарий на 45 минут, который можно взять прямо в класс.
Перед началом
- На этом Mac движок Arcade 3.3.3 уже установлен в .venv-arcade внутри папки codeshool. Запустите файл «Играть — Лови звёзды.command» двойным нажатием.
- На другом компьютере скачайте проект и установите зависимости из requirements.txt. Arcade требует обычное графическое окно и не запускается в онлайн IDE сайта.
- Проверьте управление A/D или стрелками и клавишу R. Подготовьте рисунок системы координат: x вправо, y вверх.
- Покажите скриншот игры на сайте, если игровой компьютер нельзя вывести на проектор.
- 0–7 минСыграйте вместе
Пусть дети назовут три вещи, которые меняются на экране: положение корабля, счёт, жизни.
- 7–15 минПокажите карту игры
Окно рисует кадры, клавиши подают команды, on_update() меняет координаты.
- 15–30 минРазберите урок 1
Запустите минимальное окно и поменяйте его заголовок и цвет фона.
- 30–43 минДайте мини-задачу
Пусть дети найдут WIDTH, HEIGHT и background_color, затем покажут свой вариант окна.
- 43–50 минПроверьте понимание
Спросите, что делает arcade.run() и в какой момент появляется окно.
Карта всех уроков
Одна тема, один вопрос классу и одна методическая подсказка на каждый шаг.
Первое игровое окно
Открываем настоящее окно игры вместо текстовой консоли.
Цель: Запустить простое окно 900 × 600 на компьютере.
Спросите: Что появляется вместо текстовой консоли?
Ожидаемый ответ: Отдельное окно игры, созданное через arcade.Window.
Подсказка: Покажите отличие: в консольной игре результатом были строки текста, здесь результат — отдельное окно. Пример с class сначала объясняйте как «чертёж окна», без подробностей наследования.
Рисуем корабль
Собираем героя из простых цветных фигур.
Цель: Понять, как на экране появляются фигуры по координатам.
Спросите: Где находится точка (0, 0)?
Ожидаемый ответ: В левом нижнем углу игрового окна.
Подсказка: Нарисуйте оси x и y на доске. В Arcade ноль координат находится слева внизу. Попросите детей показать, как сдвинуть корабль вправо на 50 пикселей.
Клавиши управления
Учим корабль замечать нажатие и отпускание клавиши.
Цель: Запоминать, куда игрок хочет двигаться.
Спросите: Почему нужна on_key_release()?
Ожидаемый ответ: Она сообщает игре, что кнопку отпустили, и корабль должен остановиться.
Подсказка: Попросите детей удерживать карточку «влево», а потом опустить её. Это помогает объяснить разницу между событием нажатия и состоянием «кнопка удерживается».
Движение по кадрам
Передвигаем корабль плавно и не выпускаем его за край экрана.
Цель: Связать удержание клавиши с перемещением каждого кадра.
Спросите: Для чего умножать скорость на delta_time?
Ожидаемый ответ: Чтобы движение зависело от прошедшего времени, а не от числа кадров.
Подсказка: Объясните delta_time через секундомер: машина может рисовать 30 или 60 кадров, но за одну секунду корабль должен пройти примерно одинаковое расстояние.
Падающие звёзды
Создаём объекты со случайным x и опускаем их вниз.
Цель: Хранить много падающих предметов и менять их координаты.
Спросите: Где хранятся все падающие предметы?
Ожидаемый ответ: В списке self.drops; каждый элемент — словарь с координатами, видом и скоростью.
Подсказка: Для первого объяснения можно нарисовать список из двух словарей на доске. Случайность влияет на вид и место падения, но правило движения одинаково для всех.
Ловим звёзды
Проверяем встречу корабля и звезды, добавляем очко.
Цель: Распознать близость объектов по их координатам.
Спросите: Как узнать, что корабль поймал звезду?
Ожидаемый ответ: Сравнить расстояния по x и y: оба должны быть достаточно маленькими.
Подсказка: Положите два кружка на координатную сетку. Сначала проверьте расстояние по x, потом по y. Подчеркните, что обе проверки нужны одновременно.
Метеориты и жизни
Добавляем опасность и условие проигрыша.
Цель: Обработать два вида столкновения по-разному.
Спросите: Что делает метеорит?
Ожидаемый ответ: Отнимает одну жизнь; при нуле игра переходит в состояние lost.
Подсказка: Покажите на доске таблицу: star → score +1, meteor → lives -1. Спросите, почему проверка конца игры стоит после обработки столкновений.
Победа и новый старт
Заканчиваем аркаду и даём игроку начать заново.
Цель: Сыграть в законченную игру и изменить одно правило.
Спросите: Что вернёт новый раунд после R?
Ожидаемый ответ: restart() сбросит положение, предметы, счёт, жизни и состояние игры.
Подсказка: Попросите детей в конце занятия назвать, в каком методе происходит рисование, в каком — движение, а в каком — реакция на клавиши. Это и есть главная карта игры.
Если что-то пошло не так
Типичные места, на которых дети останавливаются.
Игра не открывается в браузере
Arcade создаёт окно на компьютере. На сайте доступны уроки, скриншот и файл игры, но для запуска нужна локальная установка.
Пример не запускается отдельно
Со второго урока блоки кода — фрагменты полного файла. Открывайте main.py и изменяйте в нём соответствующий участок.
Корабль летит сам
Проверьте on_key_release(): при отпускании клавиши соответствующий флаг должен стать False.
Скорость зависит от компьютера
В on_update() сдвиг умножается на delta_time — время с прошлого кадра.