Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Алгоритм свободных клеток.. (http://www.flasher.ru/forum/showthread.php?t=83630)

Psycho Tiger 10.08.2006 10:43

Алгоритм свободных клеток..
 
Извините за имя не знаю как назвать.
Всем привет!
ВОпщем вопрос такой...
У меня есть поле
предлположим такое
*******
**--***
****--*
-------*
*****--
Ну и так далее ето не важно..
* - пустой блок
а - скажем... блок с ящиком
Мне необходимо найти между какими ящиками есть растояние в 3,4,5 и тд клеток.
И например сделать их полупрозрачными.
Опять таки я не прошу кода, я прошу сам алгоритм.
По идее можно перебрать все циклом с проверкой, но если размеры поля будут огромными (64*64 клетки) то тогда флэшка может повиснуть.
Подскажите аглоритм пожалуйста :)

miramax 10.08.2006 11:17

Думаю, кроме как перебора нет другого способа. Только ты не клетки проверяй а ящики... например в поле 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 клиент для шахмат.
Думаю японокросы весчь апсалютна такая же, я сам хотел взяться за этот заказ :)

Psycho Tiger 10.08.2006 14:51

Хм... а ты прав...
Ты натолкнул меня на 1 идею (я чот как то не сообразил подумать што мона проверять ящики а не клетки)
Можно нарисовать как бы стеку их этих ящикоф - линия от ящика до ящика - и например если длина линия <cellWidth*3 то тогда подсвечиваем эти клетки... хм... а как подсвечивать хиттестом штоль?
И ещё надо тригономертией опередлить наклон линии и отвергнуть линии которые под наклоном в 45... хм...
Это так, мысли в слух.
Теперь будем думать как же определить на лежащей линии какие клетки лежат.. бр....
Хотя можно определить координаты коннца этой линии и сверить с координатами и тем самым предположить какие блоки лежат между ними! О как!
И никаково перебора ХУХОХО!
Спасиб те... кста если вдруг кто знает как это сделать што я сказал напишите сюда :)
А я пшел мучитца

AlexSol 10.08.2006 14:55

так нужны расстояния только горизонталь и вертикаль?
и от одного ящика ко всем или только соседним?

Psycho Tiger 10.08.2006 15:45

Да только горизонталь и вертикаль.
И нужно найти ВСЕ возможные варианты по 3 клетки свободных...
Разницы не вижу - если только к соседним то тогда быстродейственость
А если ко всем то более просто скрипт...
Результат то 1 и тот же.

AlexSol 10.08.2006 16:09

Вложений: 1
в архиве пример с растоянием в 2. (с растоянием 3 просто очень мало генерило :) )

KidsKilla 10.08.2006 16:10

выделяем "блоки" свободных клеток: по горизонтали:
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;

я прально понял задачу то? =) или те именно размеры блоков определить надо?

Psycho Tiger 10.08.2006 17:31

Цитата:

Сообщение от KidsKilla
выделяем "блоки" свободных клеток: по горизонтали:
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;

я прально понял задачу то? =) или те именно размеры блоков определить надо?

Ты мне сначала обьясни выделяем блоки свободных клеток ето как?
Сколько свободных блоков мы имеем?
Блин.. кароч давайте думать так...
Пощитайте што у мя есть игровое поле - которое там
И у меня есть скажем полоски - по 3 блока в длину и такая же в длину.
И мне надо эту полоску вставить - но её нельзя ставить на ящики.
И мне надо подсветить те места куда мне можно её вставить.
Задача конечно не такая, но пример простейший я вам описал.
Алекс, спасибо тебе, но флэш у меня этот файл не открыл :)))))))))))
Перекомпили в 7 рку я на ней сижу...
А вообще уже можете не праится - я сделал обычными цикалми - на удивление мне скрипт выполнялся 20 мс - очень даже приемлимая для меня цифра. Всем спасибо за помощь..
Тока Алекс, выложи заново, посмотреть как ты сделал охота

AlexSol 10.08.2006 17:46

Вложений: 1
а уж и забыл как под 7 делать... лови:

если понравиться/не понравиться пиши

KidsKilla 10.08.2006 18:28

У меня есть поле
предлположим такое
*******
**--***
****--*
-------*
*****--

это:
Код:

var arr = [
[0,0,0,0,0,0,0]
[0,0,1,1,0,0,0]
[0,0,0,0,1,1,0]
[1,1,1,1,1,1,0]
[0,0,0,0,0,1,1]
];

свободные клетки это: (для 2й строки в реале должно быть 2 цикла =))

Код:

var lines = [];
for(var i=0;i<arr[1].length;i++){
  if(arr[1][i]==0){
    var l = 0;
    while([1][i+l]==0){++l}
    lines.push({x:i,y:1,length:l});
    i+=l;
  }
}

работоспособность не проверял...


Часовой пояс GMT +4, время: 16:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.