🎯 Цели занятия
- Разобрать алгоритм автомата: постройка → прокрутка → проверка → приз
- Использовать список блоков,
randint,globalдля координат слотов - Применить несколько функций и два события: чат и предмет
- Собрать проект по подсказкам; полный код — под паролем преподавателя
📋 План занятия
| Этап | Время | Что делаем |
|---|---|---|
| Алгоритм | 20 мин | Схема и роли функций |
| Разбор API | 15 мин | on_chat, on_item_interacted, agent |
| Самостоятельно | 45 мин | Пишем с подсказками |
| Итоги | 10 мин | Играем и рефлексия |
| Итого | 90 мин | — |
1 Как работает автомат
Это игровой автомат в мире Minecraft: три «окна» с блоками. Сначала ты строишь автомат, потом крутишь его железной лопатой. Программа быстро меняет блоки в слотах, агент «смотрит» результат и вызывает функцию check_win, если три блока совпали.
- Команда «старт» (
player.on_chat→on_chat): сообщение игроку; цикл строит корпус 5×5 из WOOL рядом с игроком; вычисляются три позиции слотов; в слоты ставится «дефолтный» блок; игроку выдаётся железная лопата. - Использование лопаты (
player.on_item_interacted(IRON_SHOVEL, …)): сообщение «прокрутка»; цикл ~10 раз ставит в каждый слот случайный блок из спискаitems(эффект барабана). - Проверка агентом: агент телепортируется к каждому слоту и через
agent.inspect_block(FORWARD)узнаёт, какой блок в «окне». - Сравнение: если три блока одинаковые — вызывается
check_win(block1, block2, block3), иначе — «Повезёт в другой раз». - check_win: отдельная функция с
if / elif— разные призы за алмазы, изумруды, золото; любой другой одинаковый набор — мягкий комфорт-приз.
on_chat их сохраняют в переменные с global, чтобы on_item_interacted их видел.
items = [DIRT, GOLD_BLOCK, DIAMOND_BLOCK, EMERALD_BLOCK]. Случайный индекс в Python: randint(0, len(items) - 1) — не items.length (это из JavaScript).
2 Какие функции нужны
| Функция | Когда вызывается |
|---|---|
on_chat() | Игрок пишет в чат «старт» |
on_item_interacted() | Игрок использует железную лопату (ПКМ) |
check_win(b1, b2, b3) | Три одинаковых блока после прокрутки |
Внизу файла — две регистрации событий: player.on_chat("старт", on_chat) и player.on_item_interacted(IRON_SHOVEL, on_item_interacted).
Если непонятны global или randint — короткий вопрос.
🛠️ Собери автомат сам (с подсказками)
Не копируй решение сразу — иди по шагам. Тестируй в своём мире.
items, default_slot (бревно), f_s, s_s, t_s = world(0,0,0) — заготовки координат слотов.
Двойной цикл 5×5: blocks.place(WOOL, positions.add(player.position(), pos(3, i, j))).
global f_s, s_s, t_s. Три позиции на «этаже» i=2, j=1,2,3 → .to_world() сохранить в f_s, s_s, t_s. Поставить default_slot в каждый слот.
mobs.give(mobs.target(NEAREST_PLAYER), IRON_SHOVEL, 1) и player.on_chat("старт", on_chat).
Цикл 10 раз: в f_s, s_s, t_s ставить items[randint(0, len(items)-1)].
Телепорт к слоту + inspect_block(FORWARD) три раза; agent.teleport_to_player() в конце.
Если три блока равны — check_win(...). Внутри — призы за DIAMOND, EMERALD, GOLD и ветка «else».
Чат старт → лопата → несколько прокруток. Покажи преподавателю джекпот или «не повезло».
🔐 Готовое решение — если застрял или разрешил преподаватель.
📝 Проверь себя
1. Что запускает постройку автомата?
2. Зачем global f_s, s_s, t_s?