public virtual void Play(Board board) { bool hasPlayedCard; hasPlayedCard = PlayReserveCardToBuild(board) || PlayCardFromHandToBuild(board) || PlayFromDiscardPileToBuild(board); if (!hasPlayedCard && board.GetHand(this).Count != 0 && board.Winner == null) Discard(board); }
public virtual void Play(Board board) { bool hasPlayedCard; hasPlayedCard = PlayReserveCardToBuild(board) || PlayCardFromHandToBuild(board) || PlayFromDiscardPileToBuild(board); if (!hasPlayedCard && board.GetHand(this).Count != 0 && board.Winner == null) { Discard(board); } }
private bool PlayCardFromHandToBuild(Board board) { foreach (Pile pile in board.BuildPiles) { Pile hand = board.GetHand(this); foreach (Card card in hand) { int playedValue; if (pile.IsLegalPlay(card, pile, out playedValue)) { card.PlayedValue = playedValue; board.DoPlay(new Play(hand, card, pile)); return true; } } } return false; }
private bool PlayCardFromHandToBuild(Board board) { foreach (Pile pile in board.BuildPiles) { Pile hand = board.GetHand(this); foreach (Card card in hand) { int playedValue; if (pile.IsLegalPlay(card, pile, out playedValue)) { card.PlayedValue = playedValue; board.DoPlay(new Play(hand, card, pile)); return(true); } } } return(false); }
private static void AssertFullDeck(Board board) { Histogram histogram = new Histogram(); histogram.AddPile(board.DrawPile); foreach (IPlayer player in board.Players) { histogram.AddPile(board.GetReservePile(player)); histogram.AddPile(board.GetHand(player)); foreach (Pile pile in board.GetDiscardPiles(player)) histogram.AddPile(pile); } foreach (Pile pile in board.BuildPiles) histogram.AddPile(pile); histogram.AssertFullDeck(); }
protected void Discard(Board board) { // Select first card in hand and discard to random pile board.DoPlay(new Play(board.GetHand(this), board.GetDiscardPiles(this)[Utility.Random().Next(Board.NumDiscardPiles)])); }