Цикл while
Цикл for хорош, когда заранее знаешь количество повторений. Но что если нужно копать, пока не кончится топливо? Или ждать, пока игрок не нажмёт кнопку? Количество повторений заранее неизвестно.
Для таких задач используется цикл while — он выполняется пока условие истинно.
Базовый синтаксис
Пример: ждём, пока перед черепашкой не появится блок.
Как это работает
Перед каждым повторением цикл проверяет условие. Если оно истинно — выполняется тело. Если ложно — цикл завершается и программа идёт дальше.
Бесконечный цикл и ошибка Too long without yielding
Если условие никогда не станет ложным — цикл идёт вечно. Это не всегда плохо (мы специально делаем такие циклы с while true), но есть важное правило.
В ComputerCraft, если программа долго не "отдаёт управление" системе, она получает ошибку:
Too long without yielding
"Отдать управление" — значит вызвать функцию, которая делает паузу: sleep(), команду движения черепашки, чтение ввода или событий.
Прерывание цикла через break
Иногда нужно выйти из цикла досрочно, не дожидаясь конца условия. Для этого — break:
break мгновенно выходит из ближайшего цикла. Код после цикла продолжает выполняться.
while как "умный" цикл с датчиками
В отличие от for, который просто считает, while естественно работает с любыми сенсорами и состояниями:
while vs for — когда что использовать
Используй for | Используй while |
|---|---|
| Знаешь точное количество шагов | Не знаешь, сколько будет шагов |
| Перебираешь список | Ждёшь события или условия |
| Простой счётчик | Сложная логика остановки |
🚀 Задания
Задание 1
Напиши программу: черепашка идёт вперёд, пока turtle.getFuelLevel() > 0. Каждый шаг выводит оставшееся топливо. После выхода из цикла — сообщение о том, сколько шагов было сделано.
Задание 2
Напиши ожидание рычага: программа ждёт сигнала редстоуна сзади ("back"). Каждые 2 секунды выводит "Жду сигнала...". Когда сигнал появляется — выводит "Сигнал получен, запускаюсь!".
Задание 3
Напиши программу-бурильщик: черепашка копает вертикальный колодец вниз. Останавливается, когда встречает "minecraft:bedrock" или когда топливо падает ниже 20. Выводит глубину и причину остановки.
Задание 4 Исправь этот код — он будет зависать. Добавь всё необходимое, чтобы он работал корректно:
Задание 5 Напиши цикл, который копает вперёд и автоматически объезжает препятствия: если прямой путь заблокирован — поворачивает вправо и пробует снова. Если и там заблокировано — поворачивает ещё раз. Максимум 4 попытки, потом останавливается.