Циклы
Тот же jump, только стрелка смотрит вверх — и программа начинает повторять кусок себя
Цикл в mlog — не отдельная инструкция и не особая запись. Это тот же jump, у которого
стрелка смотрит вверх: на строку, которая уже выполнялась.
Пример складывает числа от нуля до четырёх. Нажмите «шаг» семнадцать раз — или один раз «пуск», а потом паузу.
итог станет десяткой: 0 + 1 + 2 + 3 + 4. счёт остановится на пятёрке — на том значении,
при котором условие перестало быть верным.
Три части цикла
Заголовок раздела «Три части цикла»| Часть | В примере | Зачем |
|---|---|---|
| подготовка | set счёт 0, set итог 0 |
обнулить то, что цикл будет накапливать |
| тело | op add итог итог счёт |
ради чего всё затевалось |
| шаг и проверка | op add счёт счёт 1, jump |
сдвинуться и решить, нужна ли ещё итерация |
Проверка здесь стоит в конце, и это важно: тело выполняется хотя бы раз, даже если условие было ложным с самого начала. Такой цикл собирается сам собой, и чаще всего нужен именно он.
Если тело не должно выполняться ни разу — проверку ставят в начало: переход вперёд,
за конец цикла, а в конце тела — безусловный переход назад. Две строки jump вместо одной.
Подготовка обязательна
Заголовок раздела «Подготовка обязательна»Программа выполняется в бесконечном цикле, и вторая итерация начинается не с чистого листа: в переменных лежит
то, что осталось от первого. Поэтому set счёт 0 — не формальность, а часть цикла.
Вечный цикл игру не вешает
Заголовок раздела «Вечный цикл игру не вешает»Цикл, из которого нет выхода, — не катастрофа. Процессор выполняет за тик ровно столько
инструкций, сколько ему положено (@ipt: две у микропроцессора, восемь у логического,
двадцать пять у гиперпроцессора), и отдаёт управление игре. Он будет крутиться вечно,
но игра при этом идёт как обычно.
Плохо другое: программа не дойдёт до остальных строк. Всё, что стоит ниже цикла, не выполнится больше никогда — процессор занят.
Сколько тиков занимает цикл
Заголовок раздела «Сколько тиков занимает цикл»Восемнадцать инструкций у микропроцессора — это девять тиков, примерно седьмая часть секунды. На «пуске» такой цикл не разглядеть, поэтому его и проходят шагами.
Чем длиннее цикл, тем реже программа возвращается к началу. Это не ошибка, а цена: у логики в Mindustry нет параллельности, и единственный способ успевать больше — либо процессор побыстрее, либо цикл покороче.
Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.