![]() |
Обработка массива.
Имеется масив к примеру:
Код:
001111110000 Делаю не совсем стандартный хоникс. Нужно чтоб при ограничении пространства оно все закрашивалость(данный хоникс будет построен на масиве не для простоты а для самой идеи). Какие есть идеи? Я вообще не представляю как это можно реализовать(есть неконкретные догадки). Мне не нужен готовый код функции. Может у кого то есть сами идеи реализации? И кто может подкинуть туториал или пример по хониксам? Туториал можно и не под блиц. Спасибо за участие. |
Re: Обработка массива.
Это тебе скорее всего алгоритм поиска пути надо юзать, точнее ту часть ,что определяет доступные зоны. Тут, на сайте, в разделе алгоритмики,кажется можно найти простенький пример.;)
|
Ответ: Обработка массива.
Рекурсия.
Заводишь переменную под текущий цвет. Пусть для простоты это x=2. Перебираешь все клетки. Из клетки, если она уже не покрашена, идешь во всех 4 направлениях, если она 0 - закрашиваешь, если "1" (граница) или любое другое число, отличное от нуля (уже закрашена) - не идешь в нее, рассматриваешь другое направление. Естественно, надо как-то отмечать уже закрашенные клетки (ставить в них "2"). Вот только при таком способе будут закрашивать все участки, т.к. конец массива тоже должен считаться границей. Но можно сделать так: если вдруг при следующем ходе мы дошли до границы массива, то запустить из этой клетки обратное покрашивание (например, в черный цвет, т.е. например x=3). И не забыть отмечать эти клетки, как покрашенные (теперь уже "3"). Таким образом отсечется все это пространство, ограниченное нашими "1" и концами массива, т.к. уже покрашенные клетки пропускаются при переборе. в итоге получится: 331111113333 333111221133 333311122113 331111122113 331111111113 Все "3" - открытые области. Все "2" - замкнутые пространства. |
Ответ: Обработка массива.
Illidan и Michael спс.
Пока читал пост михаеля придумал не самый быстрый, но рабочий алгоритм. Закрашивать все точки по одну из сторон от примой проведенной указателем. Если до края дошел-значит зря и все отменяю. Если до края масива не дошел-все правильно. Кстати модеры-не могли бы вы перенести эту тему в алгоритмы, а то её и впрям место там т.к. нужен не код а алгоритм. П.С. Не понял-верно ли Michael понял мою идею .Но сам из его поста ничего не понял. Всеравно спс. |
Ответ: Обработка массива.
Ну я примерно про это говорил (там к концу ближе)
|
Ответ: Обработка массива.
Теперь понял о чем ты говоришь. Спасибо за помощь. Я так и хотел сделать. Сейчас разберусь с тем маном, что ты подкинул. Может там еще чтонить полезное есть. По мере написания поста родилась оригинальная мысль:
Не парится с заливкой 2 т.к. это надо делать от каждого элемента пути, что долго. Можно просто разделить края на отрезки, чтоб по краям были ограничители, тоесть: Код:
001111110000 Тоесть сократим к минимуму количество лишних операций при закраске крайних кусков. А все что не закрашено будет внутреним и ограниченым сторонами из единичек со всех сторон. Тоесть идем от обратного. Есть только одна загвоздка-курсор может разнвми цветами закрашивать в зависимости от квадратика от которого он отошел. Можно ли считать, что Закрытая полость при таком методе образуется только если курсор пройдет по краю? Это учитывая что есть "монстры" разрушающие кубики переводя их из 1 в 0? Но строящих нету.Вроде должно. Интересно чье нибудь мнение? |
Часовой пояс GMT +4, время: 08:25. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot