private Turn.Turn GetNextTurn() { if (CurrentTurn == null) { CurrentTurn = new Turn.Turn(Players.First()); _setAsideCards.Add(RemoveTopCard()); foreach (var player in Players) { var drawn = RemoveTopCard(); var newHand = new Hand.Hand(drawn); _hands[player.Id] = newHand; } } else { if (_remainingPlayers.Count <= 1 || _drawCards.Count <= 0) { return(null); } var nextPlayerIndex = Players.ToList().IndexOf(CurrentTurn.CurrentPlayer) + 1; var nextPlayer = Players.Concat(Players).Skip(nextPlayerIndex).First(); var drawn = Draw(); var newHand = _hands[nextPlayer.Id].Append(drawn); _hands[nextPlayer.Id] = newHand; CurrentTurn = new Turn.Turn(nextPlayer); } return(CurrentTurn); }
private void DiscardAndDraw(Guid targetId) { if (_protectedPlayers.Contains(targetId)) { return; } var hand = _hands[targetId]; Discard(hand.Previous); var newCard = Draw(); var newHand = new Hand.Hand(newCard); _hands[targetId] = newHand; }
protected AbstractPlayer(string name) { Name = name; Hand = new Hand.Hand(); }