Карточные игры отличаются большим разнообразием правил и обычно включают более двух участников. Это делает их сложнее многих позиционных иф и требует построения правил принятия решений, которые могут изменяться в течение игры.
В качестве примера разработки рассмотрим старинную русскую карточную ифу в «Подкидного дурачка». Правила этой игры хорошо известны, поэтому не будем их описывать. Так как количество возможных в ифе ситуаций достаточно велико, а возможные действия противников плохо предсказуемы, попытки определить путь достижения цели компьютерного ифока в пространстве состояний задачи не имеют смысла. В данном случае желательно выработать принципы оценивания текущей ситуации, позволяющие судить о степени приближения к конечной цели, которая заключается в том, чтобы первому среди всех ифоков остаться без карт на руках. Стремление к минимизации количества карт в процессе игры далеко не всегда обеспечивает конечный успех ифока, поэтому представляется целесообразным ввести понятие относительного потенциала игрока, который следует поддерживать максимально высоким в течение игры.
Потенциал можно вычислить по следующей формуле:
где п — количество карт на руках;— ранг i-й карты, принимающий значения от 1 до 9 в соответствии с достоинством карты; — признак козырной карты,, если /-я карта принадлежит ккозырной масти, и— в противном случае.
В течение игры ряд событий происходит по нормативным правилам, т.е. без учета мнения ифоков. К таким событиям относятся первоначальная раздача карт ифокам, взятие новых карт из колоды, а также наступление событий Ходить и Биться. Событие Подкидывать наступает по воле ифока. Активные действия ифо-ка могут быть реализованы различными способами. Для выбора способа действия из всех возможных альтернатив необходимо сформулировать правила принятия решений, в которых можно использовать значение относительного потенциала Мь.
В качестве возможных альтернативных вариантов основных событий были приняты следующие: Ходить={ходить младшей; ходить парными; ходить козырем; ходить неудобной для противника мастью}; Подкидывать={подкидывать; не подкидывать); Битъся={биться младшей по масти; биться младшим козырем; биться козырем того же ранга; принять}.
Если флаг текущего события сигнализирует о необходимости совершения хода, то начинается анализ возможных вариантов решений в соответствии со сформированным набором правил. Следует подчеркнуть, что вычисление и сравнение значений относительного потенциала выполняются для альтернативных вариантов множества карт, которое останется на руках у ифока после совершения анализируемых действий. Лучшей альтернативой является та, которая обеспечивает максимальное значение относительного потенциала остающихся на руках карт.
Решение о подкидывании карт принимается на основе сравнения возможных альтернативных действий с текущим значением потенциала игрока. Правило выбора действия в этом случае может учитывать близость финала игры и склонность игрока к риску. При наступлении события Биться альтернативных вариантов бывает меньше, чем при заходе. Решение о принятии карт может оказаться неизбежным, если игрок не имеет на руках карт, которыми можно отбиться. В этом случае не требуется вычисление значения потенциала. Кроме того, такое решение может быть принято сознательно в том случае, если ифок способен побить карты противника, но значение потенциала резко снижается и состояние игры не предвещает скорого финала.
Формула вычисления относительного потенциала свидетельствует о невысокой вероятности выбора альтернатив ходить козырем или биться козырем, так как это часто приводит к существенному уменьшению потенциала. Поэтому реализация описанной тактики позволяла программе достаточно хорошо ифать на начальной стадии, но часто приводила к проигрышу в конце игры, так как компьютерный игрок не хотел расставаться с козырными картами, стремясь сохранить высокий потенциал. Этот факт был обнаружен в процессе тестирования и послужил причиной модификации правил принятия решений таким образом, чтобы тактика изменялась по ходу игры. В данной версии программы основанием для изменения тактики является мера близости к финалу игры. В качестве оценки такой меры можно использовать количество карт в колоде или количество вышедших из игры карт. В рассматриваемой реализации программы сигналом для изменения тактики являлось исчерпание карт в колоде. При наступлении этого события компьютерный игрок начинает принимать решения по другим правилам, ориентированным на минимизацию количества карт на руках. Программа с изменяющейся тактикой уже не совершает упомянутых выше ошибок.
Несмотря на кажущуюся несерьезность, разработка игровых программ является хорошим тренингом для будущих и уже состоявшихся специалистов в области разработки интеллектуальных информационных систем.