예제 #1
0
        public static void GenerateStrategy()
        {
            List <Card> orderedCards = new List <Card>();

            for (int deck = 0; deck < Configuration.NUM_DECKS_IN_SHOE; deck++)
            {
                orderedCards.AddRange(new FrenchDeck().cards);
            }

            Queue <Card> shoe = Utilities.ShuffleShoe(orderedCards);

            IPlayerStrategy strategy = new RandomPlayerStrategy();

            for (int gameIndex = 0; gameIndex < Configuration.STRATEGY_GENERATOR_NUM_GAMES; gameIndex++)
            {
                BlackjackGame bjgame = new BlackjackGame();

                int bet = 10;

                BlackjackGameResult result = bjgame.PlayGame(shoe, bet, strategy);

                double currentShoePenetration = 1 - (shoe.Count / (double)orderedCards.Count);

                if (currentShoePenetration >= Configuration.RESHUFFLE_PENETRATION_PERCENT)
                {
                    Console.WriteLine("Shuffling shoe");
                    shoe = Utilities.ShuffleShoe(orderedCards);
                }
            }
        }
예제 #2
0
        public void IfPlayerBustsEndGame()
        {
            var cards = new List <Card>()
            {
                new Card("QUEENS", "CLUBS"), new Card("KINGS", "HEARTS")
            };
            var dealerHand = new Hand {
                CardsInHand = cards
            };
            var mock = new Mock <IConsoleReader>();

            mock.SetupSequence(reader => reader.GetInput()).Returns("1");
            var player  = new Player(new Hand(), mock.Object);
            var mockRng = new Mock <IRng>();

            mockRng.Setup(rng => rng.Next(It.IsAny <int>(), It.IsAny <int>())).Returns(1);
            IDealer dealer    = new Dealer(dealerHand, mockRng.Object);
            var     deck      = new Deck();
            var     blackjack = new BlackjackGame(player, dealer, deck);

            blackjack.PlayGame();
            Assert.True(player.HasBusted());
            Assert.False(blackjack.IsPlayingGame);
            Assert.False(blackjack.IsPlayerTurn);
        }
예제 #3
0
        private void ReconstructRoundPlayerPlayerFields(BlackjackGame game)
        {
            if (game == null)
            {
                return;
            }

            if (!game.IsRoundInProgress)
            {
                return;
            }

            var gameDealerField = typeof(BlackjackGame)
                                  .GetField("_dealer", BindingFlags.Instance | BindingFlags.NonPublic);

            var gameDealer = (BlackjackGameDealer)gameDealerField.GetValue(game);

            var dealerCurrentRound = gameDealer.RoundInProgress;

            foreach (var player in dealerCurrentRound.RoundPlayers)
            {
                var gamePlayer = game.Players.FirstOrDefault(a => a.Id == player.Player.Id);
                if (gamePlayer != null)
                {
                    var roundPlayerPlayerField = typeof(BlackjackGameRoundPlayer)
                                                 .GetProperty("Player");

                    roundPlayerPlayerField.SetValue(player, gamePlayer);
                }
            }
        }
예제 #4
0
        public void return_score_of_3_card_hand_with_no_aces()
        {
            foreach (Rank rank1 in Enum.GetValues(typeof(Rank)))
            {
                mockCard1.Setup(c => c.rank).Returns(rank1);
                foreach (Rank rank2 in Enum.GetValues(typeof(Rank)))
                {
                    mockCard2.Setup(c => c.rank).Returns(rank2);
                    foreach (Rank rank3 in Enum.GetValues(typeof(Rank)))
                    {
                        mockCard3.Setup(c => c.rank).Returns(rank3);
                        IHand hand  = new Hand();
                        ICard card1 = mockCard1.Object;
                        ICard card2 = mockCard2.Object;
                        ICard card3 = mockCard3.Object;

                        hand.AddCard(card1);
                        hand.AddCard(card2);
                        hand.AddCard(card3);

                        int scoreCard1 = BlackjackGame.GetCardValue(card1);
                        int scoreCard2 = BlackjackGame.GetCardValue(card2);
                        int scoreCard3 = BlackjackGame.GetCardValue(card3);

                        int score         = hand.Score(true);
                        int expectedScore = scoreCard1 + scoreCard2 + scoreCard3;
                        if (hand.AceCount() == 0)
                        {
                            Assert.IsTrue(expectedScore == score);
                        }
                    }
                }
            }
        }
예제 #5
0
        public void BlackjackGameFullSimulatedGameTest()
        {
            // arrange
            BlackjackGame game = new BlackjackGame()
            {
                AnteAmount = 1.00M
            };
            decimal startingChipsPerPlayer = 100M;
            int     roundsToDeal           = 3;

            // act
            game.BeginGame();

            // assert
            Assert.IsTrue(game.State.GetType() == typeof(ReadyToPlayState));
            Assert.IsTrue(game.Players.Count > 1);                                                      // we have players?
            Assert.AreEqual(game.Players.Where(p => p.Bettor.Chips > 0).Count(), game.Players.Count()); // the players all have chips?

            // act
            game.BeginPlay();

            // assert
            Assert.IsTrue(game.State.GetType() == typeof(CardsShuffledState));
            Assert.IsTrue(IsDeckShuffled(Deck.Instance));  // the deck is shuffled?

            // act
            game.Ante();

            // assert
            Assert.IsTrue(game.State.GetType() == typeof(AntePlacedState));
            Assert.AreEqual(Pot.Instance.Chips, game.AnteAmount * game.Players.Count);                                                        // pot has the correct amount in it?
            Assert.IsTrue(game.Players.Where(p => p.Bettor.Chips == startingChipsPerPlayer - game.AnteAmount).Count() == game.Players.Count); // all the players' chips are reduced by the ante amount?

            // Deal / bet iterations

            for (int i = 1; i <= roundsToDeal; i++)
            {
                // act
                game.DealRound();

                // assert
                Assert.IsTrue(game.State.GetType() == typeof(CardsDealtState));
                Assert.IsTrue(game.Players.Where(p => p.Hand.Size == i).Count() == game.Players.Count());  // all the players have the correct number of cards?

                // act
                game.AnalyzeHands();

                // assert
                Assert.IsTrue(game.State.GetType() == typeof(BetsPlacedState));
                decimal currentPlayersChipsTotal = game.Players.Select(p => p.Bettor.Chips).Aggregate((ch1, ch2) => ch1 + ch2);
                Assert.AreEqual(currentPlayersChipsTotal + Pot.Instance.Chips, startingChipsPerPlayer * game.Players.Count);  // pot has the correct amount in it?
            }

            // act
            game.NoMoreRounds();

            // assert
            Assert.IsTrue(game.State.GetType() == typeof(CardGameFinishedState));
            Assert.IsTrue(game.Players.Where(p => p.HandStatus == HandStatus.Winner).Count() > 0);  // there was at least one winner?
        }
        static void Main(string[] args)
        {
            Console.Write("This programm represents the blackjack game with opportunity to split");
            Console.Write(" cards, double wagers and surrender.\n");
            Console.WriteLine("You can choose one of 3 strategies to play:");
            Console.WriteLine("0 - basic strategy");
            Console.WriteLine("1 - cards counting strategy, based on basic strategy and cards count");
            Console.WriteLine("2 - simple strategy, based on basic strategy and players score at the moment");
            Console.WriteLine("The programm will print the approximate sum of your wagers when the game ends");
            Console.WriteLine("Please enter the correct number of strategy you want to play");
            int strategy = Convert.ToInt32(Console.ReadLine()); // in ascii table "0" has 48 number

            if (strategy < 0 || strategy > 2)
            {
                Console.WriteLine("You number isn't right.");
                return;
            }
            Bots  botsStrategy = (Bots)strategy;
            Decks playingDecks = new Decks();

            playingDecks.FillCards();
            double        win  = 0;
            BlackjackGame game = new BlackjackGame(playingDecks, 1600, botsStrategy); // 1600 is initial players money

            for (int i = 0; i < 40; i++)
            {
                win += game.Game();
            }
            Console.WriteLine("Approximate sum with 40 played rounds is {0}", win / 40.0);
            Console.WriteLine("Press enter button to exit");
            Console.ReadLine();
        }
예제 #7
0
        private async Task <string> DisplayGameStatus(string channelId, BlackjackGame game)
        {
            var messageBuilder = new EbmedMessageBuilder()
                                 .AddCustomAuthor("Blackjack");

            messageBuilder.AddMessageField(new EmbedField("Prize pool",
                                                          string.Format("{0:0.##}", game.MoneyToWin)));

            foreach (var member in game.Members)
            {
                var userCards = string.Empty;

                foreach (var card in member.UserCards)
                {
                    userCards += $"``{card.Symbol} {GetCardEmoji(card.Color)}`` ";
                }

                userCards += $"({string.Format(TextFormat.BoldText, member.CurrentScore)})";

                messageBuilder.AddMessageField(new EmbedField(
                                                   string.Format(TextFormat.BoldText, member.UserNickname), userCards));
            }

            var response = await _discordRestClient.PostMessage(channelId,
                                                                new Message { Embed = messageBuilder.Build() });

            return(response.Data.Id);
        }
예제 #8
0
        private async Task ManagePoints(IEnumerable <string> winners, BlackjackGame game)
        {
            // Add points to winners
            if (winners.Count() == 1)
            {
                await _usersPointsRepository.AddBalanceToUserAccount(winners.First(), game.MoneyToWin);
            }
            else
            {
                var splittedAmount = Math.Floor(game.MoneyToWin / winners.Count());
                foreach (var winner in winners)
                {
                    await _usersPointsRepository.AddBalanceToUserAccount(winner, (float)splittedAmount);
                }
            }

            // Remove points from loosers
            var losers = game.Members.Where(x => !winners.ToList().Contains(x.UserId))
                         .Select(x => x.UserId);

            foreach (var loser in losers)
            {
                await _usersPointsRepository.SubtractBalanceFromUserAccount(loser, game.BetAmount);
            }
        }
        public void GameTest()
        {
            Decks playingDecks = new Decks();

            playingDecks.FillCards();
            byte[] gameCards = new byte[416];
            gameCards = playingDecks.Cards;
            byte          bjFlag;
            int           testResult;
            LibraryLoader libraryLoader = new LibraryLoader("../../../../BotsLibrary/BotsLibrary.dll");
            Assembly      asm           = libraryLoader.LoadLibrary();
            PluginHelper  pluginHelper  = new PluginHelper(asm);

            // Dealer has blackjack and player in both hands has blackjack too
            gameCards[0] = 10; gameCards[1] = 1; gameCards[2] = 1; gameCards[3] = 10;
            gameCards[4] = 10; gameCards[5] = 1; bjFlag = 3; testResult = 32;
            SomeGameTest(pluginHelper, playingDecks, gameCards, testResult, bjFlag);

            gameCards[0] = 10; gameCards[1] = 10; gameCards[2] = 10; gameCards[3] = 1;
            bjFlag       = 0; testResult = -16; // Dealer has blackjack, player's score is 20.
            SomeGameTest(pluginHelper, playingDecks, gameCards, testResult, bjFlag);

            gameCards[0] = 10; gameCards[1] = 10; gameCards[2] = 10; gameCards[3] = 7;
            bjFlag       = 0; testResult = 32; // Dealer has 17, player's score is 20.
            SomeGameTest(pluginHelper, playingDecks, gameCards, testResult, bjFlag);

            gameCards[0] = 10; gameCards[1] = 10; gameCards[2] = 5; gameCards[3] = 7;
            bjFlag       = 0; testResult = 8; // Player surrendered
            SomeGameTest(pluginHelper, playingDecks, gameCards, testResult, bjFlag);

            gameCards[0] = 9; gameCards[1] = 8; gameCards[2] = 8; gameCards[3] = 9; gameCards[4] = 10;
            gameCards[5] = 6; gameCards[6] = 10; bjFlag = 0; testResult = 64; // Player won with both hands
            SomeGameTest(pluginHelper, playingDecks, gameCards, testResult, bjFlag);
            // Now we test two games successively
            playingDecks.FillCards();
            gameCards    = playingDecks.Cards;
            gameCards[0] = 10; gameCards[1] = 10; gameCards[2] = 5; gameCards[3] = 7;
            bjFlag       = 0; testResult = 8; // Player surrendered
            uint          initialMoney = 1600;
            BlackjackGame testGame     = new BlackjackGame(playingDecks, initialMoney);

            object[] parameters = new object[] { testGame.PlayingDealer.DealerCards[0], (uint)testGame.InitialMoney, testGame.PlayingCards, (uint)16 };
            pluginHelper.CreatePlayer(parameters, 1);
            testGame.Player = pluginHelper.players[1];
            Assert.AreEqual(testGame.Game(), testResult);
            for (int i = 0; i < 416; i++)
            {
                Assert.AreEqual(testGame.PlayingCards.Cards[i], gameCards[i]);
            }
            // Second game
            gameCards[0] = 9; gameCards[1] = 8; gameCards[2] = 8; gameCards[3] = 9; gameCards[4] = 10;
            gameCards[5] = 6; gameCards[6] = 10; bjFlag = 0; testResult = 64; // Player won with both hands
            Assert.AreEqual(testGame.Game(), testResult);
            for (int i = 0; i < 416; i++)
            {
                Assert.AreEqual(testGame.PlayingCards.Cards[i], gameCards[i]);
            }
        }
예제 #10
0
        static void Main(string[] args)
        {
            Redraw(null, GameEventType.GameUpdated, "App Started");

            BlackjackGame    blackjackGame    = null;
            PlayerController playerController = null;

            while (true)
            {
                var cmd = Console.ReadKey();
                switch (cmd.Key)
                {
                case ConsoleKey.UpArrow:
                    selectedItem = selectedItem > 0 ? selectedItem - 1 : selectedItem;
                    Redraw(blackjackGame, GameEventType.GameUpdated, "Menu updated");
                    break;

                case ConsoleKey.DownArrow:
                    selectedItem = selectedItem < menuItems.Length - 1 ? selectedItem + 1 : selectedItem;
                    Redraw(blackjackGame, GameEventType.GameUpdated, "Menu updated");
                    break;

                case ConsoleKey.Enter:
                    switch (selectedItem)
                    {
                    case 0:         // Initialize (New Game)
                        if (blackjackGame != null)
                        {
                            blackjackGame.GameEvent -= Redraw;
                        }
                        blackjackGame            = new BlackjackGame("Console Dealer");
                        blackjackGame.GameEvent += Redraw;
                        playerController         = blackjackGame.InitializePlayer("Console Player #1");
                        break;

                    case 1:         // Ready
                        try { playerController?.SetReady(); }
                        catch (OperationCanceledException e) { Console.WriteLine("Exception: " + e.Message); }
                        break;

                    case 2:         // Hit
                        try { playerController?.Hit(); }
                        catch (OperationCanceledException e) { Console.WriteLine("Exception: " + e.Message); }
                        break;

                    case 3:         // Stand
                        try { playerController?.Stand(); }
                        catch (OperationCanceledException e) { Console.WriteLine("Exception: " + e.Message); }
                        break;

                    case 4:
                        return;
                    }
                    break;
                }
            }
        }
예제 #11
0
        public void ThreePlayersCanBeAdded()
        {
            //Arrange
            string playerOneFirstName  = "testUserOneFirstName";
            string playerOneLastName   = "testUserOneLastName";
            int    playerOneIdentifier = 1;

            string playerTwoFirstName  = "testUserTwoFirstName";
            string playerTwoLastName   = "testUserTwoLastName";
            int    playerTwoIdentifier = 10;

            string playerThreeFirstName  = "testUserThreeFirstName";
            string playerThreeLastName   = "testUserThreeLastName";
            int    playerThreeIdentifier = 100;

            EPlayers      playerOne   = EPlayers.Player1;
            EPlayers      playerTwo   = EPlayers.Player2;
            EPlayers      playerThree = EPlayers.Player3;
            BlackjackGame testGame;

            //Act
            testGame = new BlackjackGame(6);
            Player testPlayerOne   = new(playerOneFirstName, playerOneLastName, playerOneIdentifier);
            Player testPlayerTwo   = new(playerTwoFirstName, playerTwoLastName, playerTwoIdentifier);
            Player testPlayerThree = new(playerThreeFirstName, playerThreeLastName, playerThreeIdentifier);


            testGame.AddNewPlayer(testPlayerOne);
            testGame.AddNewPlayer(testPlayerTwo);
            testGame.AddNewPlayer(testPlayerThree);

            //Assert
            if (testGame.Players[playerOne].PlayerIdentifier != playerOneIdentifier || testGame.Players[playerOne].FirstName != playerOneFirstName ||
                testGame.Players[playerOne].LastName != playerOneLastName)
            {
                string errorMessage = $"Added player {playerOne} does not exist in the players list of the game!";
                Assert.Fail(errorMessage);
            }

            //Assert
            if (testGame.Players[playerTwo].PlayerIdentifier != playerTwoIdentifier || testGame.Players[playerTwo].FirstName != playerTwoFirstName ||
                testGame.Players[playerTwo].LastName != playerTwoLastName)
            {
                string errorMessage = $"Added player {playerTwo} does not exist in the players list of the game!";
                Assert.Fail(errorMessage);
            }

            //Assert
            if (testGame.Players[playerThree].PlayerIdentifier != playerThreeIdentifier || testGame.Players[playerThree].FirstName != playerThreeFirstName ||
                testGame.Players[playerThree].LastName != playerThreeLastName)
            {
                string errorMessage = $"Added player {playerThree} does not exist in the players list of the game!";
                Assert.Fail(errorMessage);
            }
        }
예제 #12
0
        private void SetWagers(BlackjackGame game)
        {
            var players = game.Players.ToList();

            var playersToWager = game.Players.Where(a => a.Position % 2 == 0).ToList();

            foreach (var player in playersToWager)
            {
                player.SetWager(50);
            }
        }
        public void SomeGameTest(Decks playingCards, byte[] gameCards, int result, byte bjFlag, Bots strategy = Bots.BasicStrategy)
        {
            uint          initialMoney = 1600;
            BlackjackGame testGame     = new BlackjackGame(playingCards, initialMoney, strategy);

            Assert.AreEqual(testGame.Game(), result);
            for (int i = 0; i < 416; i++)
            {
                Assert.AreEqual(testGame.PlayingCards.Cards[i], gameCards[i]);
            }
        }
예제 #14
0
        static void Main()
        {
            BlackjackGame game = new BlackjackGame(
                new System.IO.StreamReader(Console.OpenStandardInput()),
                new System.IO.StreamWriter(Console.OpenStandardOutput()),
                new ConsoleKeyReader()
                );

            Console.Title = game.Title;
            game.Run();
        }
예제 #15
0
 public void return_score_of_one_card_hand()
 {
     foreach (Rank rank1 in Enum.GetValues(typeof(Rank)))
     {
         IHand hand  = new Hand();
         ICard card1 = mockCard1.Object;
         mockCard1.Setup(c => c.rank).Returns(rank1);
         hand.AddCard(card1);
         int expectedScore = BlackjackGame.GetCardValue(card1);
         Assert.AreEqual(expectedScore, hand.Score(true));
     }
 }
예제 #16
0
        public BlackjackGameDealerViewModel(BlackjackGame game)
        {
            if (game == null)
            {
                throw new ArgumentNullException("game");
            }

            Name        = "Dealer";
            Hand        = new BlackjackHandViewModel(game.DealerHand);
            CanShowHand = game.Players.All(a => !a.HasAction);
            PercentOfCardsRemainingInShoe = game.PercentRemainingInDealerShoe;
        }
예제 #17
0
        public async Task Stand()
        {
            BlackjackGame agame        = null;
            int           listLocation = 0;

            foreach (BlackjackGame b in bjg)
            {
                if (Context.User.Id == b._playerID)
                {
                    agame = b;
                    break;
                }
                listLocation++;
            }
            if (agame == null)
            {
                await Context.Channel.SendMessageAsync("Silly, you ain't even playing Blackjack! Type !nep play blackjack to start! ~nepu");

                return;
            }
            agame.EndPlayerTurn(true);
            GraphicsMethods gm = new GraphicsMethods();

            while (true)
            {
                agame.DrawCard(false);
                if (agame.DealerTurnEnd)
                {
                    break;
                }
            }
            await agame.HandMsg.DeleteAsync();

            await Context.Channel.SendFileAsync(gm.CardLayout(agame._playerHand, agame._dealerHand, Context.User.Username), string.Concat("[Dealer:] ", agame.DealerTotal, " [Player:] ", agame.PlayerTotal, " [Bet Amt:] ", agame.TotalBet));

            if (agame.GameEnd())
            {
                SocketUser contUser = Context.User;
                UserData   ud       = ExtensionMethods.FindPerson(contUser.Id);
                bjg.RemoveAt(listLocation);
                if (agame.WhoWon() == 1)
                {
                    EndBlackjack(Context.User.Id, agame.TotalBet, true);
                    await Context.Channel.SendMessageAsync(string.Concat($"{ExtensionMethods.NeptuneEmojis(false)} You won, congrats and all that stuff, now how 'bout buying me a pudding? ~nepu By the way! You have ", ud.Pudding, " pudding now!"));
                }
                if (agame.WhoWon() == 2)
                {
                    EndBlackjack(Context.User.Id, agame.TotalBet, false);
                    await Context.Channel.SendMessageAsync(string.Concat($"{ExtensionMethods.NeptuneEmojis(true)} Yay I won!! Ahem suck to be you! Your {agame.TotalBet} belongs to me now! You have ", ud.Pudding, " pudding left!"));
                }
            }
        }
예제 #18
0
        static void Main(string[] args)
        {
            //BlackjackSettings settings = SaveDefaultSettings();
            BlackjackSettings settings = LoadSettingsFromFile("settings.xml");
            BlackjackGame     game     = new BlackjackGame(settings);

            //ConsoleBlackjackPlayer player = new ConsoleBlackjackPlayer() { Game = game };
            var handsToPlay = 100000000L;
            var player      = new BasicStrategyPlayer(handsToPlay);

            game.Play(new [] { player });
            Console.WriteLine("Profit: {0}%", Math.Round((player.Profit / settings.MinimumBet / (decimal)handsToPlay) * 100m, 2));
        }
예제 #19
0
        private void RecontructPlayerGameFields(BlackjackGame game)
        {
            if (game == null)
            {
                return;
            }

            var playerGameField = typeof(BlackjackGamePlayer)
                                  .GetField("_game", BindingFlags.Instance | BindingFlags.NonPublic);

            game.Players.ToList()
            .ForEach(player => playerGameField.SetValue(player, game));
        }
예제 #20
0
        public static void Main(string[] args)
        {
            var consoleReader = new ConsoleReader();
            var deck          = new Deck();
            var rng           = new Rng();
            var hand          = new Hand();
            var playerHand    = new Hand();
            var dealer        = new Dealer(hand, rng);
            var player        = new Player(playerHand, consoleReader);
            var blackjack     = new BlackjackGame(player, dealer, deck);

            blackjack.PlayGame();
        }
        public void SomeGameTest(PluginHelper pluginHelper, Decks playingCards, byte[] gameCards, int result, byte bjFlag, Bots strategy = Bots.BasicStrategy)
        {
            uint          initialMoney = 1600;
            BlackjackGame testGame     = new BlackjackGame(playingCards, initialMoney);

            object[] parameters = new object[] { testGame.PlayingDealer.DealerCards[0], (uint)testGame.InitialMoney, testGame.PlayingCards, (uint)16 };
            pluginHelper.CreatePlayer(parameters, 1);
            testGame.Player = pluginHelper.players[1];
            Assert.AreEqual(testGame.Game(), result);
            for (int i = 0; i < 416; i++)
            {
                Assert.AreEqual(testGame.PlayingCards.Cards[i], gameCards[i]);
            }
        }
예제 #22
0
        private BlackjackGame InitializeGameForTesting()
        {
            var game = new BlackjackGame(
                minWager: 1,
                maxWager: 100,
                maxPlayers: _numberOfPlayers);

            for (int i = 0; i < _numberOfPlayers; i++)
            {
                var player = new TestPlayer(name: "p" + i);
                game.AddPlayer(player.Account, player.Name);
            }

            return(game);
        }
예제 #23
0
        static void Redraw(BlackjackGame blackjackGame, GameEventType gameEventType, String eventMessage)
        {
            Console.Clear();
            // Print Menu
            for (int i = 0; i < menuItems.Length - 1; i++)
            {
                Console.WriteLine(string.Format(" {0}. {1} \t {2}", (i + 1), menuItems[i], selectedItem == i ? "<<<" : ""));
            }
            Console.WriteLine(string.Format(" 0. {0} \t {1}", menuItems[menuItems.Length - 1], selectedItem == menuItems.Length - 1 ? "<<<" : ""));
            Console.WriteLine();

            // Game Stuff
            Console.WriteLine(blackjackGame?.ToString());
            Console.WriteLine("Event> " + eventMessage + "\n");
        }
예제 #24
0
        public void IfPlayerHasBlackjackPlayerTurnOver()
        {
            var deck       = new Deck();
            var mockDealer = new Mock <IDealer>();
            var mockPlayer = new Mock <IPlayer>();

            mockPlayer.Setup(player => player.HasBlackJack()).Returns(true);
            mockPlayer.Setup(player => player.HasBusted()).Returns(false);

            var blackjack = new BlackjackGame(mockPlayer.Object, mockDealer.Object, deck);

            blackjack.PlayPlayersTurn();
            Assert.False(blackjack.IsPlayerTurn);
            Assert.True(blackjack.IsDealerTurn);
        }
예제 #25
0
        private void PerformRound(BlackjackGame game)
        {
            BlackjackGamePlayer player;

            while ((player = game.Players.FirstOrDefault(f => f.HasAction)) != null)
            {
                if (player.Hand.Score < 17)
                {
                    player.Hit();
                }
                else
                {
                    player.Stand();
                }
            }
        }
예제 #26
0
 /// <summary>
 /// reinitialize game to create new one
 /// </summary>
 /// <returns></returns>
 public async Task ReinitGame()
 {
     _blackjackGame  = new BlackjackGame();
     _messageBuilder = new BlackjackMessageBuilder(_blackjackGame);
     foreach (var entry in Websockets.ToList())
     {
         var wrapper = entry.Value;
         var user    = wrapper.BlackjackUser;
         if (user == null)
         {
             continue;
         }
         user = user.Reinit();
         _blackjackGame.AddUser(wrapper.Place, user);
     }
     await CheckStartGame(false);
 }
예제 #27
0
        public IActionResult PlayBlackjack(string bet)
        {
            /* Get the current logged in user. */
            ViewBag.userId = _userManager.GetUserId(HttpContext.User);
            ApplicationUser user = _userManager.FindByIdAsync(ViewBag.userId).Result;

            ViewBag.User = user;

            // set up game + player objects
            BlackjackGame   blackjack = new BlackjackGame(50, 5000, 6);
            BlackjackPlayer player    = new BlackjackPlayer(user);

            blackjack.AddPlayer(player);

            /* Validation */
            ViewBag.Errors = new List <string>();
            if (!int.TryParse(bet, out int i))
            {
                ViewBag.Errors.Add("The bet must be an integer.");  // checks if bet is an integer
            }
            /* If any errors got added to error list we'll return the view now */
            if (ViewBag.Errors.Count >= 1)
            {
                return(View("Coinflip"));
            }

            // take players bet
            blackjack.Player.Bet(i); // i == bet after validation.

            // display hand values
            ViewBag.PlayerHandValue = blackjack.Player.Hand.GetValue();
            ViewBag.DealerHandValue = blackjack.Dealer.Hand.GetValue();

            // check if player got a blackjack
            if (ViewBag.PlayerHand.Blackjack)
            {
                blackjack.Dealer.Payout(blackjack.Player); // we need an optional blackjack parameter on this method right?
                ViewBag.Results = "You got a Blackjack!";
            }
            else
            {
                ViewBag.CanHit = ViewBag.PlayerHand.CanHit();
            }

            return(View("Blackjack"));
        }
예제 #28
0
        public void CardsAreCorrectlyShuffled()
        {
            //Arrange
            int            numberOfCardDecks = 6;
            IBlackjackGame game;

            //Act
            game = new BlackjackGame(numberOfCardDecks);
            game.ShuffleCards();
            int numberOfDisplacedCards = CalculateDisplacedNumberOfCards(numberOfCardDecks, game.PlayingCards);

            //Assert
            if (numberOfDisplacedCards < game.PlayingCards.Count / 2)
            {
                string errorMessage = $"Minimum accepted number of displaced cards is {game.PlayingCards.Count / 2}. Actual number of displaced cards is {numberOfDisplacedCards}.";
                Assert.Fail(errorMessage);
            }
        }
예제 #29
0
        public void DealerShouldDealCardIfPlayerHits()
        {
            var playerHand = new Hand();
            var mock       = new Mock <IConsoleReader>();

            mock.SetupSequence(reader => reader.GetInput()).Returns("1").Returns("0");
            var player     = new Player(playerHand, mock.Object);
            var dealerHand = new Hand();
            var mockRng    = new Mock <IRng>();

            mockRng.Setup(rng => rng.Next(It.IsAny <int>(), It.IsAny <int>())).Returns(1);
            var dealer    = new Dealer(dealerHand, mockRng.Object);
            var deck      = new Deck();
            var blackjack = new BlackjackGame(player, dealer, deck);

            blackjack.PlayPlayersTurn();
            Assert.Equal(1, player.hand.CardsInHand.Count);
        }
예제 #30
0
        /// <summary>
        /// constructor
        /// </summary>
        public Blackjack_Form()
        {
            InitializeComponent();

            //addFonts();

            game = new BlackjackGame(this);

            // set-up form controls
            x_loc = new int[4] {
                870, 576, 282, -12
            };
            y_loc = 644;

            button_reset.Enabled = false;
            display_playerControls(false, 0);

            groupboxes.Add(groupBox_p1);
            groupboxes.Add(groupBox_p2);
            groupboxes.Add(groupBox_p3);
            groupboxes.Add(groupBox_p4);
            groupboxes.Add(groupBox_dealer);

            labels_hand.Add(label_h1);
            labels_hand.Add(label_h2);
            labels_hand.Add(label_h3);
            labels_hand.Add(label_h4);
            labels_hand.Add(label_hd);

            labels_balance.Add(label_b1);
            labels_balance.Add(label_b2);
            labels_balance.Add(label_b3);
            labels_balance.Add(label_b4);

            panels_bets.Add(flowPanel_1);
            panels_bets.Add(flowPanel_2);
            panels_bets.Add(flowPanel_3);
            panels_bets.Add(flowPanel_4);

            playernames.Add(textBox1);
            playernames.Add(textBox2);
            playernames.Add(textBox3);
            playernames.Add(textBox4);
        }
        public void BlackjackGameFullSimulatedGameTest()
        {
            // arrange
            BlackjackGame game = new BlackjackGame() { AnteAmount = 1.00M };
            decimal startingChipsPerPlayer = 100M;
            int roundsToDeal = 3;

            // act
            game.BeginGame();

            // assert
            Assert.IsTrue(game.State.GetType() == typeof(ReadyToPlayState));
            Assert.IsTrue(game.Players.Count > 1);    // we have players?
            Assert.AreEqual(game.Players.Where(p => p.Bettor.Chips > 0).Count(), game.Players.Count());   // the players all have chips?

            // act
            game.BeginPlay();

            // assert
            Assert.IsTrue(game.State.GetType() == typeof(CardsShuffledState));  
            Assert.IsTrue(IsDeckShuffled(Deck.Instance));  // the deck is shuffled?

            // act
            game.Ante();

            // assert
            Assert.IsTrue(game.State.GetType() == typeof(AntePlacedState));
            Assert.AreEqual(Pot.Instance.Chips, game.AnteAmount * game.Players.Count);  // pot has the correct amount in it?
            Assert.IsTrue(game.Players.Where(p => p.Bettor.Chips == startingChipsPerPlayer - game.AnteAmount).Count() == game.Players.Count);  // all the players' chips are reduced by the ante amount?

            // Deal / bet iterations

            for (int i = 1; i <= roundsToDeal; i++)
            {
                // act
                game.DealRound();

                // assert
                Assert.IsTrue(game.State.GetType() == typeof(CardsDealtState));
                Assert.IsTrue(game.Players.Where(p => p.Hand.Size == i).Count() == game.Players.Count());  // all the players have the correct number of cards?

                // act
                game.AnalyzeHands();

                // assert
                Assert.IsTrue(game.State.GetType() == typeof(BetsPlacedState));
                decimal currentPlayersChipsTotal = game.Players.Select(p => p.Bettor.Chips).Aggregate((ch1, ch2) => ch1 + ch2);
                Assert.AreEqual(currentPlayersChipsTotal + Pot.Instance.Chips, startingChipsPerPlayer * game.Players.Count);  // pot has the correct amount in it?
            }

            // act
            game.NoMoreRounds();

            // assert
            Assert.IsTrue(game.State.GetType() == typeof(CardGameFinishedState));
            Assert.IsTrue(game.Players.Where(p => p.HandStatus == HandStatus.Winner).Count() > 0);  // there was at least one winner?

        }