🦊 FoxWiki

Цикл while

Цикл for хорош, когда заранее знаешь количество повторений. Но что если нужно копать, пока не кончится топливо? Или ждать, пока игрок не нажмёт кнопку? Количество повторений заранее неизвестно.

Для таких задач используется цикл while — он выполняется пока условие истинно.


Базовый синтаксис

Редактор Lua
1
2
3

Пример: ждём, пока перед черепашкой не появится блок.

Редактор Lua
1
2
3
4
5

Как это работает

Перед каждым повторением цикл проверяет условие. Если оно истинно — выполняется тело. Если ложно — цикл завершается и программа идёт дальше.

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11

Бесконечный цикл и ошибка Too long without yielding

Если условие никогда не станет ложным — цикл идёт вечно. Это не всегда плохо (мы специально делаем такие циклы с while true), но есть важное правило.

В ComputerCraft, если программа долго не "отдаёт управление" системе, она получает ошибку:

Too long without yielding

"Отдать управление" — значит вызвать функцию, которая делает паузу: sleep(), команду движения черепашки, чтение ввода или событий.

Редактор Lua
1
2
3
4
5
6
7
8
9

Прерывание цикла через break

Иногда нужно выйти из цикла досрочно, не дожидаясь конца условия. Для этого — break:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14

break мгновенно выходит из ближайшего цикла. Код после цикла продолжает выполняться.


while как "умный" цикл с датчиками

В отличие от for, который просто считает, while естественно работает с любыми сенсорами и состояниями:

Редактор Lua
1
2
3
4
5
6
7
Редактор Lua
1
2
3
4
5
6

while vs for — когда что использовать

Используй forИспользуй while
Знаешь точное количество шаговНе знаешь, сколько будет шагов
Перебираешь списокЖдёшь события или условия
Простой счётчикСложная логика остановки

🚀 Задания

Задание 1 Напиши программу: черепашка идёт вперёд, пока turtle.getFuelLevel() > 0. Каждый шаг выводит оставшееся топливо. После выхода из цикла — сообщение о том, сколько шагов было сделано.

Задание 2 Напиши ожидание рычага: программа ждёт сигнала редстоуна сзади ("back"). Каждые 2 секунды выводит "Жду сигнала...". Когда сигнал появляется — выводит "Сигнал получен, запускаюсь!".

Задание 3 Напиши программу-бурильщик: черепашка копает вертикальный колодец вниз. Останавливается, когда встречает "minecraft:bedrock" или когда топливо падает ниже 20. Выводит глубину и причину остановки.

Задание 4 Исправь этот код — он будет зависать. Добавь всё необходимое, чтобы он работал корректно:

Редактор Lua
1
2
3
4
5
6

Задание 5 Напиши цикл, который копает вперёд и автоматически объезжает препятствия: если прямой путь заблокирован — поворачивает вправо и пробует снова. Если и там заблокировано — поворачивает ещё раз. Максимум 4 попытки, потом останавливается.

НазадСчётчик в цикле while
ДалееЦиклы с датчиками