A Better C # Poker Framework Дизайн?

Я пишу покерный фреймворк на C #, и мне не нравится дизайн, который у меня сейчас есть. , Моя цель состоит в том, чтобы иметь игровой движок, который может очень быстро играть несколькими агентами ИИ друг против друга в пакетном режиме и играть несколькими агентами ИИ против нескольких людей (возможно, через клиента Silverlight). Я хотел бы сохранить высокую эффективность, но сохранить гибкость - например, он должен уметь играть в такие игры, как лимитный холдем, безлимитный холдем, лимитный 7-карточный стад и т. д.

Мой нынешний дизайн довольно неуклюжий и негибкий:

  • HandHistory: содержит всю информацию о текущая рука (игроки, ставки и т. д.)
  • IPlayer: каждый игрок определяет метод GetAction (история HandHistory).
  • GameEngine: определяет метод Play (информация о HandInfo), который возвращает объект HandHistory.
  • PotManager: управляет банком и определяет, сколько должен сделать колл каждого игрока и сколько он может выиграть (например, если у него неравные стеки и олл-ин).
  • BetManager: управляет ставками и определяет время раунда ставок.

Класс HandInfo содержит всю информацию о том, как настроить руку. Метод Play выглядит примерно так:

HandHistory Play(HandInfo info)
{
    PotManager pots = new PotManager(info);
    BetManager bets = new BetManager(info);
    HandHistory history = CreateHistory(info);

    bets.CollectBlinds();
    if(!bets.GameOver)
    {
        DealHoleCards();
        if(bets.PlayersThatCanStillBet > 1)
            bets.CollectBets();
        if(!bets.GameOver)
        {
            DealFlop();
            ... and on and on
        }
    }

    return history;
}

Проблемы возникают из-за того, что нужно учесть множество мелочей, таких как сбор блайндов и т. Д. Классы менеджеров Пот и Бет становятся кошмаром и неизменно пронизаны ошибками. Кроме того, мой дизайн движка поддерживает только один тип игры (Hold'em) в отличие от других.

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

6
задан Wesley Tansey 11 September 2011 в 23:15
поделиться