Учим компьютер вскрывать минное поле

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Учим компьютер вскрывать минное поле

Сообщение zHackLeX » 14.05.2005 (Сб) 14:17

Как научить комп вскрывать сапёр? Качественно?

Пока у меня моя программа на поле 25х15
спокойно расправляется с 50-60 минами, а больше -
уже пасует. Но алгоритм у меня пока простой.

1) Если у клетки неоткрытых соседей столько же, какова её цена, обозначаем всех неоткрытых соседей как мины.
2) Если у клетки соседей-мин столько же, какова её цена, открываем остальные соседние.

Вообще этого хватает на intermediate.
Какие ещё мудрости можно включить?

ЗЫ. Пока думаю над внедрением принципа "пар" (в будущем - и "троек")
(в двух клетках одна мина)=>пара. Если соседи - пары+мины = цена клетки, остальные соседи (не из пар и не мины) - открываются.
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 14.05.2005 (Сб) 14:31

Чем больше мин, тем чаще встречаются ситуации, когда х.з., где находится мина. По-любому нужно добавить метод научного тыка :lol:
Лучший способ понять что-то самому — объяснить это другому.

Vasya
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 23.04.2002 (Вт) 16:49
Откуда: Togo

Сообщение Vasya » 14.05.2005 (Сб) 15:58

Вроде мелкомягкие за идеальный алгоритм неплохие ляли дают? :wink:

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 15.05.2005 (Вс) 1:25

Меня больше всего раздражает то, что ошибиться можно только раз. Я поэтому написал для себя нового сапера с 3 жизнями, играть интереснее.
А вообще бывают такие ситуации, кагда мина в одной из двух соседних клеток и определить, где она невозможно.

Sasha_karasov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 436
Зарегистрирован: 03.03.2005 (Чт) 19:38
Откуда: ua.dp

Re: Учим компьютер вскрывать минное поле

Сообщение Sasha_karasov » 15.05.2005 (Вс) 1:46

zHackLeX писал(а):Как научить комп вскрывать сапёр? Качественно?

Пока у меня моя программа на поле 25х15
спокойно расправляется с 50-60 минами, а больше -
уже пасует. Но алгоритм у меня пока простой.

1) Если у клетки неоткрытых соседей столько же, какова её цена, обозначаем всех неоткрытых соседей как мины.
2) Если у клетки соседей-мин столько же, какова её цена, открываем остальные соседние.

Вообще этого хватает на intermediate.
Какие ещё мудрости можно включить?

ЗЫ. Пока думаю над внедрением принципа "пар" (в будущем - и "троек")
(в двух клетках одна мина)=>пара. Если соседи - пары+мины = цена клетки, остальные соседи (не из пар и не мины) - открываются.


Я как-то видел такую задачу на олимпиаде по информатике, только там нужно составить программу минер и сапер, и потом один участник олимпиады минирует другому поле а тот разминирует своей программой, и на оборот.
Короче говоря те надо на форум по олимпиадным задачам.
Просто я тоже задавал вопрос по олимпиадным задачам меня послали на форумы по этой теме.
Удачи!
С уважением, Алексадр.

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 15.05.2005 (Вс) 12:35

Идеальный - ну это вы загнули.
За идеальное может и дают.

А нам нужно просто повысить эффективность.
Так что, никто ничего подобного здесь не писал?
Жаль...
Будем искать (©).
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 17.05.2005 (Вт) 11:33

У меня была программулина, самообучающаяся, которая вскрывала сапера. По началу проигрывала, но с увеличением числа игр больше выигрывала. Если интересно, могу поискать ( как комп восстановлю :D ), елси найду выложу.

В смысле не моя, в инете нашел.
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Re: Учим компьютер вскрывать минное поле

Сообщение Oxygen » 17.05.2005 (Вт) 13:25

Sasha_karasov писал(а):
Я как-то видел такую задачу на олимпиаде по информатике, только там нужно составить программу минер и сапер, и потом один участник олимпиады минирует другому поле а тот разминирует своей программой, и на оборот.
Короче говоря те надо на форум по олимпиадным задачам.
Просто я тоже задавал вопрос по олимпиадным задачам меня послали на форумы по этой теме.


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

2zHackLeX В случаях, когда конкретного решения нет, единственное, что остается - вводить рандом.
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 24.05.2005 (Вт) 14:12

[offtop]Перво-наперво, прежде чем читать мои размышления,
ОТКЛЮЧАЙТЕ МОДУЛЬ ВООБРАЖЕНИЯ. Во избежание.[/offtop]


ну, первые два случая я описал уже. То есть,
ты щёлкаешь, открываешь компу немного, чтобы
было, с чего начать, и дальше он погнал сам:
1) Если у клетки число соседей (неоткрытых и мин)
равно числу, на клетке нарисованному, на всех
соседях устанавливаются флажки "МИНА".
2) Если у клетки число соседей больше, чем число,
нарисованное на ней (ниже - цена клетки, ЦК), а число мин-соседей
равно ЦК, всех остальных соседей мы вскрываем,
так как среди них, извиняюсь, мин нет. ( :) )

А дальше - более продвинутые идеи. Вот только их реализация пока
хромает.

1) Алгоритм пар. Если у клетки число соседей равно (ЦК+1),
а число мин - (ЦК-1), два соседа, не помеченные как мины,
формируют ПАРУ.
2) Если некая клетка среди соседей имеет
ЦК = Число Мин + Число пар (соседних с клеткой),
вскрываются все остальные соседи, не входящие в таковые пары.
3) Если ЦК+1 = число соседей и среди соседей есть ПАРА, все
соседи, НЕ входящие в пару, получают статус мин.


4).... (то же с ТРОЙКАМИ).


...И в конце: Если число мин на поле (ведь оно известно) равно числу
неоткрытых клеток, игра закончена.

Вот и все идеи на данный момент.
Вот только реализация алгоритма обработки пар... :oops:
Короче, вы когда-нибудь видели пьяного в тюфельку ежика,
идущего с шестом по канату на двух лапах? :twisted:
И это при том, что по идее все должно работать!
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 01.06.2005 (Ср) 19:27

А когда попадаем в ситуацию гдле хз где мина, набираем xyzzy =)
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 104

    TopList