protected void DealCards(ICardDealer <TCard> dealer, int count) { for (var i = 0; i < count; i++) { AddCard(dealer.DealCard()); } }
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; }
/// <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); }
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; }
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; }
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)); }
/// <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)); }
/// <summary> /// 创建 CardSlot 对象 /// </summary> /// <param name="dealer"></param> public CardSlot(ICardDealer <TCard> dealer) { CardDealer = dealer; SyncRoot = new object(); }
private Hand DealCards(Hand handToDeal, IEnumerable <int> cardPositionsToBeDealt, ICardDealer dealer) { foreach (int position in cardPositionsToBeDealt) { handToDeal.SetCardByPosition(position, dealer.GetNextCardFromDeck()); } return(handToDeal); }