10+ · базовый Python · 6 задач / 60 минут

Звезда и Метеор: учителю

Практикум по сборке оконной 2D-аркады. Ученик уже видел переменные, if и функции. Мы показываем, как они становятся координатами, движением и правилами игры. С первого блока пишем код.

Что это за проект

Формат

Графическая аркада Python + Arcade: один экран, космонавт, звезда и метеор. Стрелки двигают героя, касания определяют исход, R перезапускает раунд. Запуск на компьютере.

Зачем

Связать знакомый синтаксис с игровыми задачами. Разделить ввод, обновление и рисование; увидеть роль координат, скорости, функций и условий.

Результат ученика

Работающий game.py. Ученик находит блок движения, объясняет проверку касания и меняет скорость, стартовую позицию или маршрут.

Реалистичный темп

60 минут при готовой среде и использовании заготовок для служебного кода. Если набор или новая тема требуют больше времени, разделите после третьей задачи на два занятия.

Начало занятия

«Сейчас покажу игру, которую мы соберём за шесть задач. В каждой добавим один работающий блок и проверим его. Начинаем с окна и фона».

Подготовьте до занятия

  1. Пройдите настройку среды. На каждом компьютере откройте finished.py через редактор из окружения с Arcade.
  2. Скачайте и распакуйте учебный ZIP. game.py и assets должны оставаться рядом. Оконная игра не запускается в браузерной IDE.
  3. Проверьте стрелки, остановку при отпускании, столкновение, R и победу. В учебной версии раунд начинается сразу, без меню.
  4. Держите полные файлы lessons/lesson-01.py … lesson-06.py. При отставании копируйте нужное состояние в game.py в корне проекта и продолжайте с правила, которое разбираете.
  5. Перед стартом спросите, что делают переменная, if и функция. Если это новые темы, часовой формат нужно расширить.

План на час: шесть задач

В каждом блоке: коротко покажите результат, добавьте код по подзадачам, запустите и задайте один вопрос. Самостоятельные модификации можно оставить на продолжение.

01

Окно и космический фон →

00:00–08:00 · 8 минут. Открыть окно Arcade 1280 × 800 и нарисовать фон из PNG.

Покажите: Покажите готовую игру за 30 секунд. Затем создайте окно, загрузите PNG и подключите draw. Обратите внимание на последнюю строку arcade.run().

  1. Создай окно
  2. Загрузи фон
  3. Нарисуй кадр и запусти

Спросите: Почему картинку загружаем один раз, а рисуем много раз?

Ожидаемый ответ: Файл достаточно прочитать при подготовке. Каждый новый кадр должен заново показать изображение.

Типичная трудность: FileNotFoundError: проверьте распаковку, assets/background.png и запуск из папки проекта. ModuleNotFoundError: открыт Python без Arcade.

Готово, когда: В отдельном окне виден фон; в Shell нет ошибки загрузки файла.

Реплики и код блока 1 →
02

Добавляем космонавта →

08:00–15:00 · 7 минут. Разместить персонажа на фоне и управлять его положением через координаты.

Покажите: Добавьте текстуру и две координаты. Покажите разницу между LBWH для фона и XYWH для персонажа. Вынесите повторяемое рисование в функцию.

  1. Загрузи PNG и задай позицию
  2. Сделай функцию рисования объекта
  3. Покажи героя поверх фона

Спросите: Что изменится при увеличении y на 100?

Ожидаемый ответ: Персонаж поднимется на 100 пикселей; горизонтальная позиция останется прежней.

Типичная трудность: Если персонаж исчез, проверьте вызов после фона, имя файла и попадание координат в окно.

Готово, когда: Персонаж виден на фоне и меняет положение после изменения x или y.

Реплики и код блока 2 →
03

Плавное управление →

15:00–28:00 · 13 минут. Двигать героя стрелками, останавливать при отпускании и ограничить поле.

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

  1. Запомни нажатия и отпускания
  2. Обновляй координаты
  3. Ограничь поле
  4. Подключи события

Спросите: Почему движение умножается на delta_time, а не просто на один шаг за кадр?

Ожидаемый ответ: Так скорость привязана к секундам, а не к количеству обновлений на конкретном компьютере.

Типичная трудность: Нет остановки — проверьте key_released и его подключение. UnboundLocalError — проверьте global. Не ставьте while True вокруг arcade.run().

Готово, когда: Удержание даёт плавное движение; отпускание останавливает; выйти за поле нельзя.

Реплики и код блока 3 →
04

Цель и движущееся препятствие →

28:00–38:00 · 10 минут. Добавить звезду и метеор, который патрулирует горизонтальную дорожку.

Покажите: Добавьте две текстуры и вызовы draw_image. После проверки сцены включите патруль и дождитесь обоих разворотов.

  1. Создай второй и третий объекты
  2. Нарисуй оба объекта
  3. Запусти патруль

Спросите: Что будет, если у правой границы оставить положительную скорость?

Ожидаемый ответ: Метеор не полетит обратно влево; будет упираться в правую границу.

Типичная трудность: Пока касания ничего не делают — проверка будет в следующем блоке. Если метеор не движется, проверьте global и расположение кода внутри update.

Готово, когда: На экране три объекта; метеор разворачивается у обеих границ; звезда остаётся на месте.

Реплики и код блока 4 →
05

Столкновения и результат →

38:00–50:00 · 12 минут. Завершать попытку победой или проигрышем и останавливать движение.

Покажите: Разберите touches на двух парах координат. Добавьте состояние и ранний выход; отдельно покажите проигрыш и победу.

  1. Добавь состояние и подпись
  2. Опиши проверку близости
  3. Выбери исход и останови правила
  4. Покажи результат

Спросите: Почему return стоит в update, а не в draw?

Ожидаемый ответ: Нужно остановить изменение мира, сохранив рисование результата.

Типичная трудность: Если исход меняется повторно, ранний return стоит ниже проверок. Если надпись не видна, проверьте message.draw() и порядок рисования.

Готово, когда: Касание метеора даёт проигрыш, звезды — победу; после исхода герой и метеор стоят.

Реплики и код блока 5 →
06

Перезапуск и проверка игры →

50:00–60:00 · 10 минут. Добавить R для новой попытки и проверить весь игровой цикл.

Покажите: Добавьте restart и R. Пройдите весь проверочный маршрут, затем попросите ученика изменить старт или скорость и объяснить, где ещё нужно поправить значения.

  1. Собери сброс в функцию
  2. Подключи R
  3. Проверь цикл целиком

Спросите: Почему недостаточно вернуть только координаты героя?

Ожидаемый ответ: Метеор, его направление, состояние результата и старый ввод тоже влияют на новый раунд.

Типичная трудность: Если новая попытка сразу завершена, забыли playing. Если герой летит сам, проверьте keys.clear(). Если меняли старт, сверьте значения в двух местах.

Готово, когда: Оба исхода проверены; R работает после каждого; старая нажатая клавиша не переносится в новую попытку.

Реплики и код блока 6 →

Как объяснять код по блокам

  1. Настройки и текстуры. Вверху задаём размеры, координаты и скорости. PNG загружаем один раз после создания окна. Заглавные имена настроек — соглашение Python.
  2. draw. Очищает кадр и рисует: сначала фон, затем объекты и результат. Положение объектов здесь не меняем. draw_image — обычная написанная нами функция над Arcade.
  3. События клавиатуры. Нажатие добавляет код в keys, отпускание убирает. Множество хранит несколько направлений без повторов. При потере фокуса очищаем ввод.
  4. update(delta_time). Считает новую позицию: скорость × секунды. Arcade вызывает функцию регулярно; собственный while True не нужен. global разрешает присваивать новые значения координатам уровня файла.
  5. Касание и состояние. touches возвращает True или False. Сравниваем расстояния по двум осям; оба условия должны выполниться. state выбирает playing, won или lost, а ранний return останавливает расчёты после исхода.
  6. restart. Сбрасывает изменяемые данные раунда и старый ввод. Начальные координаты и скорость должны совпадать с настройками сверху.

Вся учебная логика и рисование находятся в одном game.py, с прямыми вызовами Arcade. Отдельные служебные модули для этой версии не нужны. Классы можно ввести позже, когда объектов станет больше.

Упрощения для первого занятия: прямоугольная проверка близости центров вместо контура PNG; диагональ быстрее движения по одной оси. Меню, пауза, таймер, звуки и эффекты — возможные следующие задачи. Расширенный прототип скачивается отдельно.

Проверка понимания и завершение

Закончите коротким показом игры. Для следующей встречи выберите одну механику: WASD, счётчик времени или несколько звёзд. Если времени мало, сначала доведите шесть основных задач до рабочего результата.

Оглавление →Сценарий записи →Материалы ↓