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

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

Закрытая тема
 
Kenshi245

offline
Опыт: 2,252
Активность:
Алгоритм сортировки отряда...
Есть какие-нибудь идеи какой нужен алгоритм, чтобы отсортировать группу юнитов по возрастанию по действующему количеству ХП?
Старый 28.03.2008, 12:00
J
expert
offline
Опыт: 48,747
Активность:
Предположим что в массиев udg_GrUnits вся группа юнитов расположена от 0 до (количество юнитов - 1)
Тогда сортировка юнитов в этом массиве от меньшего к большему будет осуществлятся так:
Код:
globals
    unit array udg_GrUnits
endglobals

function Sort takes nothing returns nothing
    local real array Life
    local boolean b = false
    local unit u
    local real lif
    local integer i = 0
    loop
        exitwhen udg_GrUnits[i] == null
        set Life[i] = GetUnitState(udg_GrUnits[i], UNIT_STATE_LIFE)
        set i = i + 1
    endloop
    set i = 0
    loop
        if udg_GrUnits[i+1] == null then            
            if b then
                set i = 0
                set b = false
            else
                exitwhen true
            endif
        endif
        if (Life[i] > Life[i+1]) then
            set u = udg_GrUnits[i]
            set udg_GrUnits[i] = udg_GrUnits[i+1]
            set udg_GrUnits[i+1] = u
            set lif = Life[i]
            set Life[i] = Life[i+1]
            set Life[i+1] = lif  
            set b = true
        endif
        set i = i + 1
    endloop
endfunction


можно даже кстате вот это
Код:
set lif = Life[i]
set Life[i] = Life[i+1]
set Life[i+1] = lif
заменить на это
Код:
set Life[i]=Life[i]-Life[i+1]
set Life[i+1]=Life[i]+Life[i+1]
set Life[i]=Life[i+1]-Life[i]
одну локалку можно будет убрать...

Если нужна сортировка от большего к меньшему замени
Код:
if (Life[i] > Life[i+1]) then
на это
Код:
if (Life[i] < Life[i+1]) then

Отредактировано Jon, 28.03.2008 в 14:57.
Старый 28.03.2008, 15:07
pulsar

offline
Опыт: 1,320
Активность:
Напишите кто нибудь пример сортировки по ХП в обычных триггерах.Люди!
Старый 08.02.2011, 21:13
ScorpioT1000
Работаем
offline
Опыт: отключен
понятие "сортировка юнитов" противоречит понятию "обычные триггеры", так что иди учи уроки плз
Старый 08.02.2011, 21:17
Закрытая тема

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

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

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

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



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