Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > как гаучить Ai играть в Дурака


Автор: asmdzen 16.4.2013, 15:18
Привет всем! В общем ситуация такая, есть готовая игра в дурака, есть класс типа бот которому доступны все данные игры - карты на руках, карты в колоде, функционал для определения карт которыми можно ходить. Задача состоит в том чтобы определить наиболее предпочтительную карту для совершения текущего хода. Прошу совета как можно это дело более выгодно реализовать.

идеи: создавать древо всех возможных ходов на данном этапе, выбирать наиболее подходящий по каким-то критериям.

(не нащел как отредактировать название темы)

Автор: dershokus 18.4.2013, 10:18
 Теория игр? 

Автор: Lukkoye 18.4.2013, 13:31
Тут есть масса вариантов, от продвинутых: типа использование генетических алгоритмов, до простейших, типа использования готовых техник-стратегий.

Я бы реализовал сначала простое: техники-стратегии, а уже потом, если ещё будет нужно - реализовывал бы сложное.


Стратегии: ну представь себе, что в карты играешь ты, а не компьютер. Каким образом ты выбираешь карты?

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

Например: 

Общая стратегия: вытягивать из противника сильные карты, что бы к концу игры он остался со слабыми. Эта задача разбивается на подзадачи:

1. В первую очередь избавляться от самых слабых карт.
2. По возможности копить козырей
3. Если на столе лежит много слабых карт - можно добить противника козырем, что бы противник нахапал слабых карт.
4. критерий слабости карты - количество карт, способных её побить.

и тд.

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

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

Автор: asmdzen 19.4.2013, 12:43
Lukkoye, спасибо, нужен был взгляд извне )
отбой мне запоминать не надо, я и так вижу все карты.
стратегии у меня уже были, только на более низком уровне, типа дать карту которую он не сможет побить, но я не додумался о вытягивании больших карт и пихании слабых )

Автор: math64 20.4.2013, 08:49
А вот все карты ИИ видеть не должен - должен сам запоминать какие карты получили другие игроки, иначе нечестно будет.
Отбой лучше тоже запоминать - если будешь выделять отдельным модулем, сервер не должен выдавать информацию об отбое.

Автор: asmdzen 20.4.2013, 08:57
math64, я не говорил что прога моя )
я пишу для нее бот, так получилось что у него есть доступ ко всему.

Автор: kolesnle 21.4.2013, 11:38
Смотри про http://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)