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

Поиск:

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


Новичок



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

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



Решил забацать сапера. Размерность, кол-во бомб и т.д. задаются в начале. Заполняется массив, перемешиваются бомбы, расставляются цифры, ставятся флажки.... Но вот беда, когда кликаем по пустой области, т.е. там где нет ни бомбы ни цифры, нужно "распахнуть" эту область во все уголки. Но так чтобы там где нет прохода граничащая область не распахивалась. Все как в обычном сапере. smile

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

Может кто писал сапера, дайте идею алгоритма раскрытия пустых клеток с граничащами цифрами.

И еще. Советовать может каждый. Дескать записывай новые клетки .. . проверяй их снова - на деле все гораздо сложнее - нужно проверенные идеи.

Представтьте себе лужу неправильной формы на дороге. Если я кликну на край лужи - она должна вся раскрытся, и если я кликну куда-то в центр, она тоже должна распахнуться во все уголки. Причем соседние лужи не соединяющиеся с данной должны быть закрыты.
PM MAIL   Вверх
maxim1000
Дата 4.3.2005, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



можно посмотреть алгоритмы заливки
а вообще, если хочется чтобы именно "распахивалась", можно попробовать следующее:
1. делаем очередь
2. помещаем в нее исследуемую точку
3. берем из очереди очередную smile точку
4. если она пустая, добавляем в очередь всех необработанных соседей
5. показываем текущую клетку
6. если очередь пустая, заканчиваем
7. переходим на (3)
скорее всего (не пробовал), распахивание будет происходить в виде ромба, но на маленьких областях будет похоже на обычную волну...


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


НЕ рыжий!!!
****


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

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



nuclear
Я что то не понял......клетки которые не "контактируют" с минами - пустые....вот и показывай их в цикле, пока не наткнешься на границу(клутку контактирующую с миной)


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
maxim1000
Дата 4.3.2005, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
Я что то не понял......клетки которые не "контактируют" с минами - пустые....вот и показывай их в цикле, пока не наткнешься на границу(клутку контактирующую с миной)

ну нельзя же сразу показывать все пустые клетки - так играть неинтересно будет smile
если наткнулся на пустую область - ее и показать, но не другие


--------------------
qqq
PM WWW   Вверх
S.A.P.
Дата 4.3.2005, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Здесь одной рекурсивной функции хватит. Санируй по 4-м направлениям, при этом проверенные клетки запоминай. Тормозить не будет.
PM MAIL   Вверх
~FoX~
Дата 4.3.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


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

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



Цитата
ну нельзя же сразу показывать все пустые клетки

А почему все то?


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
maxim1000
Дата 4.3.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
клетки которые не "контактируют" с минами - пустые....вот и показывай их в цикле, пока не наткнешься на границу(клутку контактирующую с миной)

Цитата
ну нельзя же сразу показывать все пустые клетки

Цитата
А почему все то?

это меня немного проглючило smile


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


Шустрый
*


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

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



Цитата(maxim1000 @ 4.3.2005, 16:09)
можно посмотреть алгоритмы заливки
а вообще, если хочется чтобы именно "распахивалась", можно попробовать следующее:
1. делаем очередь
2. помещаем в нее исследуемую точку
3. берем из очереди очередную  точку
4. если она пустая, добавляем в очередь всех необработанных соседей
5. показываем текущую клетку
6. если очередь пустая, заканчиваем
7. переходим на (3)
скорее всего (не пробовал), распахивание будет происходить в виде ромба, но на маленьких областях будет похоже на обычную волну

Наросал-- открывает ВСЕ пустые клетки, остаются только мины -- бери их голыми руками.
По-моему мнению сапер работает в режиме что-то похоже на
Идем от означенной точки влево и вправо, пока не встретится точка, в области которой есть 2(?), соприкасающиеся мины -> получили набор точек, от каждой точек из набора идем вверх и вниз, покуда не будет выполнено
Цитата
пока не встретится точка, в области которой есть 2(?), соприкасающиеся мины
. 1 раз. Просто и незатейливо, часть
поля открывается на другой интересно играть.
--------------------
Извяните, шо мы к вас за поможите обращаимси.
PM MAIL   Вверх
maxim1000
Дата 4.3.2005, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
Наросал-- открывает ВСЕ пустые клетки, остаются только мины -- бери их голыми руками

это я виноват: под пустой клеткой я имел в виду клетку, где даже цифра не пишется - т.е. вокруг мин нет
Цитата
Идем от означенной точки влево и вправо, пока не встретится точка, в области которой есть 2(?), соприкасающиеся мины -> получили набор точек, от каждой точек из набора идем вверх и вниз, покуда не будет выполнено

будет глючить для невыпуклых областей (например, кольцо)
а вот если после прохода вверх и вниз еще посмотреть, что осталось, то получится один из стандартных алгоритмов заливки (если я не ошибаюсь)


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


Шустрый
*


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

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



Цитата(maxim1000 @ 4.3.2005, 20:10)

не ошибаюсь

Оно самое.Посмотреть -- убрано, чтоб не тормозило вообще.

Цитата(maxim1000 @ 4.3.2005, 20:10)

для невыпуклых областей

1) Почему кольцо -- невупуклая область.
2) Для области образованнной, пространством между 4 -- кольцами(что-то похожее ты имел в виду?)--откроется квдрат, "вписанный в эту область"(Чем меньше открыто, те интереснне играть). Примерно тоже делает и сапер,может ходит туда-сюда-верх-низ ре один раз а 2,3--тоже можно.

--------------------
Извяните, шо мы к вас за поможите обращаимси.
PM MAIL   Вверх
maxim1000
Дата 4.3.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
1) Почему кольцо -- невупуклая область

1. под кольцом я подразумевал большой круг, из которого вырезали маленький (центры общие)
2. выпуклая область - для каждой пары точек из этой области в нее входит весь отрезок между ними smile
для кольца это не выполняется (например, если точки симметричны относительно центра)

теперь возьмем точку внутри кольца, которая находится на одной горизонтали с центром
из нее пройдемся влево и вправо - получится отрезок, лежащий на радиусе большого круга
от каждой точки этого отрезка пройдемся вверх и вниз - получим всего лишь сегмент большого круга

Цитата
Чем меньше открыто, те интереснне играть

а вот с этим хотелось бы поспорить
данная функция используется как раз для автоматизации одной простой рутинной операции: если вокруг точки нет мин, то нужно открывать все соседние
увеличение доли этих действий в игре как раз снижает ее интерес (задалбывает, проще говоря smile)


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


Шустрый
*


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

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



Цитата(maxim1000 @ 4.3.2005, 20:41)
выпуклая область - для каждой пары точек из этой области в нее входит весь отрезок между ними

Издеваемся... smile
--------------------
Извяните, шо мы к вас за поможите обращаимси.
PM MAIL   Вверх
SPrograMMer
Дата 6.3.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


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

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



млин... знакомы вы с волновой теорией графов?
Все решается ОООООчень просто, рассказать?


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


Новичок



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

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



Хотелось бы обратить ваше внимание еще раз на некоторые факты (не все их учитывали):
1. Всегда нужно ориенитроваться на не выпуклые области (выпуклые будут частным случаем)
2. Возможны случаи когда области соединяются не одним перешейком (циклы, кольца и т.д. о которых уже говорилось)
3. Как и в ВинМаин проходом считается случай, если клетки касаются по диагонали.
4. Открывать нужно не только пустые клетки но и цифры рядом с ними.
5. В центре области может быть кольцо из "земли", а внутри опять облатсь-анклав.
PM MAIL   Вверх
De Gray
Дата 6.3.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(SPrograMMer @ 6.3.2005, 11:46)
Все решается ОООООчень просто, рассказать

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

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

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

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

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


 




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


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

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