Главная страница
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.026 c
2-1211319869
ply
2008-05-21 01:44
2008.06.15
соединение с БД из любой формы


2-1211606107
passTree
2008-05-24 09:15
2008.06.15
Связь делфи с Excel


6-1189062586
tytus
2007-09-06 11:09
2008.06.15
WinSock2 - и номера протоколов


2-1211543610
StiTch
2008-05-23 15:53
2008.06.15
Текст


2-1211180244
Canord
2008-05-19 10:57
2008.06.15
Конвертирования переменной из OleVariant в String