Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
2-1211399141
dumnsar
2008-05-21 23:45
2008.06.15
Драг дроп


2-1211139229
Werewolf-Prankster
2008-05-18 23:33
2008.06.15
Ошибка: "Project xxxx raised exception class..."


6-1188888728
Alexey_k
2007-09-04 10:52
2008.06.15
Indy и подсчёт траффика


2-1211452478
Павел
2008-05-22 14:34
2008.06.15
TStringList; в Дельфи 6 - где объявить?


6-1189018762
rar
2007-09-05 22:59
2008.06.15
Дата изменения файла по ftp





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский