🎯 Цели занятия
- Научиться реагировать на использование предмета в Python
- Закрепить абсолютные координаты и позицию игрока
- Использовать тройной цикл для постройки объёма 16×16×16
- Применить случайные числа для «странных» блоков
- Собрать мини-проект «Upside Down» своими руками (без готового кода с первого экрана)
📋 План занятия
| Этап | Время | Что делаем |
|---|---|---|
| Идея проекта | 10 мин | Сюжет и правила безопасности в мире |
| Новые команды | 15 мин | on_item_interacted, randint, block_by_id |
| Алгоритм чанка | 15 мин | Координаты + тройной цикл |
| Интерактив | 15 мин | Сопоставление и порядок шагов |
| Мини-проект | 30 мин | Пишем программу по подсказкам |
| Итоги | 5 мин | Викторина и рефлексия |
| Итого | 90 мин | — |
- Работай в своём отдельном мире (или один ученик — один мир). Если несколько человек запустят эффект в одном мире, игра может сильно лагать.
- В чате могут появляться сообщения вроде «этот блок является предметом и его нельзя поставить» — это нормально: часть ID — не блоки. На занятии можно не исправлять, программа всё равно строит куб.
- Готовое решение — только через кнопку с паролем от преподавателя. Сначала попробуй сам!
1 Событие: использование предмета
Раньше мы запускали код по команде в чате. Здесь код запускается, когда игрок использует конкретный предмет.
on_item_interacted, когда игрок использует зачарованное яблоко. В начале файла нужна функция с этим именем (без параметров).get_value(Axis.X) и т.д.blocks.place.def on_item_interacted():
player.say("Что-то странное начинается...")
player.on_item_interacted(ENCHANTED_APPLE, on_item_interacted)
2 Строим куб 16×16×16
Чанк в Minecraft часто ассоциируют с размером 16 блоков. Нам нужно перебрать все комбинации x, y, z от 0 до 15 — для этого подходит тройной вложенный цикл for.
for x in range(16):
for y in range(16):
for z in range(16):
# здесь: выбрать случайный блок и поставить его в world(...)
pass
Где строить? Возьми координаты игрока и сдвинь угол куба, например на +10 по X и +10 по Z — чтобы куб появился рядом, а не внутри игрока. Каждый блок внутри цикла:
world(posX + x, posY + y, posZ + z)
world() — абсолютные координаты. Угол куба считаем один раз; в цикле только прибавляем x, y, z.
🔑 Сопоставь команду и смысл
🧩 Расставь шаги алгоритма
Выбери правильный порядок (1 — первый, 5 — последний):
Подсказка: в Python сначала пишут функцию, потом регистрируют событие внизу файла.
Нажми на вопрос — Алиса ответит тебе прямо сейчас!
«Алиса, как сделать тройной цикл for в Python?»
🛠️ Мини-проект: собери программу сам
Открой Python в Minecraft (C). Не копируй готовое решение — иди по шагам. Отмечай галочкой, что уже сделал.
Создай функцию on_item_interacted без параметров. Внутри можно написать player.say("..."), чтобы проверить, что яблоко «слышит» код.
После функции добавь регистрацию: ENCHANTED_APPLE и имя функции. Используй яблоко в игре — должно появиться сообщение.
Сохрани player.position(), вычисли posX, posY, posZ через get_value(Axis.X) и сдвинь X и Z вперёд (например +10).
Три вложенных for с range(16). Счётчики: x, y, z.
Внутри цикла: block = blocks.block_by_id(randint(0, 800)). Ошибки в чате про «предмет» можно игнорировать.
blocks.place(block, world(posX + x, posY + y, posZ + z)). Запусти один раз в своём мире — куб большой, подожди завершения.
Покажи результат преподавателю. Что получилось красиво? Что бы ты изменил (размер, смещение, диапазон randint)?
🔐 Готовое решение — только если застрял или преподаватель разрешил.
📝 Проверь себя
1. Сколько блоков в кубе 16×16×16?
2. Какой предмет запускает наш проект?
3. Зачем сдвигаем posX и posZ от позиции игрока?
4. Почему лучше тестировать в своём мире?