Главная страница
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.01 c
15-1209886588
Ega23
2008-05-04 11:36
2008.06.15
Вэкап-файлы (те которые с ~)


6-1188995111
ЗабылИмя
2007-09-05 16:25
2008.06.15
Как через сеть включить удалённый компьютер?


2-1211234395
deras
2008-05-20 01:59
2008.06.15
Как установить в DBLookupComboBox1 выбраной по умолч. 1-ю запись?


15-1209629962
Алексин
2008-05-01 12:19
2008.06.15
Wi-Fi в квартире


15-1209545526
x-man
2008-04-30 12:52
2008.06.15
winapi