Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.15;
Скачать: CL | DM;

Вниз

Алгоритм удаления шаров   Найти похожие ветки 

 
electroman239 ©   (2007-02-10 20:29) [0]

1)Есть поле из шариков, каждый ряд смещен относительно другого на 1/2 диаметра. Таким образом, у каждого шарика 6 соседок. массив тколор заполнен для каждого шара рандомным значением цвета:красный синий или зеленый. есть функция которая возвращает булувское значение тру если попали в шарик. Нужен следующий алгоритм удаления:удалить все шарики того же цвета в который попали, которые каким либо образо напрямую или же посредством цепочки соприкасаются с шариком в который попали.
Многие наверное знают такие игрушки...
У меня была парочка идей(рекурсиями кажется это наз-ся) но...
Подкиньте пожалуйста=)
2)Почему при обычном компилировании fps на уровне 1-2, а при запуске icq поднимается до нормальных значений 20-30?Это "правило" действует и на скомпилированный экзишник=) В чем проблема?


 
grouzd)ev ©   (2007-02-10 23:20) [1]

1) ну правильно, сделай рекурсиями, там не так уж много вычислений. делается очень просто:

procedure Check(x, y : integer);
var
i, j : integer;
begin
balls[x, y].dead := true;
for i := -1 to 1 do
 for j := -1 to 1 do
   if (i < 1) or (j = 0) then   //нужно чтоб пропустить два "не соседних" шарика
     if balls[x+i, y+j].color = balls[x, y].color then      
       if not balls[x+i, y+j].dead then
         Check(x+i, y+j);
end;

остается только нарисовать четные ряды смещенными вправо

ps "1/2 диаметра" - радиус =)

2) мистика какая-то. давай демку

---
... we are walking on a thin line and you better avoid the risk ...


 
electroman239 ©   (2007-02-13 14:38) [2]

Спасибо!Только мне сложно разобраться в этом алгоритме...Не могли бы вы объяснить "словами" как он работает...Именно суть работы. Заранее спаибо!


 
grouzd)ev ©   (2007-02-13 17:24) [3]

да уж, гигантская процедура.
подразумевается что шарики записаны balls : array[1..width, 1..height] of TBall
где
TBall = record
 dead : boolean;
 color : TColor;
 ....
end;

1) при клике мышью на шарик вызываем Check в которую передаем его (шарика) координаты x и y
2) убиваем шарик, назначив ему dead := true
3) в циклах проходим все шесть соседних (и, в том числе, сам шарик)
4) проверяем на совпадение цвет
5) проверяем мертв ли сосед (сам шарик уже 100% убит, еще в (1))
6) если в (4) совпадает и в (5) жив, "искусственно кликаем" на него (и возвращаемся в (1) с новыми координатами)

подробнее не бывает. удачи

---
... we are walking on a thin line and you better avoid the risk ...



Страницы: 1 вся ветка

Текущий архив: 2008.06.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
15-1210019900
Германн
2008-05-06 00:38
2008.06.15
Что такое JET 4.0


2-1211216757
Stepper
2008-05-19 21:05
2008.06.15
В какую библиотек входят следующие Компоненты?


4-1191314176
AndreiDeJavu
2007-10-02 12:36
2008.06.15
Доработка MSGina


15-1209937314
tButton
2008-05-05 01:41
2008.06.15
case n of


15-1209876680
TUser
2008-05-04 08:51
2008.06.15
Лицензионное все на свете - это не для авторов продукта