Сейчас 02:21:23 Пятница, 19 августа, 2022 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Помогите с перебором
[Вопрос] Помогите с перебором
NaturekidДата: Четверг, 21 Февраля 2013, 18:15:57 | Сообщение # 1
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:

Вообщем соль такая:
Имеется поле квадратное, в каждой ячейке число (CurrentunitTemp)
Требуется всё перебрать и если в ячейке  CurrentunitTemp=0 - то сдвинуть все ячейки, находящиеся выше на неё.
Почему то у меня сдвигается только 1 ячейка, наиболее близкая к тем ячейкам что имеют значение 0.
По циклам вроде всё правильно, да я даже тупо откопировал несколько раз вот это и всё равно результат тот же. =(.
Мб у мну просто голова садовая, подскажите, что не так?

Добавлено (21 Февраля 2013, 18:07:51)
---------------------------------------------
Ох блин, я тут цикл ещё 1 убрал, но он всё равно не помогал...

Добавлено (21 Февраля 2013, 18:15:57)
---------------------------------------------

Недоглядел, добавил зануление, стало лучше - теперь двигается вся ватага ячеек, но 1 раз а не до тех пор, пока придавит все нули, цикл не помогает, в чем проблема?


 

Ty3uKДата: Четверг, 21 Февраля 2013, 18:37:52 | Сообщение # 2
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Хотел помочь, но понял что не смогу смотреть на это. D:

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NaturekidДата: Четверг, 21 Февраля 2013, 18:40:35 | Сообщение # 3
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
жестокий ты

 

Ty3uKДата: Четверг, 21 Февраля 2013, 18:52:54 | Сообщение # 4
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Да это вы все жестокие и ленивые. Нет чтобы выучить хороший скриптовый язык программирования, пишете на ЭТОМ.
Ну да ладно, разговор из другой оперы.


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NaturekidДата: Четверг, 21 Февраля 2013, 18:54:28 | Сообщение # 5
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
А если в текст конвертировать? trollface
Код
[/code]function Trig_Fall_____________________u_Func001Func001Func001Func001Func002Func001C takes nothing returns boolean
     if ( not ( udg_CurrentunitTemp[S2I(( I2S(GetForLoopIndexA()) + I2S(( udg_Tip[12] - 1 )) ))] != 0 ) ) then
         return false
     endif
     return true
endfunction

function Trig_Fall_____________________u_Func001Func001Func001Func001Func002Func003C takes nothing returns boolean
     if ( not ( udg_Tip[12] > 1 ) ) then
         return false
     endif
     return true
endfunction

function Trig_Fall_____________________u_Func001Func001Func001Func001Func002C takes nothing returns boolean
     if ( not ( udg_CurrentunitTemp[S2I(( I2S(GetForLoopIndexA()) + I2S(udg_Tip[12]) ))] == 0 ) ) then
         return false
     endif
     return true
endfunction

function Trig_Fall_____________________u_Func001Func001Func001C takes nothing returns boolean
     if ( not ( udg_CurrentunitTemp[S2I(( I2S(GetForLoopIndexA()) + I2S(IAbsBJ(GetForLoopIndexB())) ))] == 0 ) ) then
         return false
     endif
     return true
endfunction

function Trig_Fall_____________________u_Actions takes nothing returns nothing
     set bj_forLoopAIndex = 1
     set bj_forLoopAIndexEnd = 5
     loop
         exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
         set bj_forLoopBIndex = -5
         set bj_forLoopBIndexEnd = -1
         loop
             exitwhen bj_forLoopBIndex > bj_forLoopBIndexEnd
             if ( Trig_Fall_____________________u_Func001Func001Func001C() ) then
                 set udg_Loop = GetForLoopIndexB()
                 loop
                     exitwhen udg_Loop > -1
                     set udg_Tip[12] = IAbsBJ(udg_Loop)
                     if ( Trig_Fall_____________________u_Func001Func001Func001Func001Func002C() ) then
                         if ( Trig_Fall_____________________u_Func001Func001Func001Func001Func002Func001C() ) then
                             set udg_Currentunit[S2I(( I2S(GetForLoopIndexA()) + I2S(udg_Tip[12]) ))] = udg_Currentunit[S2I(( I2S(GetForLoopIndexA()) + I2S(( udg_Tip[12] - 1 )) ))]
                             set udg_CurrentunitTemp[S2I(( I2S(GetForLoopIndexA()) + I2S(( udg_Tip[12] - 1 )) ))] = 0
                             call SetUnitUserData( udg_Currentunit[S2I(( I2S(GetForLoopIndexA()) + I2S(udg_Tip[12]) ))], GetUnitUserData(udg_Currentunit[S2I(( I2S(GetForLoopIndexA()) + I2S(( udg_Tip[12] - 1 )) ))]) )
                         else
                         endif
                         if ( Trig_Fall_____________________u_Func001Func001Func001Func001Func002Func003C() ) then
                             call SetUnitPositionLoc( udg_Currentunit[S2I(( I2S(GetForLoopIndexA()) + I2S(udg_Tip[12]) ))], udg_Point[S2I(( I2S(GetForLoopIndexA()) + I2S(udg_Tip[12]) ))] )
                         else
                         endif
                     else
                     endif
                     set udg_Loop = udg_Loop + 1
                 endloop
             else
             endif
             set bj_forLoopBIndex = bj_forLoopBIndex + 1
         endloop
         set bj_forLoopAIndex = bj_forLoopAIndex + 1
     endloop
endfunction

//===========================================================================
function InitTrig_Fall_____________________u takes nothing returns nothing
     set gg_trg_Fall_____________________u = CreateTrigger(  )
     call TriggerAddAction( gg_trg_Fall_____________________u, function Trig_Fall_____________________u_Actions )
endfunction

[code]


 

Ty3uKДата: Четверг, 21 Февраля 2013, 19:02:02 | Сообщение # 6
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Получается говно еще хуже. Тут придется еще и в читабельный вид приводить.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NaturekidДата: Четверг, 21 Февраля 2013, 19:02:36 | Сообщение # 7
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
ну и на том спасибо

 

SirNikolasДата: Четверг, 21 Февраля 2013, 19:07:09 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Для начала, в каком виде хранится твое прямоугольное поле? Если по-нормальному, в одномерном массиве, то индекс должен вычисляться как [i * MAXJ + j]; i ∈ [0; MAXI), j ∈ [0; MAXJ).

 

NaturekidДата: Четверг, 21 Февраля 2013, 19:12:44 | Сообщение # 9
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
SirNikolas, короче я делаю что-то по типу игры Bejewelled.
Так-то всё в одномерных массивах, да, правда я не совсем понял твоё объяснение...
Короче после того как одинаковые "гемы" убираются - всё двигается в нужном направлении, но лишь 1 раз.
Я даже присвоил каждой ячейке длину уничтоженной цепочки и вручную написал передвинуть то-то туда-то.
НО ЭТА ФИГНЯ ВСЁ РАВНО ДВИГАЕТ, НО ПРИ ЭТОМ ЛИШЬ НА 1 ЯЧЕЙКУ ВНИЗ.
Что делать я хз.


 

lawsonДата: Четверг, 21 Февраля 2013, 19:17:17 | Сообщение # 10
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
главное обнуляй переменные и все будет огогого!

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

Ty3uKДата: Четверг, 21 Февраля 2013, 19:19:54 | Сообщение # 11
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Его объяснение - вариант имитации двумерного массива.
Они так в vJASS реализованы (вроде почти так).


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NaturekidДата: Четверг, 21 Февраля 2013, 19:22:53 | Сообщение # 12
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
дык есть такое
если нашлась цепочка - все её "участники" "зануляются".
+ В 2 закостыленном варианте ещё массивчик приписал, только и с ним всё по старому.

Добавлено (21 Февраля 2013, 19:22:53)
---------------------------------------------
(Я Лавсону)


 

Ty3uKДата: Четверг, 21 Февраля 2013, 19:32:34 | Сообщение # 13
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Он шутил.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Четверг, 21 Февраля 2013, 20:08:05 | Сообщение # 14
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Ох, до меня наконец дошло, как ты их нумеруешь. Будь добр, сделай по-человечески.

Пусть есть матрица 5x4. Пронумеруем строки и столбцы, начиная с нуля (у меня сначала записан номер строки, а потом номер столбца):
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
40 41 42 43


Заметим, что если читать слева направо и сверху вниз, то это будут последовательные числа в четверичной системе счисления (ну, кроме последней строки). Перепишем ту же самую таблицу, переведя числа в десятичную:
00 01 02 03
04 05 06 07
08 09 10 11
12 13 14 15
16 17 18 19


"Развернем" матрицу в массив:
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19

Далее видим, что для того, чтобы получить значение ячейки в строке i и столбце j, нужно обратиться к элементу [i * 4 + j] в массиве (напомню, строки и стобцы нумеруются с нуля).


 

Ty3uKДата: Четверг, 21 Февраля 2013, 20:18:19 | Сообщение # 15
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Вспомнил первый семестр и промежуточное тестирование. : D

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NaturekidДата: Четверг, 21 Февраля 2013, 20:32:19 | Сообщение # 16
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Извиняюсь за тупость, но куда мне эту формулу воткнуть? %)

Добавлено (21 Февраля 2013, 20:32:19)
---------------------------------------------
кстати почему не пашет я понял, отчасти.
дело в условии, 2 снизу. убранные по вертикали ряды имеют в себе 0 уже а я делаю проверку не 0 ли то что сверху(т.е. есть гем) и если не 0 - опустить вниз.
Только вот как сделать чета пока не допёр, через присваивание и проверку -1 вместо 0 чета опять тупит...


 

BorodachДата: Четверг, 21 Февраля 2013, 22:22:14 | Сообщение # 17
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Ты выводи сообщением нужные массивы(или другие подозревающие внеисправности переменные). Ответ может быть ближе чем тебе кажется.
:)


Karamba
 

NaturekidДата: Пятница, 22 Февраля 2013, 10:33:49 | Сообщение # 18
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Borodach, дая так всегда и делаю, в данном цикле ересь получается - то сдвинул, то не сдвинул, вообще непонятно что творит, зараза.

Добавлено (22 Февраля 2013, 10:33:49)
---------------------------------------------
Разложил монетки перед собой и нарвал бумажек с надписями 0 и -1.
Начал обрабатывать свои же команды вручную и наконец допёр как надо было.
Вроде бы прокает. Надеюсь дальше глюков не будет.


 

SirNikolasДата: Пятница, 22 Февраля 2013, 11:14:50 | Сообщение # 19
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (Naturekid)
Извиняюсь за тупость, но куда мне эту формулу воткнуть?
У тебя есть целочисленный массив Field, в котором находятся цвета бриллиантов. Вот с ним и работай как с двумерным.


 

NaturekidДата: Пятница, 22 Февраля 2013, 11:38:44 | Сообщение # 20
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
SirNikolas, двумерный массив меня вовсе не напрягает, дело не в том, чтобы наколдовать двумерный с одномерного.
Просто были ошибки, которые были бы допущены и при ином задании "матрицы".
вот как пока выглядит. Убирается норм, потому перехожу пока к следующему этапу =).

Всем спс за внимание.


 

SirNikolasДата: Пятница, 22 Февраля 2013, 16:54:52 | Сообщение # 21
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
А индексацию нормальную так и не сделал. Скажи, что получится, если одна из сторон будет больше 10?

 

NaturekidДата: Пятница, 22 Февраля 2013, 22:28:37 | Сообщение # 22
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Цитата (SirNikolas)
если одна из сторон будет больше 10
Этого не будет.
В другом случае я бы поломал голову, но не в этом. Игра предполагает размер поля 8/8 =)


 

Ty3uKДата: Пятница, 22 Февраля 2013, 22:36:54 | Сообщение # 23
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Не быть тебе программистом. Он должен просчитать все варианты до единого (или хотя бы большинство общих случаев).

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NaturekidДата: Суббота, 23 Февраля 2013, 01:33:26 | Сообщение # 24
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Цитата (Ty3uK)
Не быть тебе программистом. Он должен просчитать все варианты до единого (или хотя бы большинство общих случаев).
Я развлекаюсь.

Если развлечение перерастёт во что-то вроде работы, то сразу станет неинтересным. (с)Марк Твен

Добавлено (23 Февраля 2013, 01:33:26)
---------------------------------------------
=)


 

SirNikolasДата: Суббота, 23 Февраля 2013, 09:15:50 | Сообщение # 25
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (Naturekid)
Игра предполагает размер поля 8/8
И зачем копировать с такой точностью? Я бы поиграл в мультиплеере, где два игрока (или больше) в кооперативе играют на одном поле. И 8*8 там будет явно мало.

P. S. http://habrahabr.ru/company/Nekki/blog/142459


 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Помогите с перебором
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright © 2006 - 2022 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz