XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
WalWin
8:-/
offline
Опыт: 4,117
Активность:
Цикл с нарушением условия повтор
Помогите пожалуйста:

Имеется 5 не работающих порталов, запускается тригер с циклом, где выбираются 5ть этих порталов и каждому дают свой маршрут (маршруты не должны совпадать!):

Тригер:
Цикл (с выбором каждого портала) от 1 до 5
Действие в цикле:
Создается случайная точка телепортации от 1 до 5
Условие - если точка телепортации не занята другим порталом, то разрешить назначение телепорта, иначе создать точку телепортации заново и проверить на условие опять (и так пока не найдется свободный портал)


Не могу понять, как повторить цикл для портала у которого выпала занятая точка телепортации.
Старый 01.04.2013, 00:28
Extremator

offline
Опыт: 40,226
Активность:
нууу... нада сделать массив с "выходами" и выдавая циклом каждому "входу" новое значение выберать его из массива "выходов"
Старый 01.04.2013, 01:16
WalWin
8:-/
offline
Опыт: 4,117
Активность:
Массивы я создал :)
Для каждого портала свой массив
Для каждой точки выхода свой массив

К примеру:
-Портал 1 направляется в точку 2
-Портал 2 направляется в точку 5
-Портал 3 направляется в точку 5 (и вот тут загвоздка! 5 точка уже занята, мой цикл продолжает задавать точки для портала 4 и 5, а третий портал остается не рабочим без точки выхода...)
Старый 01.04.2013, 01:28
IceFog

offline
Опыт: 8,002
Активность:
Вызывай случайное число до тех пор, пока оно не будет подходить под условия.
Старый 01.04.2013, 01:34
WalWin
8:-/
offline
Опыт: 4,117
Активность:
IceFog, а как повторно запускать условие проверки?
Старый 01.04.2013, 01:40
Extremator

offline
Опыт: 40,226
Активность:
сделай в конце А = А - 1
используй в качестве числа для массива переменную!
Старый 01.04.2013, 01:46
WalWin
8:-/
offline
Опыт: 4,117
Активность:
Extremator, IceFog, спасибо сделал все с помощью 3 тригеров:

1-ый: основной, запускает первую переменную и запускает триггер 2-а

2-ой триггер: если точка перемещения свободна, создает портал и отключает тригер 3-ий, если занята запуск тригер 3-и

3-ий триггер: заново создает точку порта и запускает тригер 2-а :)

P.S. большое спасибо, очень рад, пару часов потрачены невпустую)))
Старый 01.04.2013, 01:51
IceFog

offline
Опыт: 8,002
Активность:
Вот пример, с применением JASS'а:
» спойлер
Переменные:
PortalBusy- логический массив, изначально порталы не заняты, равен false.
RandomNumber - целочисленная, сюда запоминаем случайное число.
Portal и PortalLocation - массивы точек.
Выход из цикла осуществляется только при условии, что портал не занят.
Старый 01.04.2013, 02:02
WalWin
8:-/
offline
Опыт: 4,117
Активность:
IceFog, так намного лучше, три триггера в одном объеденим и никаких лишних действий
Старый 01.04.2013, 09:51
Borodach

offline
Опыт: 6,328
Активность:
port [1] = 1 первый портал
port [2] = 2 первый портал
port [3] = 3 первый портал
port [4] = 4 первый портал
port [5] = 5 первый портал
MaxPort = 5
Random = random[1 до MaxPort]
действие с порталом
set port [ Random ] = port [ MaxPort ]
set MaxPort = MaxPort - 1
Примерно так можно в 1 триггере
Старый 01.04.2013, 11:09
WalWin
8:-/
offline
Опыт: 4,117
Активность:
Borodach, нет так не получится) нужно чтобы все порталы работали, а это только через циклы, иначе длинный код будет, я на примере всего 5 порталов взял, их там гораздо больше)
Старый 01.04.2013, 11:53
DioD

offline
Опыт: 45,184
Активность:
длинный код...
пичаль тоска
если вам не нравится цикл пишите генератор псевдослучайных чисел с периодом равным количеству порталов
вот вам семпл, книжка кнута в интернетах есть, успехов
Старый 01.04.2013, 14:18
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:47.