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