예제 #1
0
        public void Handle(CardCutEvent cardCutEvent, GameState gameState)
        {
            gameState.OpeningRound.CutCards.Add(new PlayerIdCard { Player = cardCutEvent.PlayerId, Card = new Card(cardCutEvent.CutCard) });

            bool isDone = gameState.GameRules.PlayerCount == gameState.OpeningRound.CutCards.Count;
            gameState.OpeningRound.Complete = isDone;

            if (isDone && gameState.Rounds.Count == 0)
            {
                var order = new StandardOrder();

                var winningPlayerCut = gameState.OpeningRound.CutCards.MinBy(playerCard => order.Order(playerCard.Card));
                gameState.OpeningRound.WinningPlayerCut = winningPlayerCut.Player;
            }
        }
예제 #2
0
        public void CutCard(int playerId, Card card)
        {
            var validation = new CardCutEventValidation();
            var cardCutEvent = new CardCutEvent { GameId = State.Id, CutCard = card, PlayerId = playerId };
            validation.Validate(State, cardCutEvent);

            Stream.Add(cardCutEvent);

            if (State.OpeningRound.Complete)
            {
                Stream.Add(new RoundStartedEvent { GameId = State.Id });
                _deck.Shuffle();
                Stream.Add(new DeckShuffledEvent { Deck = _deck.ToList(), GameId = State.Id });
                var playerHands = _dealer.CreatePlayerHands(_deck, State.PlayerIds, State.PlayerIds.NextOf(playerId), State.GameRules.HandSizeToDeal); // get next player from who won cut.
                Stream.Add(new HandsDealtEvent { GameId = State.Id, Hands = playerHands });
            }
        }