Пример #1
0
        static void Main(string[] agrs)
        {
            Console.WriteLine("The program demonstrates how different " +
                              "blackjack strategies affect a player's balance.\n");

            int gameCounter = 10000;

            // WinningStrategyBot statistic

            var winningBot = new WinningStrategyBot(x => x > 40, 1000);
            var collector  = new StatisticCollector(winningBot, "Winning strategy");

            collector.Collect(gameCounter);
            collector.Show();

            // HiLowStrategyBot statistic

            var hiLowBot = new HiLowStrategyBot((x) => x > 40, 1000);

            collector = new StatisticCollector(hiLowBot, "HiLow strategy");
            collector.Collect(gameCounter);
            collector.Show();

            // HiOptIIStrategyBot statistic

            var hiOptIIBot = new HiOptIIStrategyBot((x) => x > 40, 1000);

            collector = new StatisticCollector(hiOptIIBot, "HiOptIIStrategyBot");
            collector.Collect(gameCounter);
            collector.Show();

            Console.WriteLine("That's all! Thank you!");
            return;
        }
Пример #2
0
        public void MakeBetTest()
        {
            // preparetion

            var bot    = new WinningStrategyBot();
            int minBet = 10;

            // checking

            bot.Cash += minBet;
            bot.MakeBet(minBet);
            int betUnit = 2 * minBet;

            Assert.AreEqual(bot.Hands[0].Bet, betUnit);

            bot.Cash += (int)(1.5 * betUnit);
            bot.MakeBet(minBet);
            Assert.AreEqual(bot.Hands[0].Bet, 3 * betUnit);

            bot.Cash += (int)(1.5 * 3 * betUnit);
            bot.MakeBet(minBet);
            Assert.AreEqual(bot.Hands[0].Bet, 2 * betUnit);

            bot.Cash += (int)(1.5 * 2 * betUnit);
            bot.MakeBet(minBet);
            Assert.AreEqual(bot.Hands[0].Bet, 6 * betUnit);

            bot.Cash += (int)(1.5 * 6 * betUnit);
            bot.MakeBet(minBet);
            Assert.AreEqual(bot.Hands[0].Bet, betUnit);
        }
        public void StopFlagTest()
        {
            var bot         = new WinningStrategyBot();
            var dealerCards = Tools.CreateDealerCardSet(CardRank.Five);

            bot.Hands[0].Cards = Tools.CreateCardSet(CardRank.Ace);
            bot.Flag           = Player.PlayerState.Stop;
            Assert.IsTrue(bot.Play(bot.Hands[0], dealerCards) == HandState.Stand);
        }
Пример #4
0
        public void ResetFlagTest()
        {
            var bot = new WinningStrategyBot(x => false)
            {
                Flag = PlayerState.DeckReset
            };

            bot.Hands[0].Cards = Tools.CreateCardSet(CardRank.Ace);
            var dealerCards = Tools.CreateCardSet(CardRank.Two);

            Assert.IsTrue(bot.Play(bot.Hands[0], dealerCards) == HandState.Done);
        }
        public void PlayWinningStrategyBotTest()
        {
            // preparation

            int minBet             = 5;
            var bot                = new WinningStrategyBot(20 * minBet);
            var gameTable          = new GameTable(bot, minBet);
            int startAmountOfCards = gameTable.GameDeck.Cards.Count;

            // checking

            Assert.DoesNotThrow(() => gameTable.Play());
            Assert.IsTrue(gameTable.GameDeck.Cards.Count < startAmountOfCards);
        }
Пример #6
0
        public void TakeCardsOnTheTabbleTest()
        {
            // preparation

            var dealer   = new Dealer();
            var gameDeck = new GameDeck(numberOfDecks);
            var bot      = new WinningStrategyBot();

            dealer.DrawTwoCardsToAll(gameDeck, bot);

            // checking

            dealer.TakeCardsOnTheTable(bot);
            Assert.IsTrue(dealer.Cards.Count == 0);
            Assert.IsTrue(bot.Hands[0].Cards.Count == 0);
        }
        public void ConstructorTest()
        {
            // first case

            int minBet         = 6;
            var bot            = new WinningStrategyBot();
            var firstGameTable = new GameTable(bot, minBet);

            Assert.IsNotNull(firstGameTable);
            Assert.IsNotNull(firstGameTable.Dealer);
            Assert.IsNotNull(firstGameTable.Player);
            Assert.IsNotNull(firstGameTable.GameDeck);
            Assert.AreSame(bot, firstGameTable.Player);
            Assert.AreEqual(firstGameTable.MinBet, minBet);

            // second case

            var secondGameTable = new GameTable(BotName.HiOptIIStrategyBot, minBet);

            Assert.IsNotNull(secondGameTable);
            Assert.IsNotNull(secondGameTable.Dealer);
            Assert.IsNotNull(secondGameTable.Player);
            Assert.IsNotNull(secondGameTable.GameDeck);
            Assert.AreEqual(secondGameTable.MinBet, minBet);

            // third case

            var thirdGameTable = new GameTable(BotName.WinningStrategyBot, minBet);

            Assert.IsNotNull(thirdGameTable);
            Assert.IsNotNull(thirdGameTable.Dealer);
            Assert.IsNotNull(thirdGameTable.Player);
            Assert.IsNotNull(thirdGameTable.GameDeck);
            Assert.AreEqual(thirdGameTable.MinBet, minBet);

            // fourth case

            var fourthGameTable = new GameTable(BotName.HiLowStrategyBot, minBet);

            Assert.IsNotNull(fourthGameTable);
            Assert.IsNotNull(fourthGameTable.Dealer);
            Assert.IsNotNull(fourthGameTable.Player);
            Assert.IsNotNull(fourthGameTable.GameDeck);
            Assert.AreEqual(fourthGameTable.MinBet, minBet);
        }
Пример #8
0
        public void DrawTwoCardsToAllTest()
        {
            // preparation

            var dealer   = new Dealer();
            var gameDeck = new GameDeck(numberOfDecks);
            var bot      = new WinningStrategyBot();

            // checking

            dealer.DrawTwoCardsToAll(gameDeck, bot);

            Assert.IsNotNull(bot.Hands[0].Cards);
            Assert.IsTrue(bot.Hands[0].Cards.Count == 2);

            Assert.IsNotNull(dealer.Cards);
            Assert.IsTrue(dealer.Cards.Count == 2);
        }
Пример #9
0
        public void PlayTest()
        {
            // preparation

            var dealer   = new Dealer();
            var gameDeck = new GameDeck(numberOfDecks);
            var bot      = new WinningStrategyBot();

            dealer.DrawTwoCardsToAll(gameDeck, bot);
            int dealerPoints = dealer.Points;

            dealer.Play(gameDeck);

            // checking

            Assert.IsTrue(dealer.Cards.Count >= 2);
            Assert.IsTrue(dealer.Points > dealerPoints);
            Assert.IsTrue(dealer.Cards[1].Flag == Visibility.Visible);
        }
        public void PlaySoftTotalsTest()
        {
            // preparetion

            var dealerCards = Tools.CreateDealerCardSet(CardRank.Five);
            var bot         = new WinningStrategyBot();

            bot.MakeBet(5);
            var botHand = bot.Hands[0];

            // checking 13-17 double

            botHand.Cards = Tools.CreateCardSet(CardRank.Ace, CardRank.Three);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Double);

            // checking 13-17 hit

            dealerCards = Tools.CreateDealerCardSet(CardRank.Nine);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // checking 18 Hit

            botHand.Cards = Tools.CreateCardSet(CardRank.Ace, CardRank.Seven);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // checking 18 stand

            dealerCards = Tools.CreateDealerCardSet(CardRank.Eight);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Stand);

            // checking 19-21 stand

            botHand.Cards = Tools.CreateCardSet(CardRank.Ace, CardRank.Ten);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Stand);

            // one ace -> double | checking one ace in hand after split

            botHand.Cards.Clear();
            botHand.Cards.Add(new Card(CardSuit.Diamond, CardRank.Ace));
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Double);
        }
        public void ConstructorTest()
        {
            // first case

            var firstBot = new WinningStrategyBot();

            Assert.IsFalse(firstBot.IsLeave());
            Assert.IsTrue(firstBot.GamePlayed == 0);
            Assert.IsTrue(firstBot.Hands != null);
            Assert.IsTrue(firstBot.Cash == 1000);
            Assert.IsTrue(firstBot.Flag == Player.PlayerState.Play);


            // second case

            var secondBot = new HiOptIIStrategyBot();

            Assert.IsTrue(secondBot.GamePlayed == 0);
            Assert.IsFalse(secondBot.IsLeave());
            Assert.IsTrue(secondBot.Hands != null);
            Assert.IsTrue(secondBot.Cash == 1000);
            Assert.IsTrue(secondBot.Flag == Player.PlayerState.Play);
        }
        public void PlaySameCardsTest()
        {
            // preparation

            var dealerCards = Tools.CreateDealerCardSet(CardRank.Five);
            var bot         = new WinningStrategyBot(i => false);

            bot.MakeBet(5);
            var botHand = bot.Hands[0];

            // A/A split checking

            botHand.Cards = Tools.CreateCardSet(CardRank.Ace);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Split);

            // A/A hit checking

            dealerCards = Tools.CreateDealerCardSet(CardRank.Ace);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // 10/10 stand checking

            botHand.Cards = Tools.CreateCardSet(CardRank.Ten);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Stand);

            // 5/5 double checking

            botHand.Cards = Tools.CreateCardSet(CardRank.Five);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Double);

            // 4/4 split checking

            dealerCards   = Tools.CreateDealerCardSet(CardRank.Six);
            botHand.Cards = Tools.CreateCardSet(CardRank.Four);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Split);

            // 4/4 hit checking

            dealerCards = Tools.CreateDealerCardSet(CardRank.Seven);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // 9/9 stand checking

            botHand.Cards = Tools.CreateCardSet(CardRank.Nine);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Stand);

            // 9/9 split checking

            dealerCards   = Tools.CreateDealerCardSet(CardRank.Eight);
            botHand.Cards = Tools.CreateCardSet(CardRank.Nine);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Split);

            // 6/6 hit checking

            dealerCards   = Tools.CreateDealerCardSet(CardRank.Seven);
            botHand.Cards = Tools.CreateCardSet(CardRank.Six);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // 2/2 3/3 6/6 7/7 hit checking

            dealerCards   = Tools.CreateDealerCardSet(CardRank.Eight);
            botHand.Cards = Tools.CreateCardSet(CardRank.Six);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // 2/2 3/3 6/6 7/7 split checking

            dealerCards   = Tools.CreateDealerCardSet(CardRank.Two);
            botHand.Cards = Tools.CreateCardSet(CardRank.Six);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Split);
        }
        public void PlayHardTotalsTest()
        {
            // preparetion

            var dealerCards = Tools.CreateDealerCardSet(CardRank.Five);
            var bot         = new WinningStrategyBot();

            bot.MakeBet(5);
            var botHand = bot.Hands[0];

            // checking 4-8 hit

            botHand.Cards = Tools.CreateCardSet(CardRank.Two, CardRank.Three);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // checking 9 hit

            botHand.Cards = Tools.CreateCardSet(CardRank.Two, CardRank.Seven);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // checking 9 double

            dealerCards = Tools.CreateDealerCardSet(CardRank.Ace);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Double);

            // checking 9 double

            dealerCards = Tools.CreateDealerCardSet(CardRank.Ace);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Double);

            // checking hit when player has 11 points & dealer has 11  points

            botHand.Cards = Tools.CreateCardSet(CardRank.Five, CardRank.Six);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // checking hit when player has 10 points & dealer has 10-11  points

            botHand.Cards = Tools.CreateCardSet(CardRank.Six, CardRank.Four);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // checking 10-11 double

            dealerCards = Tools.CreateDealerCardSet(CardRank.Five);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Double);

            // checking 12 stand

            botHand.Cards = Tools.CreateCardSet(CardRank.Eight, CardRank.Four);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Stand);

            // checking 12 hit

            dealerCards = Tools.CreateDealerCardSet(CardRank.Ace);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // checking 15-16 surrender

            botHand.Cards = Tools.CreateCardSet(CardRank.Eight, CardRank.Seven);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Surrender);

            // checking 13-16 Hit

            dealerCards   = Tools.CreateDealerCardSet(CardRank.Nine);
            botHand.Cards = Tools.CreateCardSet(CardRank.Eight, CardRank.Seven);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);

            // checking 13-16 Stand

            dealerCards = Tools.CreateDealerCardSet(CardRank.Two);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Stand);

            // checking 17-21 stand

            botHand.Cards = Tools.CreateCardSet(CardRank.Nine, CardRank.Ten);
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Stand);

            // play hard totals, when have not 2 cards in hand

            botHand.Cards.Clear();
            botHand.Cards.Add(new Card(CardSuit.Diamond, CardRank.Nine));
            Assert.IsTrue(bot.Play(botHand, dealerCards) == HandState.Hit);
        }