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

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

Закрытая тема
 
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Как сделать что бы действие из цикла не повторялось?
В общем есть цикл, в котором проверяется, если места не заняты юнитами, то создается 1 юнит. Но т.к. это цикл и его конечное значение >3, то создаются 2 юнита вместо 1. Как сделать что бы в цикле делалась проверка и создавался всего 1 юнит? Можно конечно булинами делать, если тру и не тру, но это лишние строки кода, чего крайне не хочется делать..подсказывайте.
Старый 11.01.2009, 05:21
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Ну а как ты хочешь сделать так, но без "лишних строчек кода". Да и не так уж и много их, две всего строки добавить надо.
Старый 11.01.2009, 06:28
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
DFlyer, тем более булинами и я сделаю..верней уже сделал, но не интересно как-то..хочу еще варианты узнать..
Старый 11.01.2009, 07:17
ScorpioT1000
Работаем
online
Опыт: отключен
код в студию, я уверен там можно иначе организовать
Старый 11.01.2009, 10:27
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Vampirrr, ставь
Код:
exitwhen true

когда надо выйти из цикла.
Старый 11.01.2009, 14:15
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Код:
if ( not (udg_CheckMoveKingRed)) then
    loop
    set i = i+1
    exitwhen i > 3
        if (IsUnitGroupEmptyBJ(GetUnitsInRangeOfLocMatching(100.00, Location(x-192*i, y), Condition(function Owner_Condition_King_Red1))) == true ) then
        if ( not (IsUnitGroupEmptyBJ(GetUnitsInRangeOfLocMatching(100.00, Location(x-192*4, y), Condition(function CheckUTRed))) == true ) and ( not (udg_CheckMoveRookRedLeft)) ) then
        set checking = false 
        endif
        endif
    endloop
    endif
!!!   
    if ( not (checking)) then 
        call CreateNUnitsAtLoc( 1, 'n000', GetTriggerPlayer(), Location(x-192*2, y), 270 ) - это нужно засунуть в верхний цикл, но тогда будут появляться 2 юнита.
        set udg_RedLeft = GetLastCreatedUnit()
    endif 
!!!
    set i = 0
    if ( not (udg_CheckMoveKingRed)) then
    loop
    set i = i+1
    exitwhen i > 2
        if (IsUnitGroupEmptyBJ(GetUnitsInRangeOfLocMatching(100.00, Location(x+192*i, y), Condition(function Owner_Condition_King_Red1))) == true ) then
        if ( not (IsUnitGroupEmptyBJ(GetUnitsInRangeOfLocMatching(100.00, Location(x+192*3, y), Condition(function CheckUTRed))) == true ) and ( not (udg_CheckMoveRookRedRight)) ) then
        call CreateNUnitsAtLoc( 1, 'n000', GetTriggerPlayer(), Location(x+192*2, y), 270 ) 
        set udg_RedRight = GetLastCreatedUnit()
        endif
        endif
    endloop
    endif
Старый 11.01.2009, 17:00
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Vampirrr, че это за восклицательные знаки?
Старый 11.01.2009, 17:38
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Hellfim, это я выделил, что в глаза бросалось то, что нас интересует..
Старый 11.01.2009, 20:46
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Vampirrr, я не понял что ты хочешь, чтоб кто-то вставил exitwhen true в твой код? А сам? Вставь его в то место, где цикл должен прекратить свое выполнение.
Старый 12.01.2009, 00:17
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Hellfim, мне нельзя выходить из цикла, т.к. идет проверка на все позиции, но это уже не актуально ибо эта фигня не работает..

Темку пожалста закройте..
Старый 12.01.2009, 00:45
Закрытая тема

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

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

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

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



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