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

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

Ответ
 
Markus_13
{c0Der}
offline
Опыт: 886
Активность:
Нужна помощь в оптимизации
Возможно ли увеличить быстродействие этого кода:
Код:
function BonussAb takes unit uta, integer cta, integer it5h, integer it1h, integer it10, integer it01 returns nothing
    local boolean rab
    if(GetUnitAbilityLevelSwapped('AInv',uta)==0)then
        set rab=true
        call UnitAddAbility(uta,'AInv')
    endif
    if(it5h>0)then
        if(cta>=500)then
        loop
            exitwhen cta<500
            call UnitAddItem(uta,it5h)
            set cta=cta-500
        endloop
        endif
    endif
    if(cta>=100)then
        loop
            exitwhen cta<100
            call UnitAddItem(uta,it1h)
            set cta=cta-100
        endloop
        endif
    if(cta>=10)then
        loop
            exitwhen cta<10
            call UnitAddItem(uta,it10)
            set cta=cta-10
        endloop
        endif
    if(cta>=1)then
        loop
            exitwhen cta<1
            call UnitAddItem(uta,it01)
            set cta=cta-1
        endloop
        endif
    if(rab)then
        call UnitRemoveAbility(uta,'AInv')
    endif
endfunction

Отредактировано Markus_13, 03.06.2011 в 09:12.
Старый 02.06.2011, 15:30
Nekit1234007

offline
Опыт: 11,916
Активность:
Если вы хотите работать с кодом и хотите чтобы вам помогали, научитесь работать с ним правильно. Можно воспользоваться этим.
Старый 02.06.2011, 17:26
DioD

offline
Опыт: 45,134
Активность:
попробуйте не сотни десятки и прочую ересь и бинарную итерацию.
вам нужно 1 -2 4 -8 16 -32 64 -128 256 -512 и 1024 чтобы охватить в минимум пробежек и минимум абилок поставленную задачу.
чтобы выдать 513 вы выдаете 1024 забираете 512 и даете 1 сверху
Старый 02.06.2011, 20:51
Markus_13
{c0Der}
offline
Опыт: 886
Активность:
Цитата:
Сообщение от ARHUI
неуверен, но попробуй вместо блоков if-endif использовать где уместно if-else(if)-endif

Конструкция вида "if-else if-endif" там нигде не нужна, ты просто не разобрался в алгоритме, посмотри внимательней...

Цитата:
Сообщение от DioD
чтобы выдать 513 вы выдаете 1024 забираете 512 и даете 1 сверху

В моей функции это будет выполняться на 2 действия больше: +500 +10 +1 +1 +1;
но мне кажется что мой алгоритм сам по себе быстрее, т.к. в нем меньше проверок условий...
Цитата:
Сообщение от DioD
вам нужно 1 -2 4 -8 16 -32 64 -128 256 -512 и 1024 чтобы охватить в минимум пробежек и минимум абилок поставленную задачу.

Можно пример алгоритма генерирующего числа подобным образом?
Старый 03.06.2011, 09:29
J64_

offline
Опыт: 4,724
Активность:
Markus_13:
Можно пример алгоритма генерирующего числа подобным образом?
если это побитовое(какбы) разложение, то одним глазком позырь на мой код в карте для спеллконтеста.
самореклама ^^
Старый 03.06.2011, 14:24
Ответ

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

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

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

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



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