Пример #1
0
 protected void DealCards(ICardDealer <TCard> dealer, int count)
 {
     for (var i = 0; i < count; i++)
     {
         AddCard(dealer.DealCard());
     }
 }
Пример #2
0
        public async Task Play(IEnumerable <IPlayer> players, ICardDealer dealer, ICardDeck deck, ICardTransport transport, ICentralPile centralPile)
        {
            deck.Shuffle();
            DumpState("Deck", players, centralPile.GetAll());

            dealer.Deal(deck, players);

            while (!HasWinner && players.Any(p => !p.Hand.IsEmpty))
            {
                foreach (var player in players)
                {
                    player.TakeTurn(centralPile, transport);
                }

                DumpState("Play", players, centralPile.GetAll());
                await ProcessPlayerSnaps(players, centralPile, transport);

                if (players.Where(o => o.Hand.IsEmpty).Count() == (players.Count() - 1))
                {
                    var winner = (from p in players
                                  orderby p.Hand.Count descending
                                  select p)
                                 .First();

                    Winner = winner;
                }
            }
        }
 public PokerGame(ICardDealer dealer, PokerGameListener listener)
 {
     this.GameDealer   = dealer;
     Winner            = WinStatus.TIE;
     Pot               = 0;
     GameTurns         = 0;
     HumanPlayer       = new PokerPlayerHuman(0, this);
     RoboPlayer        = new PokerPlayerRobo(1, this);
     GameListener      = listener;
     HumanPlayer.Money = 100;
     RoboPlayer.Money  = 100;
     stage             = GameStage.INIT;
 }
Пример #4
0
        /// <summary>
        /// 注册一种卡牌
        /// </summary>
        /// <typeparam name="T">要注册的卡牌类型</typeparam>
        /// <param name="probability">卡牌出现的概率</param>
        /// <param name="dealer">发牌器</param>
        /// <param name="defaultCreator">当发牌器无法发出牌时需要使用的创建卡牌的方法</param>
        public UnlimitedCardDealer <TCard> Register(int probability, ICardDealer <TCard> dealer, Func <TCard> defaultCreator = null)
        {
            if (defaultCreator != null)
            {
                Register(probability, () => dealer.DealCard() ?? defaultCreator());
            }

            else
            {
                Register(probability, () => dealer.DealCard());
            }

            return(this);
        }
Пример #5
0
 public Game(
     TextReader inputReader,
     IGameInterface gameInterface,
     ICardDealer cardDealer,
     ICardMapper cardMapper,
     ICardMapperForUI cardMapperForUI,
     Hand hand,
     IEvaluator evaluator,
     CombinationNameAndPayoutMapper resultMapper)
 {
     this.inputReader     = inputReader;
     this.gameInterface   = gameInterface;
     this.cardDealer      = cardDealer;
     this.cardMapper      = cardMapper;
     this.cardMapperForUI = cardMapperForUI;
     this.hand            = hand;
     this.evaluator       = evaluator;
     this.resultMapper    = resultMapper;
 }
Пример #6
0
        public PokerGame(ICardDealer cardDealer, List <Tuple <IPokerPlayer, double> > players, double bigBlind, double smallBlind)
        {
            if (players.Count > 10)
            {
                throw new Exception("too many players (got: " + players.Count + ", max: " + MAX_PLAYERS + ")");
            }

            _playersInfo = new List <PlayerInfo>(MAX_PLAYERS);
            foreach (var player in players)
            {
                AddPlayer(player.Item1, player.Item2);
            }

            _cardDealer         = cardDealer;
            _currentDealerIndex = 0;
            _currentHandsList   = new List <IndexedHand>(MAX_PLAYERS);

            BigBlind   = bigBlind;
            SmallBlind = smallBlind;
        }
Пример #7
0
        public static async Task <int> Main()
        {
            Console.OutputEncoding = Encoding.UTF8;
            var container = GetConfiguredContainer();

            using (var scope = container.BeginLifetimeScope())
            {
                var game = new SnapGame(scope);
                IEnumerable <IPlayer> players = CreatePlayers(scope);
                ICardDealer           dealer  = CreateDealer(scope);
                var            deck           = CreateDeck(scope);
                ICardTransport transport      = CreateTransport(scope);
                ICentralPile   centralPile    = CreateCentralPile(scope);

                await game.Play(players, dealer, deck, transport, centralPile);

                Console.WriteLine($"Winner: {(game.HasWinner ? game.Winner.Name : "The Game!!!")}");
                Console.ReadKey();
                return(game.HasWinner ? 1 : 0);
            }
        }
        public static HandPlayResult TestHandChances(PokerHand hand, OrderedCardSet handCards, ICardDealer dealer)
        {
            OrderedCardSet oponentSet = HoldemHand.GetOtherCards(dealer.FullDeck, handCards, dealer.CommunityCards);

            int wins = 0, ties = 0, losses = 0;
            List <OrderedCardSet> allHands = GetOpponentCombinationOfHandCards(oponentSet);

            foreach (OrderedCardSet iHand in allHands)
            {
                PokerHand otherHand = HoldemHand.ChooseBestHand(iHand, dealer.CommunityCards);
                int       compare   = hand.CompareTo(otherHand);
                if (compare > 0)
                {
                    wins += 1;
                }
                else if (compare < 0)
                {
                    losses += 1;
                }
                else
                {
                    ties += 1;
                }
            }

            return(new HandPlayResult(allHands.Count, wins, ties, losses));
        }
Пример #9
0
 /// <summary>
 /// 注册一个卡牌槽位
 /// </summary>
 /// <typeparam name="T">允许的卡牌类型</typeparam>
 /// <param name="dealer">发牌器</param>
 protected void RegisterSlot <T>(ICardDealer <T> dealer) where T : TCard
 {
     Slots.Add(new CardSlot <T>(dealer));
 }
Пример #10
0
 /// <summary>
 /// 创建 CardSlot 对象
 /// </summary>
 /// <param name="dealer"></param>
 public CardSlot(ICardDealer <TCard> dealer)
 {
     CardDealer = dealer;
     SyncRoot   = new object();
 }
Пример #11
0
 private Hand DealCards(Hand handToDeal, IEnumerable <int> cardPositionsToBeDealt, ICardDealer dealer)
 {
     foreach (int position in cardPositionsToBeDealt)
     {
         handToDeal.SetCardByPosition(position, dealer.GetNextCardFromDeck());
     }
     return(handToDeal);
 }