示例#1
0
        public void ShouldBuildCardsFromString()
        {
            var str = "7C KC 4H QH QD AS TC";

            var cards = CardsBuilder.BuildCardsFromString(str);

            Assert.AreEqual(7, cards.ElementAt(0).Value);
            Assert.AreEqual(2, cards.ElementAt(0).Color);

            Assert.AreEqual(13, cards.ElementAt(1).Value);
            Assert.AreEqual(2, cards.ElementAt(1).Color);

            Assert.AreEqual(4, cards.ElementAt(2).Value);
            Assert.AreEqual(1, cards.ElementAt(2).Color);

            Assert.AreEqual(12, cards.ElementAt(3).Value);
            Assert.AreEqual(1, cards.ElementAt(3).Color);

            Assert.AreEqual(12, cards.ElementAt(4).Value);
            Assert.AreEqual(4, cards.ElementAt(4).Color);

            Assert.AreEqual(14, cards.ElementAt(5).Value);
            Assert.AreEqual(3, cards.ElementAt(5).Color);

            Assert.AreEqual(10, cards.ElementAt(6).Value);
            Assert.AreEqual(2, cards.ElementAt(6).Color);
        }
        public void ShouldCalculateCorrectPints()
        {
            //Arrange
            var cards = CardsBuilder.CreateHighCardHandCards();

            CardsBuilder.CreateFourOfAKindHandCards();
        }
示例#3
0
        public void SameCardsShouldGetTie()
        {
            var cards = CardsBuilder.CreateStraightFlushHandCards();

            var result = _evaluator.EvaluateCardsWinner(cards, cards);

            Assert.Equal(GameResult.Tie, result);
        }
示例#4
0
        public void ShouldBuildCardsFromAndToStringWithoutAnyLoss()
        {
            var str = "7C KC 4H QH QD AS TC";

            var cards  = CardsBuilder.BuildCardsFromString(str);
            var newStr = CardsBuilder.BuildStringFromCards(cards);

            Assert.AreEqual(str, newStr);
        }
示例#5
0
        public void FourOfAKindAndHighCardsShouldGetFourOfAKindWins()
        {
            var blackCards = CardsBuilder.CreateFourOfAKindHandCards();

            var whiteCards = CardsBuilder.CreateHighCardHandCards();

            var result = _evaluator.EvaluateCardsWinner(blackCards, whiteCards);

            Assert.Equal(GameResult.BlackWin, result);
        }
示例#6
0
        public void StraightFlushCardAndHighCardsShouldGetStraightFlushWins()
        {
            var blackCards = CardsBuilder.CreateStraightFlushHandCards();

            var whiteCards = CardsBuilder.CreateHighCardHandCards();

            var result = _evaluator.EvaluateCardsWinner(blackCards, whiteCards);

            Assert.Equal(GameResult.BlackWin, result);
        }
        public void ShouldEvalThreeOfAKindWithLessThan5Cards(string str, string expectedCombination)
        {
            var cards = CardsBuilder.BuildCardsFromString(str);

            var combination       = _combinationEvaluator.EvaluateCards(cards);
            var combinationString = CardsBuilder.BuildStringFromCards(combination.Cards);

            Assert.AreEqual(CombinationType.ThreeOfAKind, combination.Type);
            Assert.AreEqual(expectedCombination, combinationString);
        }
        public void ShouldEvalStraight(string str, string expectedCombination)
        {
            var cards = CardsBuilder.BuildCardsFromString(str);

            var combination       = _combinationEvaluator.EvaluateCards(cards);
            var combinationString = CardsBuilder.BuildStringFromCards(combination.Cards);

            Assert.AreEqual(CombinationType.Straight, combination.Type);
            Assert.AreEqual(expectedCombination, combinationString);
        }
        public void ShouldValidateSatisfy()
        {
            //Arrange
            var cards = CardsBuilder.CreateStraightFlushHandCards();

            //Act
            var isSatisfied = _typeValidator.IsSatisfied(cards);

            //Assert
            Assert.Equal(true, isSatisfied);
        }
        public void ShouldValidateNotSatisfy()
        {
            //Arrange
            var cards = CardsBuilder.CreateHighCardHandCards();

            //Act
            var isSatisfied = _typeValidator.IsSatisfied(cards);

            //Assert
            Assert.Equal(false, isSatisfied);
        }
示例#11
0
        public void TwoAndThreeShouldBe0()
        {
            var str = "2H 3S";

            var cards = CardsBuilder.BuildCardsFromString(str).ToList();

            var playerHand = new PlayerHand(cards[0], cards[1]);

            var quality = _qualityEvaluator.EvalQualityScore(playerHand, new List <Card>());

            Assert.AreEqual(0, Math.Round(quality, 1));
        }
示例#12
0
        public void QualityQuickTest()
        {
            var cards       = "2S KH 3H";
            var hands       = "6H TD";
            var playerCards = CardsBuilder.BuildCardsFromString(hands).ToList();

            var cardslist = CardsBuilder.BuildCardsFromString(cards).ToList();

            var playerHand = new PlayerHand(playerCards[0], playerCards[1]);

            var quality = _qualityEvaluator.EvalQualityScore(playerHand, new List <Card>());
        }
示例#13
0
        public void ShouldPutAScoreOnEachHand()
        {
            var hands = new List <string>();

            hands.Add("AH KH QH JH TH 2S 4S"); // RoyalFlush
            hands.Add("AS KS QS JS TS 8D 7H"); // RoyalFlush
            hands.Add("QH JH TH 9H 8H AH 7S"); // StraightFlush
            hands.Add("AS 2S 3S 4S 5S 8D 7H"); // StraightFlush
            hands.Add("KH KS KD KC 3S 2S 4S"); // FourOfAKind
            hands.Add("KH KS KD KC 3S 2H 2S"); // FourOfAKind
            hands.Add("JH JS JD JC 3S 2H 2S"); // FourOfAKind
            hands.Add("AH AS AD 3C 4S 3H 2S"); // FullHouse
            hands.Add("AH AS AD 2C 4S 2H 2S"); // FullHouse
            hands.Add("KH KS KD AC AS 2H 2S"); // FullHouse
            hands.Add("AD 4D KD 6D 7D 8D 9D"); // Flush
            hands.Add("4S QS JS TS 9S 5S 2S"); // Flush
            hands.Add("TH 9D 8C 7C 6C 2S AS"); // Straight
            hands.Add("9D 8C 7C 6C 5S AS JD"); // Straight
            hands.Add("AD 2S 3D 4S 5S 8D 7H"); // Straight
            hands.Add("AS AD AC KS 4C 2C 5H"); // ThreeOfAKind
            hands.Add("AS AD AC KS 4C 2C 3H"); // ThreeOfAKind
            hands.Add("AS AD AC QS 4C 2C 3H"); // ThreeOfAKind
            hands.Add("KS KD KC AS JC TC 3H"); // ThreeOfAKind
            hands.Add("KS KD QS QD 6H 4H 3H"); // TwoPairs
            hands.Add("KS KD QS QD 5H 4H 3H"); // TwoPairs
            hands.Add("KS KD 2S 2D 5H 4H 3H"); // TwoPairs
            hands.Add("QS QD JS JD 5H 4H 3H"); // TwoPairs
            hands.Add("QS QD AS TD 5H 4H 3H"); // OnePair
            hands.Add("QS QD JS KD 5H 4H 3H"); // OnePair
            hands.Add("JS JD AS KD 5H 4H 3H"); // OnePair
            hands.Add("AS QD TS KD 5H 4H 3H"); // HighCards
            hands.Add("AS 7D TS KD 5H 4H 3H"); // HighCards
            hands.Add("AS 7D 8S KD 5H 4H 3H"); // HighCards
            hands.Add("AS 7D 8S JD 5H 4H 3H"); // HighCards

            var results = new Dictionary <string, CardCombination>();

            foreach (var hand in hands)
            {
                var cards       = CardsBuilder.BuildCardsFromString(hand);
                var combination = _combinationEvaluator.EvaluateCards(cards);
                results.Add(hand, combination);
            }

            var ordererResults = results.OrderByDescending(kvp => kvp.Value.Score).ToList();

            for (int i = 0; i < ordererResults.Count; i++)
            {
                Assert.AreEqual(hands[i], ordererResults[i].Key, $"{hands[i]} expected but {ordererResults[i].Key} actual");
            }
        }
示例#14
0
        public void ShouldBuildStringFromCard()
        {
            var cards = new List <Card>();

            cards.Add(new Card(6, 1));
            cards.Add(new Card(14, 3));
            cards.Add(new Card(10, 2));
            cards.Add(new Card(3, 3));
            cards.Add(new Card(12, 2));
            cards.Add(new Card(8, 3));
            cards.Add(new Card(11, 1));

            var str = CardsBuilder.BuildStringFromCards(cards);

            Assert.AreEqual("6H AS TC 3S QC 8S JH", str);
        }
示例#15
0
        private void DrawTable(Table table)
        {
            if (table.CurrentGame != null)
            {
                Draw($"Cards : {CardsBuilder.BuildStringFromCards(_spinAndGoGame.Table.CurrentGame.Cards.Cards)}");

                if (table.CurrentGame.Pots != null && table.CurrentGame.Pots.Count > 0)
                {
                    foreach (var pot in table.CurrentGame.Pots)
                    {
                        DrawPot(pot);
                    }
                }
                else
                {
                    Draw("Pot : 0");
                }
            }
        }
        public void Statistics_Score_Hands()
        {
            int simulationCount  = 1000000;
            var cardCombinations = new List <CardCombination>();

            var deck  = new Deck();
            var cards = new List <Card>();

            for (int i = 0; i < simulationCount; i++)
            {
                deck.Regroup();
                deck.Shuffle();

                cards.Clear();
                for (int j = 0; j < 7; j++)
                {
                    cards.Add(deck.Draw());
                }

                var cardCombination = _combinationEvaluator.EvaluateCards(cards);
                cardCombinations.Add(cardCombination);
            }

            cardCombinations = cardCombinations.OrderByDescending(combination => combination.Score).ToList();
            var             previousCombinationType = (int)CombinationType.RoyalFlush;
            CardCombination previousCombination     = null;

            foreach (var cardCombination in cardCombinations)
            {
                if ((int)cardCombination.Type > previousCombinationType)
                {
                    var cardsString         = CardsBuilder.BuildStringFromCards(cardCombination.Cards);
                    var previousCardsString = CardsBuilder.BuildStringFromCards(cardCombination.Cards);
                    throw new Exception(
                              $"{cardsString} is a {cardCombination.Type} with {cardCombination.Score} that is lower in score than {previousCardsString}-{previousCombination.Type}-{previousCombination.Score}");
                }

                previousCombination     = cardCombination;
                previousCombinationType = (int)cardCombination.Type;
            }
        }
示例#17
0
 public void PlayersWinPots(IList <KeyValuePair <Player, CardCombination> > winners, Pot pot)
 {
     if (winners.Count == 1 && winners[0].Value == null)
     {
         _eventManager.RaiseEvent($"{winners[0].Key.Name} won {pot.Amount / winners.Count} from the pot because every one else fold");
     }
     else
     {
         for (int i = 0; i < winners.Count; i++)
         {
             _eventManager.RaiseEvent($"{winners[i].Key.Name} won {pot.Amount / winners.Count} from the pot with a {winners[i].Value.Type} : {CardsBuilder.BuildStringFromCards(winners[i].Value.Cards)}");
         }
     }
 }
示例#18
0
        public MemoryGameControl(Game parent, GraphicsDeviceManager graphics)
        {
            Parent = parent;

            _cardsCollection = new CardsCollection(Parent);

            _mathCardBuilder = new MathCardBuilder <CardDraw, MathCardDraw>(1, 10,
                                                                            (op, num1, num2) =>
            {
                if (op == Operations.Sub)
                {
                    int max = Math.Max(num1, num2);
                    int min = Math.Min(num1, num2);
                    num1    = max;
                    num2    = min;
                }
                return(new MathCardDraw(Parent, new MathCard(op, num1, num2))
                {
                    GameParent = Parent, Parent = _cardsCollection
                });
            },
                                                                            (result) => new NumCardDraw(Parent, result)
            {
                Parent = _cardsCollection
            });


            _cardsBuilder                 = new CardsBuilder();
            _gameEngine                   = new Engine <CardDraw>(_mathCardBuilder, _cardsBuilder);
            _cardsBuilder.Engine          = _gameEngine;
            _cardsBuilder.CardsCollection = _cardsCollection;


            _drawScoreBars = new DrawScoreBars(Parent)
            {
                Location = Vector2.Zero,
                Size     = new Vector2()
                {
                    X = graphics.PreferredBackBufferWidth,
                    Y = graphics.PreferredBackBufferHeight * (1 - BOARD_PART_OF_WINDOW) - margin * 2
                },
            };

            _winnerMessage = new WinnerMessage()
            {
                Rect = new Rectangle()
                {
                    Size     = new Vector2(graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight * 1 / 3).ToPoint(),
                    Location = Vector2.Zero.ToPoint()
                },
                Size = new Vector2(graphics.PreferredBackBufferWidth - 100)
            };

            _player1 = new Player()
            {
                Name = "Player1"
            };
            _player2 = new Player()
            {
                Name = "Player2"
            };
        }
示例#19
0
        public void QuickTester(string str)
        {
            var cards = CardsBuilder.BuildCardsFromString(str);

            var combination = _combinationEvaluator.EvaluateCards(cards);
        }