public void HandleRequestAsync(RequestModel requestModel, IOutputBoundary <ResponseModel> outputBoundary)
        {
            _ = requestModel?.PlayerId ?? throw new ArgumentNullException(nameof(requestModel.PlayerId));

            var avitar = AvitarRepository.ReadAsync(requestModel.PlayerId);

            var currentPlayer = new BlackJackPlayer(avitar, HandIdProvider, requestModel.HandCount);

            var keyAndGame = GameRepository.FindByStatusFirstOrDefault(GameStatus.Waiting, requestModel.MaxPlayers);

            string        gameIdentifier;
            BlackJackGame game;

            if (string.IsNullOrEmpty(keyAndGame.Key))
            {
                gameIdentifier = GameIdProviders.GenerateGameId();
                game           = new BlackJackGame(CardProvider, DealerProvider.Dealer, requestModel.MaxPlayers);
            }
            else
            {
                gameIdentifier = keyAndGame.Key;
                game           = keyAndGame.Value;
            }

            game.AddPlayer(currentPlayer);

            GameRepository.UpdateAsync(gameIdentifier, game);

            outputBoundary.HandleResponse(new ResponseModel()
            {
                GameIdentifier = gameIdentifier
            });
        }
        public void HandleRequestAsync(RequestModel requestModel, out ResponseModel responseModel)
        {
            var maxPlayers = MaxPlayersOrDefault(requestModel.HandCount);
            var game       = GameRepository.FindOpenGame(GameStatus.Waiting, maxPlayers);

            var avitar = new AvitarDto()
            {
                Id           = requestModel.PlayerId,
                UserName     = "******",
                EmailAddress = "*****@*****.**"
            };

            var handCount = HandCountOrDefault(requestModel.HandCount);

            var player = new BlackJackPlayer(avitar, HandIdProvider, handCount);

            //TODO: The reay will need to be after some sort of polling
            game.Status = GameStatus.Ready;
            game.AddPlayer(player);

            GameRepository.UpdateAsync(game.Id, game);

            var gameModel = game.ToModel(game.CurrentPlayer.Identifier);

            responseModel = new ResponseModel()
            {
                Game = gameModel
            };
        }
Beispiel #3
0
 public void Init()
 {
     DealerNamedData = new BlackJackPlayer(new AvitarDto()
     {
         id = "1234ck64-f9d8", userName = "******"
     }, HandIdentifierProvider, 1);
 }
Beispiel #4
0
 /// <summary>
 /// Set occupant of this spot
 /// </summary>
 public void SetSpotOccupant(BlackJackPlayer occupant)
 {
     m_SpotOccupant = occupant;
     m_PlayerCashAmount.gameObject.SetActive(true);
     m_PlayerBetAmount.gameObject.SetActive(true);
     m_SpotOccupant.onBetUpdated  += RefreshBetAmount;
     m_SpotOccupant.onCashUpdated += RefreshCashAmount;
     m_SpotOccupant.GetHand().onHandUpdated += RefreshHandValue;
     if (m_HitButton)
     {
         m_HitButton.onClick.AddListener(() => m_SpotOccupant.DoAction(BlackJackPlayer.PlayerAction.Hit));
     }
     if (m_StandButton)
     {
         m_StandButton.onClick.AddListener(() => m_SpotOccupant.DoAction(BlackJackPlayer.PlayerAction.Stand));
     }
     if (m_DoubleDownButton)
     {
         m_DoubleDownButton.onClick.AddListener(() => m_SpotOccupant.DoAction(BlackJackPlayer.PlayerAction.DoubleDown));
     }
     if (m_Surrender)
     {
         m_Surrender.onClick.AddListener(() => m_SpotOccupant.DoAction(BlackJackPlayer.PlayerAction.Surrender));
     }
 }
        public void Player2Hands_DealHand_CorrectStartingValues()
        {
            var playerId  = "8625cf04-b7e2";
            var playerOne = new BlackJackPlayer(new AvitarDto()
            {
                id = "8625cf04-b7e2", userName = playerName
            }, HandIdentifierProvider, 2);

            var handId  = new GuidBasedHandIdentifierProviderMock().GenerateHandIds(1).Single();
            var handId2 = new GuidBasedHandIdentifierProviderMock().GenerateHandIds(2).Single(i => i != handId);

            playerOne.Status = PlayerStatusTypes.Ready;
            playerOne.DealHands(twoThreeClubs2X);

            Assert.AreEqual(true, playerOne.Hands.Single(h => h.Identifier == handId).Cards.ElementAt(0).FaceDown);
            Assert.AreEqual(false, playerOne.Hands.Single(h => h.Identifier == handId).Cards.ElementAt(1).FaceDown);
            Assert.AreEqual(5, playerOne.Hands.Single(h => h.Identifier == handId).PointValue);
            Assert.AreEqual(PlayerStatusTypes.InProgress, playerOne.Status);
            Assert.AreEqual(playerId, playerOne.Identifier);
            Assert.AreEqual(2, playerOne.Hands.Count());
            Assert.AreEqual(HandStatusTypes.InProgress, playerOne.Hands.Single(h => h.Identifier == handId).Status);

            Assert.AreEqual(true, playerOne.Hands.Single(h => h.Identifier == handId2).Cards.ElementAt(0).FaceDown);
            Assert.AreEqual(false, playerOne.Hands.Single(h => h.Identifier == handId2).Cards.ElementAt(1).FaceDown);
            Assert.AreEqual(5, playerOne.Hands.Single(h => h.Identifier == handId2).PointValue);
            Assert.AreEqual(HandStatusTypes.InProgress, playerOne.Hands.Single(h => h.Identifier == handId2).Status);
        }
        public void PlayerSingleHand_DealAndHit_CorrectInstanceValues()
        {
            var playerId  = "8625cf04-b7e2";
            var playerOne = new BlackJackPlayer(new AvitarDto()
            {
                id = "8625cf04-b7e2", userName = playerName
            }, HandIdentifierProvider, 1);
            var blkJkJackClubs = new BlackJackCard(jackClubs, true);
            var handId         = new GuidBasedHandIdentifierProviderMock().GenerateHandIds(1).Single();

            playerOne.Status = PlayerStatusTypes.Ready;
            playerOne.DealHands(twoThreeClubs);
            Assert.AreEqual(PlayerStatusTypes.InProgress, playerOne.Status);

            playerOne.Hit(handId, blkJkJackClubs);

            Assert.AreEqual(true, playerOne.Hands.Single(h => h.Identifier == handId).Cards.ElementAt(0).FaceDown);
            Assert.AreEqual(false, playerOne.Hands.Single(h => h.Identifier == handId).Cards.ElementAt(1).FaceDown);
            Assert.AreEqual(false, playerOne.Hands.Single(h => h.Identifier == handId).Cards.ElementAt(2).FaceDown);
            Assert.AreEqual(15, playerOne.Hands.Single(h => h.Identifier == handId).PointValue);
            Assert.AreEqual(PlayerStatusTypes.InProgress, playerOne.Status);
            Assert.AreEqual(playerId, playerOne.Identifier);
            Assert.AreEqual(1, playerOne.Hands.Count());
            Assert.AreEqual(HandStatusTypes.InProgress, playerOne.Hands.Single(h => h.Identifier == handId).Status);
        }
Beispiel #7
0
    public void AddNewPlayer(int spotIndex)
    {
        BlackJackPlayer newPlayer = new BlackJackPlayer();

        newPlayer.onActionPlayed += OnPlayerAction;
        newPlayer.SetPlayerId(spotIndex);
        m_Players.Add(newPlayer);
        m_TableSpots[spotIndex].SetSpotOccupant(newPlayer);
    }
        public void NewPlayer_NoCards_StatusInProgress()
        {
            var sam = new BlackJackPlayer(new AvitarDto()
            {
                id = "8625cf04-b7e2", userName = playerName
            }, HandIdentifierProvider, 1);

            Assert.AreEqual(PlayerStatusTypes.Waiting, sam.Status);
        }
Beispiel #9
0
    private IEnumerator EndTurn()
    {
        int             dealerCardValue = m_DealerPlayer.GetHand().GetHandValue();
        HandStatus      status          = HandStatus.NONE;
        int             playerHandValue = 0;
        BlackJackPlayer player          = null;

        for (int pIndex = 0; pIndex < m_TableSpots.Length; pIndex++)
        {
            if (!m_TableSpots[pIndex].IsOccupied())
            {
                continue;
            }
            player          = m_TableSpots[pIndex].Occupant;
            playerHandValue = m_TableSpots[pIndex].Occupant.GetHand().GetHandValue();
            if (player.GetHand().IsBlackjack())
            {
                status = HandStatus.BJ;
            }
            else if (playerHandValue > 21)
            {
                status = HandStatus.BUST;
            }
            else if (playerHandValue == dealerCardValue)
            {
                status = HandStatus.PUSH;
            }
            else if (playerHandValue > dealerCardValue || dealerCardValue > 21)
            {
                status = HandStatus.WIN;
            }
            else
            {
                status = HandStatus.LOSE;
            }

            switch (status)
            {
            case HandStatus.PUSH:
                player.AddPlayerCash(player.GetBetAmount());
                break;

            case HandStatus.BJ:
                player.AddPlayerCash((int)(player.GetBetAmount() * 2.5));
                break;

            case HandStatus.WIN:
                player.AddPlayerCash(player.GetBetAmount() * 2);
                break;
            }
            m_TableSpots[pIndex].SetStatus(status);
            yield return(new WaitForSeconds(3));
        }
        m_CurrentRoutine = null;
        SetGameState(GameState.RESET);
    }
Beispiel #10
0
        public Guid CreateGame(string playerName)
        {
            var newId  = Guid.NewGuid();
            var deck   = new Deck(new RandomNumberGenerator());
            var dealer = new BlackJackDealer();
            var player = new BlackJackPlayer(playerName);

            _games[newId] = new BlackJackGame(newId, deck, dealer, player);
            return(newId);
        }
        public void NewPlayer_NoCards_HandEmpty()
        {
            var sam = new BlackJackPlayer(new AvitarDto()
            {
                id = "8625cf04-b7e2", userName = playerName
            }, HandIdentifierProvider, 1);

            Assert.AreEqual(1, sam.Hands.Count());
            Assert.AreEqual(false, sam.Hands.First().Cards.Any());
            Assert.AreEqual(playerName, sam.Name);
            Assert.AreEqual(PlayerStatusTypes.Waiting, sam.Status);
        }
        public void NewPlayer_CalculateTotal_TotalFive()
        {
            var sam = new BlackJackPlayer(new AvitarDto()
            {
                id = "8625cf04-b7e2", userName = playerName
            }, HandIdentifierProvider, 1);

            var handId = new GuidBasedHandIdentifierProviderMock().GenerateHandIds(1).Single();

            sam.Status = PlayerStatusTypes.Ready;
            sam.DealHands(twoThreeClubs);
            Assert.AreEqual(5, sam.Hands.First().PointValue);
        }
Beispiel #13
0
 public void RemoveOccupant()
 {
     m_PlayerCashAmount.gameObject.SetActive(false);
     m_PlayerHandDisplay.SetActive(false);
     m_PlayerBetAmount.gameObject.SetActive(false);
     m_SpotOccupant.GetHand().onHandUpdated -= RefreshHandValue;
     m_SpotOccupant.onBetUpdated  -= RefreshBetAmount;
     m_SpotOccupant.onCashUpdated -= RefreshCashAmount;
     m_SpotOccupant = null;
     m_HitButton.onClick.RemoveAllListeners();
     m_StandButton.onClick.RemoveAllListeners();
     m_DoubleDownButton.onClick.RemoveAllListeners();
     m_Surrender.onClick.RemoveAllListeners();
 }
Beispiel #14
0
        public void GetHandWeigthTest3()
        {
            // Arrange
            BlackJackPlayer player = new BlackJackPlayer("player");

            player.Hand = new List <Card> {
                new Card(Face.Ace, Suit.Club), new Card(Face.Ace, Suit.Club),
                new Card(Face.Ace, Suit.Diamond), new Card(Face.Seven, Suit.Club), new Card(Face.Ten, Suit.Club)
            };

            // Act
            int result = player.GetHandWeigth();

            // Assert
            Assert.AreEqual(20, result);
        }
        // show the card images for the current hand
        public void showHandImages(BlackJackPlayer player)
        {
            int i           = 0;
            int cardsInHand = player.hand.CardCount;

            Panel      panel;
            PictureBox currentBox;
            Card       pictureBoxCard;

            Image backOfCard = Image.FromFile(@"./cards/backofcard.gif");

            // determine which panel we are dealing with
            if (player.Name.Equals("dealer"))
            {
                panel = pnlDealer;
            }
            else
            {
                panel = pnlPlayer;
            }

            // loop through each pictureBox in the panel and get the image for the corresponding card in the player hand

            foreach (Control c in panel.Controls)
            {
                if (c is PictureBox)
                {
                    currentBox = (PictureBox)c;

                    if (i < cardsInHand)
                    {
                        pictureBoxCard = player.hand.getNextCard(i);
                        // get the image for the card
                        currentBox.Image = pictureBoxCard.getImage();
                    }
                    else
                    {
                        currentBox.Image = backOfCard;
                    }

                    //increment pictureBox counter
                    i++;
                }
            }

            this.txtMessageBox.Text += "Sum of " + player.Name + "'s hand = " + player.hand.getSumOfCards() + Environment.NewLine;
        }
        public void Player2Hands_HoldsOneHand_PlayerStatusInProgress()
        {
            var playerOne = new BlackJackPlayer(new AvitarDto()
            {
                id = "8625cf04-b7e2", userName = playerName
            }, HandIdentifierProvider, 2);

            var blkJkJackClubs = new BlackJackCard(jackClubs, true);
            var handId         = new GuidBasedHandIdentifierProviderMock().GenerateHandIds(1).Single();

            playerOne.Status = PlayerStatusTypes.Ready;
            playerOne.DealHands(twoThreeClubs2X);
            playerOne.Hit(handId, blkJkJackClubs);
            playerOne.Hold(handId);

            Assert.AreEqual(PlayerStatusTypes.InProgress, playerOne.Status);
        }
Beispiel #17
0
    /// <summary>
    /// カード実体を生成し、配るアニメーションを再生する。
    /// </summary>
    /// <param name="card"></param>
    /// <param name="dealTarget"></param>
    /// <param name="isReverse"></param>
    /// <returns>実体</returns>
    public CardInstance DealCardAnime(Card card, BlackJackPlayer dealTarget, bool isReverse)
    {
        Vector3 rotate = new Vector3(0.0f, 0.0f, 170.0f);

        if (isReverse)
        {
            rotate.y = 180.0f;
            rotate.z = 190.0f;
        }

        GameObject   cardInstanceObject = Instantiate(cardPrefab, CardInitPoint.position, Quaternion.Euler(rotate), transform);
        CardInstance cardInstance       = cardInstanceObject.GetComponent <CardInstance>();

        cardInstance.SetCardInfo(card);
        cardInstances.Add(cardInstanceObject);
        cardInstance.CardMove(dealTarget.GetDealPosition());

        return(cardInstance);
    }
        public void Player_HoldsCard_PlayerStatusComplete()
        {
            var playerOne = new BlackJackPlayer(new AvitarDto()
            {
                id = "8625cf04-b7e2", userName = playerName
            }, HandIdentifierProvider, 1);

            var blkJkTwoClubs   = new BlackJackCard(twoClubs, true);
            var blkJkThreeClubs = new BlackJackCard(threeClubs, false);
            var blkJkJackClubs  = new BlackJackCard(jackClubs, true);
            var handId          = new GuidBasedHandIdentifierProviderMock().GenerateHandIds(1).Single();

            playerOne.Hit(handId, blkJkTwoClubs);
            playerOne.Hit(handId, blkJkThreeClubs);
            playerOne.Hit(handId, blkJkJackClubs);
            playerOne.Hold(handId);

            Assert.AreEqual(PlayerStatusTypes.Complete, playerOne.Status);
        }
Beispiel #19
0
    private IEnumerator PlayerTurn()
    {
        BlackJackPlayer player = null;

        for (int sIndex = 0; sIndex < m_TableSpots.Length; sIndex++)
        {
            if (!m_TableSpots[sIndex].IsOccupied())
            {
                continue;
            }
            m_TableSpots[sIndex].TogglePlayerCardAction(true);
            player = m_TableSpots[sIndex].Occupant;
            while (player.GetHand().GetHandValue() <= 21 && !player.Standed())
            {
                yield return(null);
            }
            m_TableSpots[sIndex].TogglePlayerCardAction(false);
        }
        m_CurrentRoutine = null;
        SetGameState(GameState.DEALER_ACTION);
    }
Beispiel #20
0
        static void Main(string[] args)
        {
            Console.WriteLine("Black Jack");
            Console.WriteLine();
            var deck   = new Deck(new RandomNumberGenerator());
            var player = new BlackJackPlayer("Stefan");
            var dealer = new BlackJackDealer();
            var game   = new BlackJackGame(Guid.NewGuid(), deck, dealer, player);

            Console.WriteLine("Do you want to play Black Jack? (y/n):");

            while (Console.ReadLine() == "y")
            {
                game.StartNewGame();

                DisplayPlayerInfo(game.Player);
                DisplayPlayerInfo(game.Dealer);

                Console.WriteLine($"{game.Player.Name}, do you want a hit?");

                while (!game.Player.IsBust && Console.ReadLine() == "y")
                {
                    game.PlayerHits();

                    DisplayPlayerInfo(game.Player);
                }

                if (!game.Player.IsBust)
                {
                    game.PlayerSticks();
                }

                DisplayPlayerInfo(game.Dealer);

                Console.WriteLine($"...and the winner is: {game.GetWinnerName()}");

                Console.WriteLine("You want to play again? (y/n)");
            }
        }