private bool PlayFromDiscardPileToBuild(Board board) { foreach (Pile discardPile in board.GetDiscardPiles(this)) { if (discardPile.HasCards) { foreach (Pile buildPile in board.BuildPiles) { int playedValue; if (buildPile.IsLegalPlay(discardPile.Top, buildPile, out playedValue)) { discardPile.Top.PlayedValue = playedValue; board.DoPlay(new Play(discardPile, buildPile)); 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(); }
private static void AssertBoardValid(Board board) { AssertFullDeck(board); foreach (IPlayer player in board.Players) { Assert.IsTrue(board.GetReservePile(player).Count <= Board.ReservePileMax, "Excessive reserve pile: " + board.GetReservePile(player).Count); Assert.AreEqual(Board.NumDiscardPiles, board.GetDiscardPiles(player).Count, "Wrong number of discard piles."); Assert.AreEqual(Board.NumBuildPiles, board.BuildPiles.Count, "Wrong number of build piles."); } }
private bool PlayFromDiscardPileToBuild(Board board) { foreach (Pile discardPile in board.GetDiscardPiles(this)) { if (discardPile.HasCards) { foreach (Pile buildPile in board.BuildPiles) { int playedValue; if (buildPile.IsLegalPlay(discardPile.Top, buildPile, out playedValue)) { discardPile.Top.PlayedValue = playedValue; board.DoPlay(new Play(discardPile, buildPile)); return true; } } } } return false; }
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)])); }