예제 #1
0
파일: Hand.cs 프로젝트: nebosite/PokerStuff
        //------------------------------------------------------------------------------------
        /// <summary>
        /// Do some preprossessing of the cards before evaluation
        /// </summary>
        //------------------------------------------------------------------------------------
        public Card[] PrepCards()
        {
            var cards = DealtCards.ToArray();

            // Use a custom insertion sort for fastest sorting on this
            // small array.
            for (int i = 1; i < cards.Length; i++)
            {
                for (int j = i - 1, k = i; j >= 0 && cards[j].Rank < cards[k].Rank; j--, k--)
                {
                    (cards[j], cards[k]) = (cards[k], cards[j]);
                }
            }

            foreach (var card in cards)
            {
                _suitBits[(int)card.Suit] |= (int)card.Rank;
                _rankBits |= (int)card.Rank;
                // ace is special because it can be the "1" in a strait
                if (card.Rank == Rank.Ace)
                {
                    _suitBits[(int)card.Suit] |= 1;
                    _rankBits |= 1;
                }
                _suitCounts[(int)card.Suit]++;
            }
            return(cards);
        }
예제 #2
0
 public CardModel ReplaceCard(CardModel cardToReplace)
 {
     cardToReplace.IsSelected = false;
     Cards.Add(cardToReplace);
     DealtCards.Remove(cardToReplace);
     return(GetCard());
 }
예제 #3
0
    public CardModel GetCard()
    {
        int index = Random.Next(Cards.Count);

        DealtCards.Add(Cards[index]);
        Cards.RemoveAt(index);
        return(DealtCards.Last());
    }
예제 #4
0
파일: Hand.cs 프로젝트: nebosite/PokerStuff
 //------------------------------------------------------------------------------------
 /// <summary>
 /// Add a card to this hand
 /// </summary>
 //------------------------------------------------------------------------------------
 public void AddCard(Card card)
 {
     if ((CardBits & card.Bit) > 0)
     {
         throw new ApplicationException("Duplicate Card: " + card);
     }
     CardBits |= card.Bit;
     DealtCards.Add(card);
     _evaluated = false;
 }
예제 #5
0
        private bool CheckIfFlush()
        {
            int suitToCheck = DealtCards[0].CardSuit;

            foreach (Card card in DealtCards.Skip(1))
            {
                if (card.CardSuit != suitToCheck)
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #6
0
파일: Hand.cs 프로젝트: nebosite/PokerStuff
        //------------------------------------------------------------------------------------
        /// <summary>
        /// Remove cards from the hand, except for the number of cards you specify.  The
        /// cards will be removed last in, first out order
        /// </summary>
        //------------------------------------------------------------------------------------
        internal void ClearAllBut(int keep)
        {
            var pocketCards = DealtCards.Take(keep);

            DealtCards.Clear();

            _suitBits   = new int[4];
            _suitCounts = new int[4];
            _rankBits   = 0;
            _evaluated  = false;
            CardBits    = 0;
            foreach (var card in pocketCards)
            {
                AddCard(card);
            }
        }
 private void SendCardToFoundationResult(CardTransferResponseEventArgs response)
 {
     _eventAggregator.GetEvent <CardTransferResponseEvent>().Unsubscribe(
         SendCardToFoundationResult);
     if (response.Accepted)
     {
         //accepted.
         Debug.WriteLine("accepted");
         DealtCards.Remove(response.Card);
     }
     else
     {
         // rejected
         Debug.WriteLine("rejected");
     }
 }
예제 #8
0
        private bool CheckIfThreeOfAKind()
        {
            var        groupedCards  = DealtCards.GroupBy(n => n.CardRank);
            List <int> numOfElements = new List <int>();

            foreach (var cardGroup in groupedCards)
            {
                numOfElements.Add(cardGroup.Count());
            }

            if (numOfElements.Contains(3) && numOfElements.Contains(1))
            {
                return(true);
            }

            return(false);
        }
예제 #9
0
        private bool CheckIfStraight()
        {
            var sortedCards = DealtCards.OrderBy(o => o.CardRank).ToList();

            int rankToCheck = sortedCards[0].CardRank;

            foreach (Card card in sortedCards)
            {
                if (card.CardRank != rankToCheck)
                {
                    return(false);
                }

                rankToCheck++;
            }

            return(true);
        }
예제 #10
0
        private bool CheckIfJacksOrBetter()
        {
            var queryAce = DealtCards.Select(n => n)
                           .Where(n => n.CardRank == 1)
                           .ToList();

            if (queryAce.Count == 2)
            {
                return(true);
            }

            var queryKings = DealtCards.Select(n => n)
                             .Where(n => n.CardRank == 13)
                             .ToList();

            if (queryKings.Count == 2)
            {
                return(true);
            }

            var queryQueens = DealtCards.Select(n => n)
                              .Where(n => n.CardRank == 12)
                              .ToList();

            if (queryQueens.Count == 2)
            {
                return(true);
            }

            var queryJacks = DealtCards.Select(n => n)
                             .Where(n => n.CardRank == 11)
                             .ToList();

            if (queryJacks.Count == 2)
            {
                return(true);
            }

            return(false);
        }
        //Deals out the cards
        private void DealStack()
        {
            //overflow goes to separeate pile
            DealtCards.ToList().ForEach(c => c.FaceUp = false);
            _wasteStack.AddRange(DealtCards);
            DealtCards.Clear();

            if (_cards.Count == 0)
            {
                CardsEmpty = true;

                // Resets
                _wasteStack.Reverse();
                _cards.AddRange(_wasteStack);
                _wasteStack.Clear();

                // Top card changes
                TopCard = _cards.Count > 0 ? _cards[_cards.Count - 1] : null;

                return;
            }
            if (CardsEmpty)
            {
                CardsEmpty = false;
            }

            int numToDeal = Math.Min(_cards.Count, NumCardsPerDeal);
            int index     = _cards.Count - numToDeal;

            // cycles through cards
            var deal = _cards.GetRange(index, numToDeal);

            deal.Reverse();
            DealtCards.AddRange(deal);
            _cards.RemoveRange(index, numToDeal);
            DealtCards.ToList().ForEach(c => c.FaceUp = true);

            // Top card changes
            TopCard = _cards.Count > 0 ? _cards[_cards.Count - 1] : null;
        }
예제 #12
0
        private bool CheckIfRoyalFlush()
        {
            var sortedCards = DealtCards.OrderBy(o => o.CardRank).ToList();

            int suitToCheck = sortedCards[0].CardSuit;
            int rankToCheck = 10;

            if (sortedCards[0].CardRank != 1)
            {
                return(false);
            }

            foreach (Card card in sortedCards.Skip(1))
            {
                if (card.CardSuit != suitToCheck || card.CardRank != rankToCheck)
                {
                    return(false);
                }

                rankToCheck++;
            }

            return(true);
        }
예제 #13
0
 public void RemoveCard(int index)
 {
     DealtCards.RemoveAt(index);
 }
예제 #14
0
 public void AddCard(Card card)
 {
     DealtCards.Add(card);
     EvaluateHand();
 }