Что такое цикл и для чего его используют в скрипте?
- Цикл (лат. cyclus от др.-греч. κύκλος — окружность) То есть, от слова "Окружность" становиться ясно, что это действие которое проходит от начала до конца по чему либо и выполняет какие либо определенные действия.
Циклы помогают оптимизировать мод (что повышает его быстроту действия путем уменьшения количества строк).
Немного дополнительной информации о циклах pawn: - Циклы в Pawn бывают четырех видов: while, for и do..while - Каждый круг цикла по скрипту называется итерацией.
- Инкремент (Пример: i++)- добавление к числу единицы. - Декремент (Пример: i--) - вычитание из числа единицы.
* Число которое увеличиваться/уменьшается в нашем случае может браться например из переменной i (new i = 0;) которая равна нулю.
- Использование цикла - "While"
Внешнее строение цикла и его обозначения:
Код
while(условие) { << Тут находиться выполняемый скрипт (иминуеться как "Тело цикла") }
Например у каждого в Role-Play если запуск очистки чата Samp Он выглядит так:
Мы можем сделать тоже самое действие только с использование цикла который называется "while"
Код
new d; // задаем переменную while(d++<50) // Указываем, сколько цикл должен проходить по функции до его завершения (в нашем 50 раз) { SendClientMessage(playerid, 0xFFFFFFFF, ""); // Функция которая должна выполняться }
С помощью этих пяти строчек мы избавились от 50 строк одного и того же!
И так с помощью цикла мы упростили себе работу, а так же еще оптимизировали мод.
- Использование цикла - "For"
Внешнее строение цикла и его обозначения:
Код
for (переменная, условие, увеличение(инкремент)) } << Условия цикла (Тело цикла) }
Цикл "For" почти точно такой же как и "While" отличается он только тем, что он начинается с объявления переменной. После переменной идет условие, а затем инкремент.
Пример использования:
Код
for(new i = 0; i < MAX_PLAYERS; i++) { SendClientMessage(playerid,0xFFFFFFAA,"Поздравляю вы один из тех, кто был кикнут с сервера"); Kick(i); }
Разберём этот пример по частям:
for(new i = 0; i < MAX_PLAYERS; i++) - Тут мы создаем переменную "i" и приравниваем её к нулю, затем создаем условие и задаем действие(инкремент).
{ SendClientMessage(playerid,0xFFFFFFAA,"Поздравляю вы один из тех, кто был кикнут с сервера"); Kick(i); - Здесь условие выполняемого цикла }
Данный цикл который я привел в пример, проходит по всем игрокам которые в данные момент на сервере и выполняет действие которое указанно в теле цикла (то есть выдача сообщения игроку и отключение его от сервера) Согласитесь, одним циклом меньше чем за секунду кикнуть весь сервер, чем выкидывать (кикать) каждого игрока отдельно.
Личное мнение: - Данный цикл скорее служит не для оптимизации мода, а для выполнения какой ни будь команды. На пример обычная команда /members состоит из такого цикла, который в данные момент времени по условию (телу цикла) которое мы поставим проверяет (отбирает) игроков на то что он состоит в данной фракции и выводит его в список сотрудников.
- Использование цикла - "Do..while"
Внешнее строение цикла и его обозначения:
Код
do { << Что должен выполнять цикл (тело цикла) } while(условие);
Цикл "Do..while" похож на цикл "While" но у него есть небольшое отличие в том, что сначала выполняются инструкции которые мы ему задали, а только после этого проверяется условие.
Пример использования:
Код
new i; do { format(string, sizeof(string), "Выводимое число: %d",i++); SendClientMessage(playerid,0xFFFFFFAA,string); } while(i < 10);
- Разберём этот пример по частям: new i; - Задаем переменную (можно её приравнять new i = 0; или оставить как есть) do { format(string, sizeof(string), "Выводимое число: %d",i++); - Создаем задание которое должен выполнить цикл. SendClientMessage(playerid,0xFFFFFFAA,string); } while(i < 10); - Проверка условия которое определит будет ли тело цикла еще раз выполняться.
- Функции данного цикла: Данный цикл выводит игроку цифры по порядку в чат. Если переменная i равна нулю, то будет выводиться 0,1,2,3,4,5,6,7,9,10 Если она не равна,то первое число которое выведет цикл в чат игроку будет такое чему сейчас равна переменная i, а остальные по условию. Если первое число больше 10 то дальше цикл не будет выполняться, так как это нарушает наше условие while(i < 10);
---------------------------------------------------------------------------------------- - Вскоре возможно будут другие уроки.. - Спасибо Всем добра =))
Сообщение отредактировал olegfake - Четверг, 10.01.2013, 10:22