Циклы
И так что есть цикл:
Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).
Грубо говоря: Повторение одного и того же алгоритма.
В Стелсе существует 3 типа циклов.
Просмотрим их по порядку.
1.
While do
Это цикл который выполняет алгоритм пока действительно какое-либо условие.
Пример:
Code: Select all
Program contrl_of_denger;
begin
while Dead = false do //Пока "Мертвость" чара - ложь делать
begin //Начало цикла
if (HP < MaxHP) then uosay('Guards');
wait(1000);// Задержка 1000мс (1 секунда)
end; //Конец цикла
end.
(Новая ф-ия Wait() - Он используется для задержки выполнения скрипта. Длинна задаеться в Мили Секундах.)
Данный пример - простейший скрипт. Чар будет просто стоять (пока он будет жив, Тоесть значение переменной чара Мертвость(Dead) = Ложи (False)), ничего не делать, но если его жизнь станет меньше чем его максимально возможная жизнь - он позовет охрану (скажет Guards).
Данный цикл используется чаще всего. Ведь главная задача практически любого (полезного) скрипта - Повторение одной и той же задачи.
2.
Repeat until
Дословно можно перевести
Повторять до тех пор пока не ...
К примеру. Вот приведенный выше скрипт с использованием данного цикла:
Code: Select all
Program contrl_of_denger;
begin
Repeat
if (HP < MaxHP) then uosay('Guards');
wait(5000);// Задержка 1000мс (1 секунда)
Until Dead;
end.
Вот и вся разница. То есть While do работает только тогда когда значение условия равно Истине (True), а Repeat until только когда значение условия равно Лжи (False). Разберемся подробнее.
В данном случае Условие - Dead = false (то есть - мертвость чара - ложь) так как то что мертвость чара - ложь является истинной цикл выполняться.
В следующем перемере
Так как Мертвость - Ложь то этот цикл выполняеться.
Переменная Dead это Логическая (Boolean) Переменная чара. Которая отображает жив ли чар. Подробнее об этой и других переменных чара вы узнаете
здесь.
Существуют еще несколько логических операторов которые можно применить в цикле это:
Not (не) - Изменяет значение на противоположное к примеру:
Значит абсолютно то-же самое что и:
Or(или) - В While do
Code: Select all
Program contrl_of_denger;
begin
while not Dead or not Poisoned do //Пока "Мертвость" чара - ложь делать или он не отравлен делать.
begin //Начало цикла
if (HP < MaxHP) then uosay('Guards');
wait(1000);// Задержка 1000мс (1 секунда)
end; //Конец цикла
end.
(Переменная Poisoned это Логическая (Boolean) Переменная чара. Которая отображает отравлен ли чар. Подробнее об этой и других переменных чара вы узнаете
здесь.
Данный скрипт (как следует из комментариев) - Выполняется пока чар Жив или не отравлен.
То есть Этот цикл - зациклен (не имеет логического конца, так как чар не может быть и мертв и отравлен одновременно, следовательно цикл не может прекратиться).
То же самое с Until
Code: Select all
Program contrl_of_denger;
begin
Repeat
if (HP < MaxHP) then uosay('Guards');
wait(5000);// Задержка 1000мс (1 секунда)
Until Dead or Poisoned;
end.
And (и)
В While do
Code: Select all
Program contrl_of_denger;
begin
while not Dead and not Poisoned do //Пока "Мертвость" чара - ложь и он не отравлен делать.
begin //Начало цикла
if (HP < MaxHP) then uosay('Guards');
wait(1000);// Задержка 1000мс (1 секунда)
end; //Конец цикла
end.
То же самое с Until
Code: Select all
Program contrl_of_denger;
begin
Repeat
if (HP < MaxHP) then uosay('Guards');
wait(5000);// Задержка 1000мс (1 секунда)
Until Dead and Poisoned;
end.
Думаю с этим все понятно.
3.
For to do
Поочередно пошаговый цикл. Пример:
Code: Select all
Program contrl_of_denger;
Const mes = 'I = ';
var i : integer;
begin
For i := 1 to 10 do addtosystemjournal(mes +IntToStr(i));
end.
Как видно из данного скрипта этот цикл поочередно добавляет к переменной и 1, В начале присваивая ей значение 1, а после этого добавляет каждый раз еще по 1. Данный цикл удобно использовать если вам нужно какое-либо действие производить определенное количество рас.
Так же этим циклом удобно пользоваться при Обкапывании, ловле рыбы (вокруг себя), и других действий в которых значение некоторых переменных нужно использовать с шагом в 1. Пример:
Создадим программу, которая выдаст таблицу умножения и таблицу добавления / Отнимания от 1 до 10 (перед каждым действием - задержка в 1 секунду, чтоб пользователь успевал следить за ходом выполнения скрипта).
Code: Select all
Program contrl_of_denger;
var a, b : integer;
begin
for a := 1 to 10 do
for b := 1 to 10 do
addtosystemjournal(IntToStr(a)+' * '+IntToStr(b)+' = ' + IntToStr( a * b ));
addtosystemjournal('Ждем 10 секунд.');
Wait(10000);// Подождем 10 секунд, чтоб вы успели посмотреть как
выполнился скрипт
for a := 1 to 10 do
for b := 1 to 10 do
Begin
addtosystemjournal(IntToStr(a)+' + '+IntToStr(b)+' = ' + IntToStr( a + b ));
Wait(1000);
addtosystemjournal(IntToStr(a)+' - '+IntToStr(b)+' = ' + IntToStr( a - b ));
Wait(1000);
End;
end.