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

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

ЭтапВремяЧто делаем
Орг. момент5 минИстория «Добыча с умом»
Теория15 минРуды, return, алгоритм шахтёра
Интерактив15 минЗакрепляем понятия
Мини-проект: шаги 1–425 минПеременные, chooseDirection(), digStep()
Мини-проект: шаги 5–725 минЦикл «пока», возврат на базу
Бонус и итоги5 минДополнения, рефлексия
Итого90 мин—

1 Сюжет: Добыча с умом

⛏️ Обычный шахтёр копает прямо вниз — и часто пропускает богатые жилы руды.

Шахтёр-стратег действует иначе: перед каждым ударом кирки он сканирует 3 блока впереди — слева, по центру и справа. Если видит уголь, железо или алмаз — копает туда. Если руды нет — спускается вниз.

Когда рюкзак полон — агент возвращается на базу по сохранённым координатам.

🔍 chooseDirection() → ⛏️ digStep() → 📊 depth + oreCount → 🏠 домой, если полон инвентарь
🔗 Связь с прошлыми занятиями: копание мы учили в 2.3, координаты — в 3.1–3.3, функции — в 4.1, мини-проект — в 4.2. Сегодня добавляем return — функция «отдаёт» результат!

2 Руды, которые ищет агент

В нашем проекте «ценные» блоки — это руда. Агент проверяет их ID (номер блока в Minecraft):

🪨
Уголь
ID 16
⚙️
Железо
ID 15
💎
Алмаз
ID 56
🧱
Камень
ID 1 — копаем
⬇️
Нет руды
копаем вниз

Три блока «впереди» — схема

Агент смотрит вперёд. Мы проверяем три клетки на уровне ног:

~−1 ~−1 ~1
слева
~0 ~−1 ~1
вперёд
~1 ~−1 ~1
справа
🤖 Агент
Идея проектаБлоки MakeCode
Переменныеdepth (глубина), oreCount (найдено руды)
Условиеесли ID блока = 16 или 15 или 56 → копать туда
Функция с returnchooseDirection → вернуть «вперёд» / «влево» / «вправо» / «вниз»
Главный циклпока depth < 30 — бурение продолжается
База (абсолютные координаты)В начале сохранить baseX, baseY, baseZ → телепорт домой

3 Новое: функция возвращает значение (return)

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

📤 return (вернуть) — в конце функции блок вернуть отдаёт текст или число тому, кто вызвал функцию.

Пример: направление = вызвать chooseDirection — переменная получит «вперёд», «влево», «вправо» или «вниз».
шахтер_алгоритм.txt
-- При команде чата "шахта":
depth = 0
oreCount = 0
baseX, baseY, baseZ = позиция агента (абсолютные)

пока depth < 30:
    направление = вызвать chooseDirection
    вызвать digStep направление
    depth = depth + 1
    если инвентарь полон → телепорт (baseX, baseY, baseZ)

сказать "Глубина: " + depth + ", руда: " + oreCount

-- Функция chooseDirection:
если впереди руда → вернуть "вперёд"
иначе если слева руда → вернуть "влево"
иначе если справа руда → вернуть "вправо"
иначе → вернуть "вниз"
💡 Упрощение: на первом проходе достаточно проверить только блок впереди (~0 ~−1 ~1). Бонус — добавить сканирование слева и справа.

4 Интерактив: закрепляем

💎 Что считаем рудой?

К каким блокам агент должен «потянуться» в первую очередь?

Уголь, железо или алмаз
Только блок травы
Вода и лава

📤 Зачем нужен return?

Что делает блок вернуть "влево" в функции chooseDirection?

Удаляет функцию из программы
Отдаёт результат «влево» тому, кто вызвал функцию
Поворачивает агента на 360°

⬇️ Нет руды впереди

Агент проверил 3 блока — нигде нет угля, железа и алмаза. Куда копать?

Остановиться и ждать
Копать вниз
Телепортироваться на небо

📋 Порядок одного шага бурения

Перетащи шаги в правильном порядке:

  • Увеличить depth на 1
  • направление = вызвать chooseDirection()
  • Вызвать digStep(направление)

⛏️ Мини-проект: «Шахтёр-стратег»

Выполнено шагов: 0 из 12

Педагог может подготовить участок с камнем и несколькими жилами руды (Creative → расставить блоки). Или копай в обычном мире. Собирай проект по шагам.

1 Подготовка и переменные

Координаты базы: блоки Positions → «позиция агента по X / Y / Z» (абсолютные числа). Сохрани их в переменные при старте программы.

2 Функция isOre() — есть ли руда?

Можно обойтись без отдельной функции: три проверки если ID блока в ~0 ~−1 ~1 = 16 прямо в chooseDirection. Функция isOre — для аккуратного кода.

3 Функция chooseDirection() — с return!

4 Функция digStep(направление)

После разрушения руды: изменить oreCount на 1. Для тоннеля высотой 2 блока: сначала разруши блок на уровне головы, потом на уровне ног (как в занятии 2.3).

5 Команда «шахта» и цикл «пока»

Блок «задать переменной значение вызова функции» — в Переменные. Цикл остановится, когда depth станет 30.

6 Возврат на базу и запуск

✅ Готово? Покажи преподавателю шахту и объясни, как chooseDirection выбирает путь и зачем нужны baseX, baseY, baseZ.

⭐ Бонусные задания

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

1. Зачем переменная depth?

2. Что делает chooseDirection()?

3. Когда главный цикл бурения останавливается?

4. Зачем сохранять baseX, baseY, baseZ?

5. Как запустить «Шахтёр-стратег»?

💭 Рефлексия

🤖
Спроси Алису (ИИ-помощник)

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

💬 Нажми на любой вопрос — откроется Алиса.