🎯 Цели занятия
- Изучить команды для добычи блоков Агентом
- Понять, как добавлять добытые блоки в инвентарь Агента
- Познакомиться с проверкой типа блока перед добычей
- Создать программу для автоматической добычи ценных руд
- Развить навыки работы с условиями и циклами в Python
📋 План занятия
| Этап занятия | Время | Что делаем |
|---|---|---|
| Кто такой Агент-шахтёр | 10 мин | Знакомство с добычей ресурсов |
| Команды для добычи | 12 мин | Изучаем destroy и give |
| Проверка блоков | 10 мин | Как определить, что за блок перед Агентом |
| Интерактив: Сопоставление | 8 мин | Закрепляем команды |
| AI-помощник | 5 мин | Спроси у Алисы |
| Мини-проект: Шахта | 40 мин | Копаем шахту и собираем руду |
| Итоги и рефлексия | 5 мин | Проверяем знания |
| Итого | 90 мин | — |
1 Команды для добычи ресурсов
Агент может не только строить, но и добывать ресурсы! Для этого есть специальные команды:
agent.destroy(DOWN)agent.give(IRON_INGOT, 1, 1)agent.inspect(DOWN)agent.drop(FORWARD)destroy, блок НЕ выпадает в мир, как у игрока — он просто исчезает! Поэтому команда agent.collect() здесь не поможет.Чтобы Агент «положил добычу к себе в инвентарь», нужно использовать
agent.give() — она добавляет предмет напрямую, без выпадения в мир.
2 Блоки и предметы для инвентаря
В Minecraft есть разные блоки. Некоторые из них — обычные (камень, земля), а некоторые — ценные (руды). Вот таблица с основными блоками и предметами:
Проверка блока перед добычей
Чтобы Агент добывал только ценные блоки, нужно проверить, что за блок перед ним. Для этого используется команда agent.inspect(), которая возвращает ID блока.
# Проверяем блок перед Агентом
block = agent.inspect(DOWN)
if block == 15: # ID железной руды
player.say("Нашёл железную руду!")
agent.destroy(DOWN)
agent.give(IRON_INGOT, 1, 1) # Кладём слиток в инвентарь!
elif block == 56: # ID алмазной руды
player.say("Нашёл алмазы!")
agent.destroy(DOWN)
agent.give(DIAMOND, 1, 1) # Кладём алмаз в инвентарь!
else:
agent.destroy(DOWN) # Просто копаем
🔑 Сопоставь команду и её действие
Выбери правильное действие для каждой команды Агента-шахтёра:
Нажми на вопрос — Алиса ответит тебе прямо сейчас!
Просто скажи: «Алиса, как научить Агента добывать алмазы в Minecraft?»
3 Мини-проект: Шахта с ценными рудами
Теперь давай создадим программу, которая научит Агента копать шахту и собирать только ценные ресурсы!
agent.give(). Обычные блоки (камень, земля) просто разрушать.
# Программа для Агента-шахтёра
# Агент копает вниз и добавляет ценные руды в инвентарь
def mine_shaft():
for i in range(20): # Копаем 20 блоков вниз
block = agent.inspect(DOWN) # Проверяем блок под Агентом
# Проверяем, ценная ли руда
if block == 15: # Железная руда
player.say("Нашёл железо!")
agent.destroy(DOWN)
agent.give(RAW_IRON, 1, 1) # Необработанный слиток в инвентарь
elif block == 14: # Золотая руда
player.say("Нашёл золото!")
agent.destroy(DOWN)
agent.give(RAW_GOLD, 1, 1) # Необработанный слиток в инвентарь
elif block == 56: # Алмазная руда
player.say("Нашёл алмазы!")
agent.destroy(DOWN)
agent.give(DIAMOND, 1, 1) # Алмаз в инвентарь
elif block == 133: # Изумрудная руда
player.say("Нашёл изумруды!")
agent.destroy(DOWN)
agent.give(EMERALD, 1, 1) # Изумруд в инвентарь
else:
agent.destroy(DOWN) # Обычный блок - просто копаем
agent.move(DOWN, 1) # Спускаемся на 1 блок вниз
player.say("Шахта готова!")
# Привязываем к команде чата
player.on_chat("шахта", mine_shaft)
⭐ Бонус: Переплавка руды
Агент может проверить свой инвентарь и «переплавить» руду — то есть заменить её на слиток. В Minecraft Education это можно сделать так: проверяем слот, если там железная руда — забираем её и выдаём железный слиток.
# Бонус: программа для переплавки руды
# Агент проверяет инвентарь и заменяет руду на слитки
def smelt_inventory():
# Проверяем каждый слот инвентаря (у Агента 27 слотов)
for slot in range(27):
item = agent.get_item(slot) # Получаем предмет из слота
# Если это железная руда (ID 15)
# Или если это необработанный слиток (ID 505)
if item == 15:
player.say("Переплавляю железо...")
agent.drop(1) # Выбрасываем руду
agent.give(IRON_INGOT, 1, slot) # Кладём слиток на то же место
# Если это золотая руда (ID 14)
# Или если это необработанный слиток (ID 506)
elif item == 14:
player.say("Переплавляю золото...")
agent.drop(1)
agent.give(GOLD_INGOT, 1, slot)
player.say("Переплавка завершена!")
player.on_chat("переплавь", smelt_inventory)
agent.get_item(slot) возвращает ID предмета в указанном слоте инвентаря Агента (от 0 до 26). Мы проходим по всем слотам, и если находим руду — заменяем её на слиток через drop + give.
🛠️ Практика: Создаём шахту
Открой редактор кода в Minecraft (клавиша C) и выбери Python. Напиши программу для Агента-шахтёра.
Напиши программу, в которой Агент копает вниз на 20 блоков, разрушая каждый блок.
Добавь команду agent.give(STONE, 1, 1) после разрушения обычного блока, чтобы Агент складывал камень в инвентарь.
Добавь проверку блока с помощью agent.inspect(DOWN). Если это железная руда (ID 15) — выведи сообщение «Нашёл железо!» и выдай RAW_IRON.
Добавь проверку для алмазов (ID 56) и золота (ID 14). При обнаружении — выводи сообщение и выдавай DIAMOND или RAW_GOLD в инвентарь.
Запусти программу в Minecraft и проверь, правильно ли Агент копает шахту и собирает руду в инвентарь.
Напиши команду чата переплавь, которая проверяет все слоты инвентаря Агента и заменяет железную руду на железные слитки, а золотую — на золотые.
📝 Проверь себя
1. Какая команда разрушает блок перед Агентом?
2. Какая команда добавляет предмет в инвентарь Агента?
3. Какая команда проверяет, какой блок находится перед Агентом?
4. Что произойдёт, если Агент сломает блок командой destroy?
5. Что делает команда agent.drop()?
💭 Рефлексия
Напиши, что тебе понравилось, а что было сложно: