[Вопрос] Помогите с перебором
|
|
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:
|
|
|
|
Naturekid | Дата: Четверг, 21 Февраля 2013, 18:40:35 | Сообщение # 3 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| жестокий ты
|
|
|
|
Ty3uK | Дата: Четверг, 21 Февраля 2013, 18:52:54 | Сообщение # 4 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Да это вы все жестокие и ленивые. Нет чтобы выучить хороший скриптовый язык программирования, пишете на ЭТОМ. Ну да ладно, разговор из другой оперы.
|
|
|
|
Naturekid | Дата: Четверг, 21 Февраля 2013, 18:54:28 | Сообщение # 5 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| А если в текст конвертировать? Код [/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
Блокировки:
| Получается говно еще хуже. Тут придется еще и в читабельный вид приводить.
|
|
|
|
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 реализованы (вроде почти так).
|
|
|
|
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
Блокировки:
| Он шутил.
|
|
|
|
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
|
|
|
|
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
Блокировки:
| Не быть тебе программистом. Он должен просчитать все варианты до единого (или хотя бы большинство общих случаев).
|
|
|
|
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
|
|
|
|