Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
 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)
     });
 }
Ejemplo n.º 3
0
        private async Task UpdateGameAndStartIfReady(Contexts.Entities.Game game)
        {
            if (IsGameReady(game))
            {
                await DealCards(game).ConfigureAwait(false);
            }

            await _repository.UpdateGame(game).ConfigureAwait(false);
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
        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));
            }
        }
Ejemplo n.º 6
0
        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)
            });
        }
Ejemplo n.º 7
0
 private static bool IsGameReady(Contexts.Entities.Game game)
 {
     return(!string.IsNullOrWhiteSpace(game.Player1Id) && !string.IsNullOrWhiteSpace(game.Player2Id));
 }