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); }
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); }
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); }
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); }
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); }
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); }