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

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

Ответ
 
natrix

offline
Опыт: 106
Активность:
Проблема с циклом
есть код, в котором как мне кажется проблема с циклом.
ошибка заключается в следующем:
создается турнир для 8 игроков. допустим побеждают нечётные
1 против 2, 3 против 4, 5 против 6, 7 против 8. - тут все нормально
дальше полуфинал
1 против 3, 5 против 7 - часто так, но иногда бывает 1 против 3, 5 против 5
финал - тут больше всего проблем
должно быть 1 против 5 к примеру. а выходит так что может внезапно и 1 против 1 или те кто выбыли в полуфинале

Код:
function Trig_DoFinalTournament_Actions takes nothing returns nothing
    local integer i=0
    call SetupFinalTournament()
    set CURRENT_SCOREBOARD=CreateTournamentScoreboard("Quarter Finals",8,0)
    loop
        exitwhen i==8
        call DoFinalTournamentRound("Quarter Finals, Round "+I2S(1+(i/ 2)),FINAL_TOUR_ORDER[i],FINAL_TOUR_ORDER[i+1])
        if i==0 then
            set FINAL_TOUR_ORDER[10]=FINAL_TOUR_ROUND_WINNER
        elseif i==2 then
            set FINAL_TOUR_ORDER[12]=FINAL_TOUR_ROUND_WINNER
        elseif i==4 then
            set FINAL_TOUR_ORDER[13]=FINAL_TOUR_ROUND_WINNER
        else
            set FINAL_TOUR_ORDER[11]=FINAL_TOUR_ROUND_WINNER
        endif
        set i=i+2
    endloop
    set i=0
    call DestroyMultiboard(CURRENT_SCOREBOARD)
    set CURRENT_SCOREBOARD=CreateTournamentScoreboard("Semi Finals",4,10)
    call Print("Get ready for the Semi Finals!")
    call PlaySoundBJ(gg_snd_QuestLog)
    call PolledWait(3.0)
    loop
        exitwhen i==4
        call DoFinalTournamentRound("Semi Finals, Round "+I2S(1+(i/ 2)),FINAL_TOUR_ORDER[10+i],FINAL_TOUR_ORDER[10+i+1])
        set FINAL_TOUR_ORDER[100+(i/ 2)]=FINAL_TOUR_ROUND_WINNER
        set i=i+2
    endloop
    call DestroyMultiboard(CURRENT_SCOREBOARD)
    set CURRENT_SCOREBOARD=CreateTournamentScoreboard("Final Match",2,100)
    call Print("|cffffcc00FINAL ROUND!")
    call PlaySoundBJ(gg_snd_LightningBolt1)
    call PlaySoundBJ(gg_snd_QuestLog)
    call PolledWait(3.0)
    call DoFinalTournamentRound("Final Match",FINAL_TOUR_ORDER[100],FINAL_TOUR_ORDER[101])
    call Print(GetColorPlayerName(Player(FINAL_TOUR_ROUND_WINNER))+" is the Champion|r")
    call PolledWait(10.0)
    call Print("Thank you for playing.")
endfunction
function FinalTourOnDeath takes nothing returns nothing
    local unit u=GetDyingUnit()
    local integer i=0
    loop
        exitwhen i==2
        if IsUnitInGroup(u,FINAL_TOUR_SPAWNS[i])then
            call GroupRemoveUnit(FINAL_TOUR_SPAWNS[i],u)
        endif
        if FirstOfGroup(FINAL_TOUR_SPAWNS[i])==null then
            set FINAL_TOUR_ROUND_WINNER=1-i
        endif
        set i=i+1
    endloop
endfunction
function InitTrig_DoFinalTournament takes nothing returns nothing
    set gg_trg_DoFinalTournament=CreateTrigger()
    call TriggerAddAction(gg_trg_DoFinalTournament,function Trig_DoFinalTournament_Actions)
    set FINAL_TOUR_ON_DEATH_TRG=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(FINAL_TOUR_ON_DEATH_TRG,EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddAction(FINAL_TOUR_ON_DEATH_TRG,function FinalTourOnDeath)
    call DisableTrigger(FINAL_TOUR_ON_DEATH_TRG)
endfunction

Отредактировано natrix, 22.11.2011 в 19:02.
Старый 22.11.2011, 05:00
spellwerk

offline
Опыт: 4,869
Активность:
Расставьте, пожалуйста, отступы, ибо код в таком виде нечитабелен.
Старый 22.11.2011, 08:13
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
может быть стоит проверять чтобы первый участник не равнялся второму?
Старый 26.11.2011, 17:20
Ответ

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

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

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

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



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