![]() |
|
||||||||||
|
|||||
|
Извините за имя не знаю как назвать.
Всем привет! ВОпщем вопрос такой... У меня есть поле предлположим такое ******* **--*** ****--* -------* *****-- Ну и так далее ето не важно.. * - пустой блок а - скажем... блок с ящиком Мне необходимо найти между какими ящиками есть растояние в 3,4,5 и тд клеток. И например сделать их полупрозрачными. Опять таки я не прошу кода, я прошу сам алгоритм. По идее можно перебрать все циклом с проверкой, но если размеры поля будут огромными (64*64 клетки) то тогда флэшка может повиснуть. Подскажите аглоритм пожалуйста ![]()
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Думаю, кроме как перебора нет другого способа. Только ты не клетки проверяй а ящики... например в поле 64х64 12 ящиков.
проверяем расстояние от первого ящика до остальных 11; потом от другого ящика до остальных 10; и т.д. Как программист думаю что можно использовать и такой вариант. если линий очень много и ящиков тоже оооочень много то я бы сделал так: 1 создал бы массив ящиков вообщем box[id]; где хранил бы координаты каждого ящика 2 создал бы двумерный массив в котором хранил бы все столбцы и id ящиков на них лежащих Xarray[столбец][id] 3 создал бы двумерный массив в котором хранил бы все строки и id ящиков на них лежащих Yarray[строка][id] 4 Создал бы массив двумерный клеток в котором бы хранил наличие ящиков в клетке cell[x][y], если ящик есть то сell[x][y]=id ящика если нет, то сell[x][y]=false Вообщем если подумать то из этих конструкций можно много чего придумать. Например в столбце Xarray[2] проверять только ящики из столбцов Xarray[0] и Xarray[4]. для более тонкого поиска можно использовать Xarray и Yarray вместе, что бы какие-нить закономерности выискивать. и т.д. Много раз изобретал такие алгоритмы для шахмат, для мокского боя и пр. http://flaps.ru/sites/chess/ss.swf клиент для шахмат. Думаю японокросы весчь апсалютна такая же, я сам хотел взяться за этот заказ ![]() Последний раз редактировалось miramax; 10.08.2006 в 11:53. |
|
|||||
|
Хм... а ты прав...
Ты натолкнул меня на 1 идею (я чот как то не сообразил подумать што мона проверять ящики а не клетки) Можно нарисовать как бы стеку их этих ящикоф - линия от ящика до ящика - и например если длина линия <cellWidth*3 то тогда подсвечиваем эти клетки... хм... а как подсвечивать хиттестом штоль? И ещё надо тригономертией опередлить наклон линии и отвергнуть линии которые под наклоном в 45... хм... Это так, мысли в слух. Теперь будем думать как же определить на лежащей линии какие клетки лежат.. бр.... Хотя можно определить координаты коннца этой линии и сверить с координатами и тем самым предположить какие блоки лежат между ними! О как! И никаково перебора ХУХОХО! Спасиб те... кста если вдруг кто знает как это сделать што я сказал напишите сюда ![]() А я пшел мучитца
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Dec 2005
Сообщений: 316
|
так нужны расстояния только горизонталь и вертикаль?
и от одного ящика ко всем или только соседним? Последний раз редактировалось AlexSol; 10.08.2006 в 15:04. |
|
|||||
|
Да только горизонталь и вертикаль.
И нужно найти ВСЕ возможные варианты по 3 клетки свободных... Разницы не вижу - если только к соседним то тогда быстродейственость А если ко всем то более просто скрипт... Результат то 1 и тот же.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Dec 2005
Сообщений: 316
|
в архиве пример с растоянием в 2. (с растоянием 3 просто очень мало генерило
) |
|
|||||
|
.grin! wuz here
|
выделяем "блоки" свободных клеток: по горизонтали:
7,2,3,4,1,1,5 возможных вариантов по горизонтали из последовательности в 3 клетки: 7-3=4+1=5; 2-3<0; 3-3=0+1=1; 4-3=1+1=2; 1-3<0; 1-3<0; 5-3=2+1=3; итого по горизонтали: 5+1+2+3 = 11; я прально понял задачу то? =) или те именно размеры блоков определить надо? Последний раз редактировалось KidsKilla; 10.08.2006 в 16:12. |
|
|||||
|
Цитата:
Сколько свободных блоков мы имеем? Блин.. кароч давайте думать так... Пощитайте што у мя есть игровое поле - которое там И у меня есть скажем полоски - по 3 блока в длину и такая же в длину. И мне надо эту полоску вставить - но её нельзя ставить на ящики. И мне надо подсветить те места куда мне можно её вставить. Задача конечно не такая, но пример простейший я вам описал. Алекс, спасибо тебе, но флэш у меня этот файл не открыл ))))))))))Перекомпили в 7 рку я на ней сижу... А вообще уже можете не праится - я сделал обычными цикалми - на удивление мне скрипт выполнялся 20 мс - очень даже приемлимая для меня цифра. Всем спасибо за помощь.. Тока Алекс, выложи заново, посмотреть как ты сделал охота
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Dec 2005
Сообщений: 316
|
а уж и забыл как под 7 делать... лови:
если понравиться/не понравиться пиши |
|
|||||
|
.grin! wuz here
|
У меня есть поле
предлположим такое ******* **--*** ****--* -------* *****-- это: свободные клетки это: (для 2й строки в реале должно быть 2 цикла =)) работоспособность не проверял... |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|