Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пишем сапера 
:(
    Опции темы
SPrograMMer
Дата 6.3.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: нет
Всего: 6



Цитата(De @ 6.3.2005, 17:41)
Спой, светик, не стыдись

С удовольствием: пью-пью-пью-пью... smile

Значит, представляем наше поле в виде невзвешенного графа. (что такое граф я думаю понятно)
Если взять некую вершину этого графа за корень, то можно пустить волну от этого корня к другим узлам, таким образом, самые ближайшие узлы будут иметь индекс 1, следующие, от 1-ых (да чуть не забыл корень - это 0) но еще не помеченные - 2, и так далее, так можно пройти до любой вершины и решить большое количество задач.
Применительно к саперу (поле необязательно представлять в виде графа):
при щелчке на ячейку, где нет цифры, мы должны открыть всю область, где этих чифр нет, но смежных с текущей. Делаем так: наша ячейка - корень, помечаем её 0 (да кстати, лучше что быбыло два массива - первый непосредственно поле, в котором в ячейке может быть число от 1-8 - число, 0 - пусто, -1 - мина; и второй - массив, изначально заполненный -1, в котором и будем пускат волну) запоминаем эту ячейку (пара чисел X и Y). Пускаем волну в 4 стороны - влево, вправо, вверх и вниз, если в достугнутой волной полем стоит 0, то есть пусто (это из первого массива), значит во вотором массиве помечаем эту клетку как 0, и теперь данная клетка у нас - вершина, проделываем с ней то ж самое. Когда клетки возле текущей вершины заканчиваются - возвращаемся на уровень ниже - к предыдущей вершине. Как только усе закончится - можно отображать пустые клетки, смотря на второй массив, где ячейки равны 0-ям.
Усе! smile smile smile


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
maxim1000
Дата 7.3.2005, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



Цитата
Издеваемся...

неа... пытаюсь удостовериться, что под одними и теми же словами понимаются одни и те же понятия smile
Цитата
то можно пустить волну от этого корня к другим узлам

если не ошибаюсь, в моем сообщении и описан волновой алгоритм smile


--------------------
qqq
PM WWW   Вверх
nuclear
Дата 7.3.2005, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 23.2.2005

Репутация: нет
Всего: нет



А не проще ли так.
Берем пустую клетку. Осматриваемся вокруг нее. Если в округе есть пустые - добавляем их в массив.
Осматриваем первый элемент массива - если есть ИНЫЕ пустые, добавляем их в конец нашего же массива.
Осматриваем второй элемент массива - если есть ИНЫЕ пустые, опять добавляем их в конец нашего же массива. И так до тех пор пока не дойдем до конца.
PM MAIL   Вверх
De Gray
Дата 8.3.2005, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.2.2005
Где: Регистрация?

Репутация: нет
Всего: 4



Цитата(nuclear @ 7.3.2005, 20:43)
А не проще ли так.
Берем пустую клетку. Осматриваемся вокруг нее. Если в округе есть пустые - добавляем их в массив.
Осматриваем первый элемент массива - если есть ИНЫЕ пустые, добавляем их в конец нашего же массива.
Осматриваем второй элемент массива - если есть ИНЫЕ пустые, опять добавляем их в конец нашего же массива. И так до тех пор пока не дойдем до конца.

Цитата maxim1000, только очередь заменена массивом

--------------------
Извяните, шо мы к вас за поможите обращаимси.
PM MAIL   Вверх
@!!ex
Дата 8.3.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.3.2005

Репутация: нет
Всего: нет



Как то вы все не так делаете, только в конце начали нормальные алгоритмы предлагать. ИМХО алгоритм заливки уже лет 15(Со времен появления графики) не меняется.
PM MAIL   Вверх
De Gray
Дата 8.3.2005, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.2.2005
Где: Регистрация?

Репутация: нет
Всего: 4



Цитата
Как то вы все не так делаете, только в конце начали нормальные алгоритмы предлагать. ИМХО алгоритм заливки уже лет 15(Со времен появления графики) не меняется.

Очень остроумно... учитывая, что в начале и в конце были предложены ОДИНАКОВЫЕ алгоритмы.
--------------------
Извяните, шо мы к вас за поможите обращаимси.
PM MAIL   Вверх
nuclear
Дата 10.3.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 23.2.2005

Репутация: нет
Всего: нет



Самое печальное, что все свелось примерно к тому что собственно я и реализовал изначально в своей проге. У меня проблема была (и есть) в том, что подобный алгоритм написан на AS, и естесно интерпретирующих скоростей языка явно не хватает.
Конечно, все это можно без проблем закодить и на си и на обджект паскале в Делфе - не вопрос. Просто я где-то видел сапера написанного во флеше, где также имеется притормаживание, но оно заметно меньше чем у меня. Возможно я испольжовал ту же идею, но не совсем оптимизировал свой код. Этим собственно и была вынесена тема на обсуждение.
PM MAIL   Вверх
maxim1000
Дата 10.3.2005, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



в том-то и дело, что алгоритм, который я предложил, приводит к тому, что область как бы "распахивается"
если надо быстро, то тут есть другие алгоритмы:
нечто похожее было предоржено:
Цитата(De @ 4.3.2005, 18:05)
Идем от означенной точки влево и вправо, пока не встретится точка, в области которой есть 2(?), соприкасающиеся мины -> получили набор точек, от каждой точек из набора идем вверх и вниз, покуда не будет выполнено

только надо учесть, что область может быть довольно сложной, а потому придется алгоритм подправить...


--------------------
qqq
PM WWW   Вверх
binisio
Дата 11.3.2005, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 12.1.2005
Где: санкт-петербург

Репутация: 2
Всего: 2



nuclear
у меня тоже была подобная проблема: писал игру на as, думал, что так будет шустрее. тормозило сильно. тот же код на си работал намного быстрее. хороший эффект получается при их совместном использовании: все что касается логики - на с++, а вывод на экран, прорисовку - на as.
PM MAIL WWW   Вверх
nuclear
Дата 11.3.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 23.2.2005

Репутация: нет
Всего: нет



binisio можешь объяснить как ты слепил в одно код на си и ас?
PM MAIL   Вверх
@!!ex
Дата 12.3.2005, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.3.2005

Репутация: нет
Всего: нет



Видимо, я не совсем въезжаю в тему.....
Что есть as?
PM MAIL   Вверх
nuclear
Дата 12.3.2005, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 23.2.2005

Репутация: нет
Всего: нет



@!!ex ActionScript
PM MAIL   Вверх
binisio
Дата 14.3.2005, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 12.1.2005
Где: санкт-петербург

Репутация: 2
Всего: 2



nuclear
smile сори, я думал речь идет о аssembler smile
PM MAIL WWW   Вверх
@!!ex
Дата 14.3.2005, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.3.2005

Репутация: нет
Всего: нет



Цитата(binisio @ 14.3.2005, 12:28)
nuclear
smile сори, я думал речь идет о аssembler smile

Я тоже подумал о не допиманном слове asm. Только в контексте с остальным текстом оно ну никак не увязывалось..... smile поэтому и спросил.........

1) Можно поподробнее об as?

2) Не имеет смысла совмещать ассемблер и С. Дело в том, что в этом случае компилятор не может нормально оптимизировать код.
Поэтому нужно либо писать куски на чистом С, либо на чистом асм.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.