private static void MoveCurrentCardToEndOfDeck(ref Contexts.Entities.Game game, string playerId) { var allCards = game.PlayerCards.ToArray(); var cards = allCards.Where(playerCard => playerCard.PlayerId == playerId).ToArray(); var lastCardOrder = cards.Max(card => card.Order); cards.First().Order = lastCardOrder + 1; }
internal static Models.Game Create(Contexts.Entities.Game entity) { return(new Models.Game { Player1 = PlayerFactory.Create(entity.Player1Id, entity), Player2 = PlayerFactory.Create(entity.Player2Id, entity) }); }
private async Task UpdateGameAndStartIfReady(Contexts.Entities.Game game) { if (IsGameReady(game)) { await DealCards(game).ConfigureAwait(false); } await _repository.UpdateGame(game).ConfigureAwait(false); }
private static void TransferCardToWinner(ref Contexts.Entities.Game game, Card losingCard, string winnerId) { var allCards = game.PlayerCards.ToArray(); var cardToTransfer = allCards.Single(playerCard => playerCard.CardId == losingCard.Id); var winnersCards = allCards.Where(playerCard => playerCard.PlayerId == winnerId).ToArray(); var lastWinnersCardOrder = winnersCards.Max(winnerCard => winnerCard.Order); cardToTransfer.Order = lastWinnersCardOrder + 1; cardToTransfer.PlayerId = winnerId; }
private async Task DealCards(Contexts.Entities.Game game) { var availableCards = (await _repository.GetAllCards().ConfigureAwait(false)).ToList(); var player1Cards = new List <Contexts.Entities.PlayerCard>(NumberCardsPerPlayerPerGame); var player2Cards = new List <Contexts.Entities.PlayerCard>(NumberCardsPerPlayerPerGame); for (var order = 0; order < NumberCardsPerPlayerPerGame; order++) { game.PlayerCards.Add(PickCard(game.Player1Id, order, ref availableCards, ref player1Cards)); game.PlayerCards.Add(PickCard(game.Player2Id, order, ref availableCards, ref player2Cards)); } }
internal static Player Create(string playerId, Contexts.Entities.Game game) { var playersCards = game.PlayerCards .Where(playerCard => playerCard.PlayerId == playerId) .OrderBy(playerCard => playerCard.Order) .ToArray(); var nextCardEntity = playersCards.FirstOrDefault()?.Card; return(new Player { NumberOfCardsRemaining = playersCards.Count(), NextCard = (nextCardEntity == null) ? null : CardFactory.Create(nextCardEntity) }); }
private static bool IsGameReady(Contexts.Entities.Game game) { return(!string.IsNullOrWhiteSpace(game.Player1Id) && !string.IsNullOrWhiteSpace(game.Player2Id)); }