🎯 Цели занятия

📋 План занятия

Этап занятияВремяЧто делаем
Кто такой Агент-шахтёр10 минЗнакомство с добычей ресурсов
Команды для добычи12 минИзучаем destroy и give
Проверка блоков10 минКак определить, что за блок перед Агентом
Интерактив: Сопоставление8 минЗакрепляем команды
AI-помощник5 минСпроси у Алисы
Мини-проект: Шахта40 минКопаем шахту и собираем руду
Итоги и рефлексия5 минПроверяем знания
Итого90 мин—

1 Команды для добычи ресурсов

Агент может не только строить, но и добывать ресурсы! Для этого есть специальные команды:

🔨 Разрушить блок
agent.destroy(НАПРАВЛЕНИЕ)
Разрушает блок в указанном направлении
Пример: agent.destroy(DOWN)
🎁 Выдать предмет
agent.give(ПРЕДМЕТ, КОЛИЧЕСТВО, СЛОТ)
Добавляет предмет прямо в инвентарь Агента
Пример: agent.give(IRON_INGOT, 1, 1)
🔍 Проверить блок
agent.inspect(НАПРАВЛЕНИЕ)
Возвращает информацию о блоке перед Агентом
Пример: agent.inspect(DOWN)
🗑️ Выбросить предмет
agent.drop(НАПРАВЛЕНИЕ)
Выбрасывает предмет из инвентаря Агента
Пример: agent.drop(FORWARD)
⚠️ Очень важно! Когда Агент ломает блок командой destroy, блок НЕ выпадает в мир, как у игрока — он просто исчезает! Поэтому команда agent.collect() здесь не поможет.

Чтобы Агент «положил добычу к себе в инвентарь», нужно использовать agent.give() — она добавляет предмет напрямую, без выпадения в мир.

2 Блоки и предметы для инвентаря

В Minecraft есть разные блоки. Некоторые из них — обычные (камень, земля), а некоторые — ценные (руды). Вот таблица с основными блоками и предметами:

🪨
Камень
STONE (ID: 1)
🟫
Земля
DIRT (ID: 3)
⬛
Уголь
COAL (ID: 16)
⬜
Железная руда
IRON_ORE (ID: 15)
🔩
Железный слиток
IRON_INGOT (ID: 265)
🟨
Золотая руда
GOLD_ORE (ID: 14)
💎
Алмаз
DIAMOND (ID: 264)
💚
Изумруд
EMERALD (ID: 388)
💡 Важно различать! Когда добываешь руду — в инвентарь попадает сама руда (IRON_ORE). Но если ты хочешь получить слиток — нужно выдать IRON_INGOT. В нашем проекте Агент будет выдавать сразу готовые слитки и драгоценности, чтобы они были полезны для крафта!

Проверка блока перед добычей

Чтобы Агент добывал только ценные блоки, нужно проверить, что за блок перед ним. Для этого используется команда agent.inspect(), которая возвращает ID блока.

check_block.py
# Проверяем блок перед Агентом
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)  # Просто копаем

🔑 Сопоставь команду и её действие

Выбери правильное действие для каждой команды Агента-шахтёра:

agent.destroy(DOWN)
agent.give(IRON_INGOT, 1, 1)
agent.inspect(DOWN)
agent.drop(FORWARD)
🤖
Спроси Алису (ИИ-помощник)

Нажми на вопрос — Алиса ответит тебе прямо сейчас!

💬 Нажми на любой вопрос — откроется Алиса с готовым ответом.
💡 Хочешь спросить что-то своё? Открой Алису сам и задай любой вопрос про Агента-шахтёра.
Просто скажи: «Алиса, как научить Агента добывать алмазы в Minecraft?»
⚠️ Никогда не отправляй Алисе личные данные (адрес, телефон, пароли) — вопросы обсуждай только с родителями и преподавателем.

3 Мини-проект: Шахта с ценными рудами

Теперь давай создадим программу, которая научит Агента копать шахту и собирать только ценные ресурсы!

🎯 Задача: Агент должен копать шахту вниз, проверять каждый блок, и если находит ценную руду (железо, золото, алмазы, изумруды) — разрушать её и добавлять в инвентарь через agent.give(). Обычные блоки (камень, земля) просто разрушать.
miner.py
# Программа для Агента-шахтёра
# Агент копает вниз и добавляет ценные руды в инвентарь

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 это можно сделать так: проверяем слот, если там железная руда — забираем её и выдаём железный слиток.

smelt.py
# Бонус: программа для переплавки руды
# Агент проверяет инвентарь и заменяет руду на слитки

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. Напиши программу для Агента-шахтёра.

Выполнено шагов: 0 из 6
Шаг 1 Копаем вниз

Напиши программу, в которой Агент копает вниз на 20 блоков, разрушая каждый блок.

Шаг 2 Выдаём камень в инвентарь

Добавь команду agent.give(STONE, 1, 1) после разрушения обычного блока, чтобы Агент складывал камень в инвентарь.

Шаг 3 Проверяем руду

Добавь проверку блока с помощью agent.inspect(DOWN). Если это железная руда (ID 15) — выведи сообщение «Нашёл железо!» и выдай RAW_IRON.

Шаг 4 Собираем ценные ресурсы

Добавь проверку для алмазов (ID 56) и золота (ID 14). При обнаружении — выводи сообщение и выдавай DIAMOND или RAW_GOLD в инвентарь.

Шаг 5 Тестирование

Запусти программу в Minecraft и проверь, правильно ли Агент копает шахту и собирает руду в инвентарь.

🚀 Бонус Переплавка руды

Напиши команду чата переплавь, которая проверяет все слоты инвентаря Агента и заменяет железную руду на железные слитки, а золотую — на золотые.

📝 Проверь себя

1. Какая команда разрушает блок перед Агентом?

2. Какая команда добавляет предмет в инвентарь Агента?

3. Какая команда проверяет, какой блок находится перед Агентом?

4. Что произойдёт, если Агент сломает блок командой destroy?

5. Что делает команда agent.drop()?

💭 Рефлексия

Напиши, что тебе понравилось, а что было сложно: