Example #1
0
        public async Task <StandGameView> Stand(long gameId)
        {
            var          playerIds     = new List <long>();
            var          standGameView = new StandGameView();
            var          userMessage   = string.Empty;
            GameViewItem gameViewItem  = await GetGameViewItem(gameId);

            List <Card> deck = await _cardRepository.GetByIds(gameViewItem.Deck);

            if (gameViewItem.Human.BetValue == 0)
            {
                throw new Exception(UserMessages.NoBetValue);
            }

            if ((gameViewItem.Dealer.Hand.CardsInHandValue != Constant.WinValue) ||
                (gameViewItem.Dealer.Hand.CardsInHand.Count() != Constant.NumberCardForBlackJack))
            {
                foreach (var bot in gameViewItem.Bots)
                {
                    bot.Hand = await GetPlayerHand(bot.Id, gameId);
                    await BotTurn(bot.Id, deck, gameId, bot.Hand);
                }
            }

            await BotTurn(gameViewItem.Dealer.Id, deck, gameId, gameViewItem.Dealer.Hand);

            gameViewItem.Dealer.Hand = await GetPlayerHand(gameViewItem.Dealer.Id, gameId);

            foreach (var bot in gameViewItem.Bots)
            {
                bot.Hand = await GetPlayerHand(bot.Id, gameId);
                await UpdateScore(bot, gameViewItem.Dealer.Hand.CardsInHandValue, gameId);

                playerIds.Add(bot.Id);
            }

            playerIds.Add(gameViewItem.Human.Id);
            userMessage = await UpdateScore(gameViewItem.Human, gameViewItem.Dealer.Hand.CardsInHandValue, gameId);

            await _playerInGameRepository.UpdateBet(playerIds, gameId, 0);


            gameViewItem = await GetGameViewItem(gameId);

            gameViewItem.Options = UserMessages.OptionSetBet(userMessage);
            standGameView        = Mapper.Map <GameViewItem, StandGameView>(gameViewItem);

            return(standGameView);
        }
Example #2
0
        public GameViewItem GetView(Game game, List <PlayerInGame> playersInGame, List <long> deck)
        {
            foreach (var playerInGame in playersInGame)
            {
                game.PlayersInGame.Where(player => player.PlayerId == playerInGame.PlayerId).FirstOrDefault().CardsInHand = playerInGame.CardsInHand;
            }

            var getGameViewModel = new GameViewItem()
            {
                Bots = new List <PlayerViewItem>()
            };

            var human  = game.PlayersInGame.Where(player => player.Player.Type == PlayerType.Human).FirstOrDefault();
            var dealer = game.PlayersInGame.Where(player => player.Player.Type == PlayerType.Dealer).FirstOrDefault();

            getGameViewModel.Human          = Mapper.Map <Player, PlayerViewItem>(human.Player);
            getGameViewModel.Human.BetValue = human.BetValue;
            getGameViewModel.Human.Hand     = GetHand(human.CardsInHand);
            getGameViewModel.Dealer         = Mapper.Map <Player, DealerViewItem>(dealer.Player);
            getGameViewModel.Dealer.Hand    = GetHand(game.PlayersInGame.Where(player => player.PlayerId == dealer.PlayerId).FirstOrDefault().CardsInHand);

            foreach (var playerInGame in game.PlayersInGame.Where(player => player.Player.Type == PlayerType.Bot))
            {
                var bot = new PlayerViewItem();

                bot          = Mapper.Map <Player, PlayerViewItem>(playerInGame.Player);
                bot.BetValue = playerInGame.BetValue;

                bot.Hand = GetHand(playerInGame.CardsInHand);

                getGameViewModel.Bots.Add(bot);
            }

            if (getGameViewModel.Human.Hand.CardsInHand.Count() != 0)
            {
                getGameViewModel.Options = UserMessages.OptionDrawCard;
            }

            if ((getGameViewModel.Human.Hand.CardsInHand.Count() == 0) ||
                (getGameViewModel.Human.BetValue == 0))
            {
                getGameViewModel.Options = UserMessages.OptionSetBet(string.Empty);
            }

            getGameViewModel.Deck = deck;

            return(getGameViewModel);
        }
Example #3
0
        public async Task <ResponseStartMatchGameView> StartGame(string playerName, int botsAmount)
        {
            Player human = await _playerRepository.GetPlayerByName(playerName);

            var  responseStartMatchGameView = new ResponseStartMatchGameView();
            var  gameViewItem = new GameViewItem();
            long gameId;
            long oldGameId;

            if (human == null)
            {
                human = new Player {
                    Name = playerName, Type = PlayerType.Human, Points = Constant.DefaultPointsValue
                };
                var humanId = await _playerRepository.Add(human);

                human.Id = humanId;
            }

            await RestoreCardsInDb();

            oldGameId = await _gameRepository.GetGameIdByHumanId(human.Id);

            if (oldGameId != 0)
            {
                await _cardInHandRepository.RemoveAllCardsByGameId(oldGameId);

                await _playerInGameRepository.RemoveAllPlayersFromGame(oldGameId);

                await _gameRepository.Delete(new Game()
                {
                    Id = oldGameId
                });
            }

            gameId = await _gameRepository.Add(new Game());
            await AddPlayerToGame(human, gameId, botsAmount);

            responseStartMatchGameView = new ResponseStartMatchGameView();
            gameViewItem = await GetGameViewItem(gameId);

            responseStartMatchGameView        = Mapper.Map <GameViewItem, ResponseStartMatchGameView>(gameViewItem);
            responseStartMatchGameView.GameId = gameId;

            return(responseStartMatchGameView);
        }
Example #4
0
        private async Task <DrawGameView> GetDrawGameView(long gameId)
        {
            var          drawGameView = new DrawGameView();
            GameViewItem getGameView  = await GetGameViewItem(gameId);

            getGameView.Options = UserMessages.OptionDrawCard;

            if (getGameView.Human.Hand.CardsInHandValue >= Constant.WinValue)
            {
                StandGameView standGameView = await Stand(gameId);

                getGameView = Mapper.Map <StandGameView, GameViewItem>(standGameView);
            }

            drawGameView = Mapper.Map <GameViewItem, DrawGameView>(getGameView);

            return(drawGameView);
        }
Example #5
0
        public async Task <ResponseBetGameView> PlaceBet(RequestBetGameView requestBetGameView)
        {
            var         responseBetGameView = new ResponseBetGameView();
            var         gameViewItem        = new GameViewItem();
            long        humanId;
            int         humanBetValue;
            List <long> deck = await GetDeckInGame(requestBetGameView.GameId);

            List <long> playersId = await _playerInGameRepository.GetAllPlayersIdByGameId(requestBetGameView.GameId);

            if (requestBetGameView.BetValue <= 0)
            {
                throw new Exception(UserMessages.NoBetValue);
            }

            humanId = await _playerInGameRepository.GetHumanIdByGameId(requestBetGameView.GameId);

            await _cardInHandRepository.RemoveAllCardsByGameId(requestBetGameView.GameId);

            humanBetValue = await _playerInGameRepository.GetBetByPlayerId(humanId, requestBetGameView.GameId);

            if (humanBetValue != 0)
            {
                throw new Exception(UserMessages.AlreadyBet);
            }

            await _playerInGameRepository.UpdateBet(new List <long> {
                humanId
            }, requestBetGameView.GameId, requestBetGameView.BetValue);

            _logger.Log(LogHelper.GetEvent(humanId, requestBetGameView.GameId, UserMessages.PlayerPlaceBet(requestBetGameView.BetValue)));
            await UpdateBotsBetValue(requestBetGameView.GameId);

            foreach (var playerId in playersId)
            {
                deck = await AddCardToPlayerHand(playerId, deck, requestBetGameView.GameId);

                deck = await AddCardToPlayerHand(playerId, deck, requestBetGameView.GameId);
            }

            responseBetGameView = await GetResponseBetGameView(requestBetGameView.GameId);

            return(responseBetGameView);
        }
Example #6
0
        private async Task <GameViewItem> GetGameViewItem(long gameId)
        {
            var  gameMapper = new GameMapper();
            Game game       = await _gameRepository.GetById(gameId);

            List <long>         playerIds     = game.PlayersInGame.Select(playerInGame => playerInGame.PlayerId).ToList();
            List <PlayerInGame> playersInGame = await _playerInGameRepository.GetPlayersInGameByPlayerIds(playerIds);

            List <long> deck = await GetDeckInGame(gameId);

            GameViewItem gameViewItem = gameMapper.GetView(game, playersInGame, deck);

            if (gameViewItem.Human.Points <= Constant.MinPointsValueToPlay)
            {
                await _playerRepository.UpdatePlayersPoints(new List <long> {
                    gameViewItem.Human.Id
                }, Constant.DefaultPointsValue);

                gameViewItem.Human.Points = Constant.DefaultPointsValue;
            }

            return(gameViewItem);
        }