Форум: "Игры";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
ВнизАлгоритм удаления шаров Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c