![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
SPrograMMer |
|
|||
![]() Спамер :) ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 5.11.2004 Где: Краснодар Репутация: нет Всего: 6 |
С удовольствием: пью-пью-пью-пью... ![]() Значит, представляем наше поле в виде невзвешенного графа. (что такое граф я думаю понятно) Если взять некую вершину этого графа за корень, то можно пустить волну от этого корня к другим узлам, таким образом, самые ближайшие узлы будут иметь индекс 1, следующие, от 1-ых (да чуть не забыл корень - это 0) но еще не помеченные - 2, и так далее, так можно пройти до любой вершины и решить большое количество задач. Применительно к саперу (поле необязательно представлять в виде графа): при щелчке на ячейку, где нет цифры, мы должны открыть всю область, где этих чифр нет, но смежных с текущей. Делаем так: наша ячейка - корень, помечаем её 0 (да кстати, лучше что быбыло два массива - первый непосредственно поле, в котором в ячейке может быть число от 1-8 - число, 0 - пусто, -1 - мина; и второй - массив, изначально заполненный -1, в котором и будем пускат волну) запоминаем эту ячейку (пара чисел X и Y). Пускаем волну в 4 стороны - влево, вправо, вверх и вниз, если в достугнутой волной полем стоит 0, то есть пусто (это из первого массива), значит во вотором массиве помечаем эту клетку как 0, и теперь данная клетка у нас - вершина, проделываем с ней то ж самое. Когда клетки возле текущей вершины заканчиваются - возвращаемся на уровень ниже - к предыдущей вершине. Как только усе закончится - можно отображать пустые клетки, смотря на второй массив, где ячейки равны 0-ям. Усе! ![]() ![]() ![]() -------------------- животное = зверь законченный гентушник |
|||
|
||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
неа... пытаюсь удостовериться, что под одними и теми же словами понимаются одни и те же понятия ![]()
если не ошибаюсь, в моем сообщении и описан волновой алгоритм ![]() -------------------- qqq |
||||
|
|||||
nuclear |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.2.2005 Репутация: нет Всего: нет |
А не проще ли так.
Берем пустую клетку. Осматриваемся вокруг нее. Если в округе есть пустые - добавляем их в массив. Осматриваем первый элемент массива - если есть ИНЫЕ пустые, добавляем их в конец нашего же массива. Осматриваем второй элемент массива - если есть ИНЫЕ пустые, опять добавляем их в конец нашего же массива. И так до тех пор пока не дойдем до конца. |
|||
|
||||
De Gray |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.2.2005 Где: Регистрация? Репутация: нет Всего: 4 |
Цитата maxim1000, только очередь заменена массивом --------------------
Извяните, шо мы к вас за поможите обращаимси. |
|||
|
||||
@!!ex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 2.3.2005 Репутация: нет Всего: нет |
Как то вы все не так делаете, только в конце начали нормальные алгоритмы предлагать. ИМХО алгоритм заливки уже лет 15(Со времен появления графики) не меняется.
|
|||
|
||||
De Gray |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.2.2005 Где: Регистрация? Репутация: нет Всего: 4 |
Очень остроумно... учитывая, что в начале и в конце были предложены ОДИНАКОВЫЕ алгоритмы. --------------------
Извяните, шо мы к вас за поможите обращаимси. |
|||
|
||||
nuclear |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.2.2005 Репутация: нет Всего: нет |
Самое печальное, что все свелось примерно к тому что собственно я и реализовал изначально в своей проге. У меня проблема была (и есть) в том, что подобный алгоритм написан на AS, и естесно интерпретирующих скоростей языка явно не хватает.
Конечно, все это можно без проблем закодить и на си и на обджект паскале в Делфе - не вопрос. Просто я где-то видел сапера написанного во флеше, где также имеется притормаживание, но оно заметно меньше чем у меня. Возможно я испольжовал ту же идею, но не совсем оптимизировал свой код. Этим собственно и была вынесена тема на обсуждение. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
в том-то и дело, что алгоритм, который я предложил, приводит к тому, что область как бы "распахивается"
если надо быстро, то тут есть другие алгоритмы: нечто похожее было предоржено:
только надо учесть, что область может быть довольно сложной, а потому придется алгоритм подправить... -------------------- qqq |
|||
|
||||
binisio |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 12.1.2005 Где: санкт-петербург Репутация: 2 Всего: 2 |
nuclear
у меня тоже была подобная проблема: писал игру на as, думал, что так будет шустрее. тормозило сильно. тот же код на си работал намного быстрее. хороший эффект получается при их совместном использовании: все что касается логики - на с++, а вывод на экран, прорисовку - на as. |
|||
|
||||
nuclear |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.2.2005 Репутация: нет Всего: нет |
binisio можешь объяснить как ты слепил в одно код на си и ас?
|
|||
|
||||
@!!ex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 2.3.2005 Репутация: нет Всего: нет |
Видимо, я не совсем въезжаю в тему.....
Что есть as? |
|||
|
||||
nuclear |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.2.2005 Репутация: нет Всего: нет |
@!!ex ActionScript
|
|||
|
||||
binisio |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 12.1.2005 Где: санкт-петербург Репутация: 2 Всего: 2 |
nuclear
![]() ![]() |
|||
|
||||
@!!ex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 2.3.2005 Репутация: нет Всего: нет |
Я тоже подумал о не допиманном слове asm. Только в контексте с остальным текстом оно ну никак не увязывалось..... ![]() 1) Можно поподробнее об as? 2) Не имеет смысла совмещать ассемблер и С. Дело в том, что в этом случае компилятор не может нормально оптимизировать код. Поэтому нужно либо писать куски на чистом С, либо на чистом асм. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |