예제 #1
0
 public HandController()
 {
     combo = new Combo(Combos.High, 0);
     AvailableCards = new Dictionary<int, List<CardBasic>>();
     FlushCheck = new FlushChecker(Suits.Spikes, 0);
     WinningCards = new List<CardBasic>();
 }
예제 #2
0
        public void WildFlushFound()
        {
            var checker = new FlushChecker();
            var value   = checker.HandValue(_hands[7]);

            value.Should().Be(5.07m);
        }
예제 #3
0
        public void FlushFound()
        {
            var checker = new FlushChecker();
            var value   = checker.HandValue(_hands[5]);

            value.Should().Be(5.1413120605m);
        }
예제 #4
0
        /// <summary>
        /// Sets the Chain of responsibility for the combination checkers
        /// </summary>
        protected virtual void SetupCheckers()
        {
            RoyalStraightFlushChecker royalStraightFlushChecker = new RoyalStraightFlushChecker();
            StraightFlushChecker      straightFlushChecker      = new StraightFlushChecker();
            FourOfKindChecker         fourOfKindChecker         = new FourOfKindChecker();
            FullHouseChecker          fullHouseChecker          = new FullHouseChecker();
            FlushChecker       flushChecker       = new FlushChecker();
            StraightChecker    straightChecker    = new StraightChecker();
            ThreeOfKindChecker threeOfKindChecker = new ThreeOfKindChecker();
            TwoPairsChecker    twoPairsChecker    = new TwoPairsChecker();
            OnePairChecker     onePairChecker     = new OnePairChecker();
            TopCardChecker     topCardChecker     = new TopCardChecker();

            royalStraightFlushChecker.SetNext(straightFlushChecker);
            straightFlushChecker.SetNext(fourOfKindChecker);
            fourOfKindChecker.SetNext(fullHouseChecker);
            fullHouseChecker.SetNext(flushChecker);
            flushChecker.SetNext(straightChecker);
            straightChecker.SetNext(threeOfKindChecker);
            threeOfKindChecker.SetNext(twoPairsChecker);
            twoPairsChecker.SetNext(onePairChecker);
            onePairChecker.SetNext(topCardChecker);

            _firstChecker = royalStraightFlushChecker;
        }
예제 #5
0
        public void FlushNotFound()
        {
            var checker = new FlushChecker();

            for (var i = 0; i < 9; i++)
            {
                if (i != 5 && i != 8 && i != 9)
                {
                    var value = checker.HandValue(_hands[i]);
                    value.Should().Be(0, _hands[i].Select(c => c.ToString()).Aggregate((a, b) => a + " " + b));
                }
            }
        }
예제 #6
0
        public void FlushNotFound()
        {
            var checker = new FlushChecker();

            for (var i = 0; i < _hands.Count; i++)
            {
                if (!new[] { 5, 7, 8, 9, 11, 12, 13 }.Contains(i))
                {
                    var value = checker.HandValue(_hands[i]);
                    value.Should().Be(0, _hands[i].Select(c => c.ToString()).Aggregate((a, b) => a + " " + b));
                }
            }
        }
예제 #7
0
        static void Main()
        {
            PokerHand straightFlush = new PokerHand(new List <Card>()
            {
                new Card(Suit.Clubs, Face.Ace),
                new Card(Suit.Clubs, Face.Ten),
                new Card(Suit.Clubs, Face.King),
                new Card(Suit.Clubs, Face.Jack),
                new Card(Suit.Clubs, Face.Queen),
            });

            PokerHand straight = new PokerHand(new List <Card>()
            {
                new Card(Suit.Spades, Face.Ace),
                new Card(Suit.Clubs, Face.Ten),
                new Card(Suit.Clubs, Face.King),
                new Card(Suit.Diamonds, Face.Jack),
                new Card(Suit.Clubs, Face.Queen),
            });

            PokerHand flush = new PokerHand(new List <Card>()
            {
                new Card(Suit.Clubs, Face.Ace),
                new Card(Suit.Clubs, Face.Ten),
                new Card(Suit.Clubs, Face.Four),
                new Card(Suit.Clubs, Face.Six),
                new Card(Suit.Clubs, Face.Queen),
            });

            PokerHand nothing = new PokerHand(new List <Card>()
            {
                new Card(Suit.Spades, Face.Ace),
                new Card(Suit.Spades, Face.One),
                new Card(Suit.Clubs, Face.Four),
                new Card(Suit.Clubs, Face.Six),
                new Card(Suit.Diamonds, Face.Queen),
            });

            StraightFlushChecker straightFlushChecker = new StraightFlushChecker();
            StraightChecker      straightChecker      = new StraightChecker();
            FlushChecker         flushCkecker         = new FlushChecker();

            straightChecker.SetChecker(flushCkecker);
            straightFlushChecker.SetChecker(straightChecker);

            straightFlushChecker.CheckHand(straightFlush);
            straightFlushChecker.CheckHand(straight);
            straightFlushChecker.CheckHand(flush);
            straightFlushChecker.CheckHand(nothing);
        }
예제 #8
0
 public void CheckSuit()
 {
     Dictionary<Suits, int> suitCount = new Dictionary<Suits, int>();
     foreach (var listOfCardScript in AvailableCards.Values)
     {
         foreach (var card in listOfCardScript)
         {
             if (suitCount.ContainsKey(card.Suit))
                 suitCount[card.Suit] += 1;
             else
                 suitCount.Add(card.Suit, 1);
         }
     }
     foreach (var suit in suitCount)
     {
         if (suit.Value > FlushCheck.Amount)
             FlushCheck = new FlushChecker(suit.Key, suit.Value);//new Tuple<Suits, int>(suit.Key, suit.Value));
     }
 }
        public static PokerCombinationChecker GetChecker()
        {
            var highCard = new HighCardChecker();
            var onePair  = new OnePairChecker()
                           .SuccessiveHand(highCard);
            var twoPair = new TwoPairChecker()
                          .SuccessiveHand(onePair);
            var threeOfAKind = new ThreeOfAKindChecker()
                               .SuccessiveHand(twoPair);
            var straight = new StraightChecker()
                           .SuccessiveHand(threeOfAKind);
            var flush = new FlushChecker()
                        .SuccessiveHand(straight);
            var fullHouse = new FullHouseChecker()
                            .SuccessiveHand(flush);
            var fourOfAKind = new FourOfAKindChecker()
                              .SuccessiveHand(fullHouse);
            var straightFlush = new StraightFlushChecker()
                                .SuccessiveHand(fourOfAKind);

            return(straightFlush);
        }
예제 #10
0
        static PokerCombinationChecker GetChecker()
        {
            var highCard = new HighCardChecker();
            var onePair = new OnePairChecker()
                .SuccessiveHand(highCard);
            var twoPair = new TwoPairChecker()
                .SuccessiveHand(onePair);
            var threeOfAKind = new ThreeOfAKindChecker()
                .SuccessiveHand(twoPair);
            var straight = new StraightChecker()
                .SuccessiveHand(threeOfAKind);
            var flush = new FlushChecker()
                .SuccessiveHand(straight);
            var fullHouse = new FullHouseChecker()
                .SuccessiveHand(flush);
            var fourOfAKind = new FourOfAKindChecker()
                .SuccessiveHand(fullHouse);
            var straightFlush = new StraightFlushChecker()
                .SuccessiveHand(fourOfAKind);

            return straightFlush;
        }
예제 #11
0
파일: Combo.cs 프로젝트: askeip/blablblabl
 public Combo CheckStraightFlush(Dictionary<int,List<CardBasicScript>> combination,FlushChecker flushChecker)
 {
     var flush = new Combo(Combos.Flush, HighFlushRank(combination,flushChecker));
     if (ComboName!=Combos.Straight)
         return flush;
     for (int i =0; i<5; i++)
     {
         var sameSuit = false;
         foreach (var cardScript in combination[Strength-i])
         {
             if (cardScript.Card.Suit == flushChecker.Suit)
             {
                 sameSuit = true;
                 break;
             }
         }
         if (!sameSuit)
             return flush;
     }
     if (Strength == 14)
         return new Combo(Combos.RoyalFlush,Strength);
     return new Combo(Combos.StraightFlush,Strength);
 }
예제 #12
0
파일: Combo.cs 프로젝트: askeip/blablblabl
 public int HighFlushRank(Dictionary<int, List<CardBasic>> combination, FlushChecker flushChecker)
 {
     return combination.OrderByDescending(z => z.Key)
         .Where(z => z.Value.Where(d => d.Suit == flushChecker.Suit) != null)
             .Select(z => z.Value[0].Rank)
             .ElementAt(0);
 }