Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.08.2006, 10:43
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 1  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Question Алгоритм свободных клеток..

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

Старый 10.08.2006, 11:17
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 2  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
Думаю, кроме как перебора нет другого способа. Только ты не клетки проверяй а ящики... например в поле 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 клиент для шахмат.
Думаю японокросы весчь апсалютна такая же, я сам хотел взяться за этот заказ
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©


Последний раз редактировалось miramax; 10.08.2006 в 11:53.
Старый 10.08.2006, 14:51
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 3  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

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

Старый 10.08.2006, 14:55
AlexSol вне форума Посмотреть профиль Отправить личное сообщение для AlexSol Найти все сообщения от AlexSol
  № 4  
Ответить с цитированием
AlexSol

Регистрация: Dec 2005
Сообщений: 316
так нужны расстояния только горизонталь и вертикаль?
и от одного ящика ко всем или только соседним?


Последний раз редактировалось AlexSol; 10.08.2006 в 15:04.
Старый 10.08.2006, 15:45
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Да только горизонталь и вертикаль.
И нужно найти ВСЕ возможные варианты по 3 клетки свободных...
Разницы не вижу - если только к соседним то тогда быстродейственость
А если ко всем то более просто скрипт...
Результат то 1 и тот же.

Старый 10.08.2006, 16:09
AlexSol вне форума Посмотреть профиль Отправить личное сообщение для AlexSol Найти все сообщения от AlexSol
  № 6  
Ответить с цитированием
AlexSol

Регистрация: Dec 2005
Сообщений: 316
в архиве пример с растоянием в 2. (с растоянием 3 просто очень мало генерило )
Вложения
Тип файла: rar tests.rar (4.4 Кб, 36 просмотров)

Старый 10.08.2006, 16:10
KidsKilla вне форума Посмотреть профиль Отправить личное сообщение для KidsKilla Посетить домашнюю страницу KidsKilla Найти все сообщения от KidsKilla
  № 7  
Ответить с цитированием
KidsKilla
.grin! wuz here
 
Аватар для KidsKilla

Регистрация: Aug 2004
Адрес: paradise city
Сообщений: 3,981
Отправить сообщение для KidsKilla с помощью ICQ
выделяем "блоки" свободных клеток: по горизонтали:
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.
Старый 10.08.2006, 17:31
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Сообщение от 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 мс - очень даже приемлимая для меня цифра. Всем спасибо за помощь..
Тока Алекс, выложи заново, посмотреть как ты сделал охота

Старый 10.08.2006, 17:46
AlexSol вне форума Посмотреть профиль Отправить личное сообщение для AlexSol Найти все сообщения от AlexSol
  № 9  
Ответить с цитированием
AlexSol

Регистрация: Dec 2005
Сообщений: 316
а уж и забыл как под 7 делать... лови:

если понравиться/не понравиться пиши
Вложения
Тип файла: rar Desktop.rar (5.8 Кб, 30 просмотров)

Старый 10.08.2006, 18:28
KidsKilla вне форума Посмотреть профиль Отправить личное сообщение для KidsKilla Посетить домашнюю страницу KidsKilla Найти все сообщения от KidsKilla
  № 10  
Ответить с цитированием
KidsKilla
.grin! wuz here
 
Аватар для KidsKilla

Регистрация: Aug 2004
Адрес: paradise city
Сообщений: 3,981
Отправить сообщение для KidsKilla с помощью ICQ
У меня есть поле
предлположим такое
*******
**--***
****--*
-------*
*****--

это:
Код:
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, время: 03:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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