![]() |
|
![]() |
![]() |
Новости | Конференция | Чат | База данных | Творчество | Сообщество | О сайте | English |
![]() |
Помощь сайту |
![]() |
![]() |
![]() |
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ЦИКЛЫ Циклы используются, когда вам необходимо повторять определенную последовательность команд, пока не будет достигнуто некоторое условие. Конечно, получить зацикленный кусок кода можно и используя операторы безусловного перехода, однако подобный подход не рекомендуется, поскольку он ухудшает читаемость кода, к тому же использовать команды цикла гораздо удобнее и проще. Вот пример простейшего цикла: 010 while [ENVIRONMENT] != [HOMEBASE] 011 @=wait randomly from 5000 to 10000 ms 012 @=[THIS] ->fly to home base 013 end В строке 010, заголовке цикла (while), задано условие цикла (пока корабль не пристыкован к своей базе), пока оно истинно, т.е. принимает значение «истина», цикл выполняется, т.е. выполняются строки с номерами 011 и 012 (ждать 5-10 сек, возвращаться на базу). Как только выполнение скрипта доходит до строки 013, управление передается в строку 010, проверяется условие и если оно выполняется (принимает значение «истина»), то снова выполняются строки 011 и 012, и так до тех пор, пока условие не примет значение «ложь». Как только условие становится ложно, управление переходит в строку, следующую за end. Если срока с ключевым словом end последняя в скрипте, выполнение скрипта завершается. Однако нам может понадобится выйти из цикла до того как условие цикла примет значение «ложь» (например, базу уничтожили, в этом случае корабль никогда не сядет на свою базу, и цикл окажется «вечным»). Для этих целей служит команда break. Она передает управление в строку, следующую за end. С учетом проверки на существование базы наш цикл можно записать следующим образом: 010 while [ENVIRONMENT] != [HOMEBASE] 011 if not [HOMEBASE] 012 break 013 end 014 @ =wait randomly from 5000 to 10000 ms 015 @ =[THIS] ->fly to home base 016 end Ключевое слово end стоящее в строке 013 относится к оператору if стоящему в строке 011, end всегда относится к ближайшему if или while. Оператор while можно записать и как while not, в этом случае значение выражения, задающего условие цикла, инвертируется. Вот так будет выглядеть предыдущий пример в форме while not: 010 while not [ENVIRONMENT] == [HOMEBASE] 011 if not [HOMEBASE] 012 break 013 end 014 @ =wait randomly from 5000 to 10000 ms 015 @ =[THIS] ->fly to home base 016 end Также может потребоваться начать новый виток цикла, до того как будут выполнены все операторы текущего витка, это делается оператором continue (см. примеры покупка товара по лучшей цене). Назад к оглавлению
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
![]() |
Дизайн Elite Games V5 beta.18 EGM Elite Games Manager v5.17 02.05.2010 |
![]() |