-
Автор темы
- #1
[HR][/HR]
[HR][/HR]
Массив — множество переменных одного типа и с одним названием, но отличающихся по "номеру" в массиве.
Здесь i — массив. У него есть элементы, у которых есть "порядковые номера" (указываются в квадратных скобках). Элемент — переменная, тип которой такой же, как тип массива.
Про массивы в отдельности рассказывать особо нечего, а вот про использование массивов и циклов вместе очень даже много можно сказать.
Подумайте сами — индексы массивов — integer'ы, счетчик — тоже integer. Ни на какие мысли не наводит? Давайте рассмотрим пример.
Давайте попробуем нарисовать огненную стену с помощью спецэффектов. Создать-то её нетрудно, но ведь и убрать тоже надо. Как вы уже наверное знаете, каждый созданный спецэффект должен быть помещен в переменную, иначе мы не сможем его убрать. Предположим, что в сумме в стене 100 огней. Создавать сто переменных (а если не использовать цикл, то еще и сто действий)? Глупо. Гораздо легче это сделать с помощью массива и цикла.
Соответственно, e — массив спецэффектов. Еще пришлось преобразовывать integer в real (Real((Integer A))), т.к. тип счетчика — integer. В результате в массиве e (элементы 1...100) будут сохранены все спецэффекты, созданные нами. Теперь осталось создать триггер для их удаления.
Этот пример можно было сделать даже лучше, т. к. не обязательно ставить сто — можно поставить переменную. Таким образом мы получим триггер (точнее, цикл) для создания стены любой длины — надо лишь изменить переменную, поставленную вместо ста.
В этом вся "фишка" использования массивов и циклов вместе. Работать с массивами гораздо проще. Не забывайте, что далеко не обязательно использовать счетчик в "чистом виде". С ним, как и с любым integer, можно делать много математических операций.
Давайте рассмотрим еще один пример, на этот раз посложнее. Предположим, у нас есть две точки (location) — c[1] и c[2], нам нужно создавать каждые несколько секунд юнита сначала в одном, а затем в другом регионе. В общем нужно создать 10 юнитов таким образом. Новых переменных, помимо тех, что указаны в условиях, создавать нельзя.
Давайте рассуждать. Как мы можем определять, когда создавать одного, а когда — другого? Можно было бы с помощью булина, но создавать новых переменных нельзя. За что можно "зацепиться"? Нужно что-то, что чередуется, так ведь? А числа никак не чередуются? Догадались? Числа чередуется — четные и нечетные! Теперь, как можно определить, четное число или нечетное? Нужно узнать, есть ли у числа остаток от деления на 2. Есть такая функция — Math - Modulo (mod), она возвращает остаток от деления. Если он равен нулю — число четное, если нет — нечетное. Теперь, собственно, цикл.
Мы решили данную задачу, не вводя новую переменную.
[HR][/HR]
Итак, данная статья на этом заканчивается. Теперь можно приступать к самостоятельному изучению триггеров. Ни одна статья не научить вас чему-то лучше, чем научит вас собственная практика.
Статья скопирована с сайта:
- Осваиваем World Editor: триггеры
- Структура триггера: события, условия и действия
- Переменные, выражения, функции
- Основные операторы
- Объекты
- Постановка задач
- Переменные (практика)
- Циклы (практика)
- Массивы (практика)
Массивы (практика)
[HR][/HR]
Массив — множество переменных одного типа и с одним названием, но отличающихся по "номеру" в массиве.
PHP:
Set i[0] = 0
Set i[1] = 0
Про массивы в отдельности рассказывать особо нечего, а вот про использование массивов и циклов вместе очень даже много можно сказать.
Подумайте сами — индексы массивов — integer'ы, счетчик — тоже integer. Ни на какие мысли не наводит? Давайте рассмотрим пример.
Давайте попробуем нарисовать огненную стену с помощью спецэффектов. Создать-то её нетрудно, но ведь и убрать тоже надо. Как вы уже наверное знаете, каждый созданный спецэффект должен быть помещен в переменную, иначе мы не сможем его убрать. Предположим, что в сумме в стене 100 огней. Создавать сто переменных (а если не использовать цикл, то еще и сто действий)? Глупо. Гораздо легче это сделать с помощью массива и цикла.
PHP:
For each (Integer A) from 1 to 100, do (Actions)
Loop - Actions
Special Effect - Create a special effect at (!!точка!! offset by (((Real((Integer A))) x 50.00), 0.00)) using !!огонь!!
Set e[(Integer A)] = (Last created special effect)
PHP:
For each (Integer A) from 1 to 100, do (Actions)
Loop - Actions
Special Effect - Destroy e[(Integer A)]
В этом вся "фишка" использования массивов и циклов вместе. Работать с массивами гораздо проще. Не забывайте, что далеко не обязательно использовать счетчик в "чистом виде". С ним, как и с любым integer, можно делать много математических операций.
Давайте рассмотрим еще один пример, на этот раз посложнее. Предположим, у нас есть две точки (location) — c[1] и c[2], нам нужно создавать каждые несколько секунд юнита сначала в одном, а затем в другом регионе. В общем нужно создать 10 юнитов таким образом. Новых переменных, помимо тех, что указаны в условиях, создавать нельзя.
Давайте рассуждать. Как мы можем определять, когда создавать одного, а когда — другого? Можно было бы с помощью булина, но создавать новых переменных нельзя. За что можно "зацепиться"? Нужно что-то, что чередуется, так ведь? А числа никак не чередуются? Догадались? Числа чередуется — четные и нечетные! Теперь, как можно определить, четное число или нечетное? Нужно узнать, есть ли у числа остаток от деления на 2. Есть такая функция — Math - Modulo (mod), она возвращает остаток от деления. Если он равен нулю — число четное, если нет — нечетное. Теперь, собственно, цикл.
PHP:
For each (Integer A) from 1 to 10, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Integer A) mod 2) equal 0
Then - Actions
Unit - Create 1 !!юнит!! for !!игрок!! at c[1] facing 0.00 degrees
Else - Actions
Unit - Create 1 !!юнит!! for !!игрок!! at c[2] facing 0.00 degrees
[HR][/HR]
Заключение
[HR][/HR]Итак, данная статья на этом заканчивается. Теперь можно приступать к самостоятельному изучению триггеров. Ни одна статья не научить вас чему-то лучше, чем научит вас собственная практика.
Статья скопирована с сайта:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Последнее редактирование: