//pop a card from a Pile Card PopFromPile(PileName p) { if (p == PileName.Stock) { return(Stock.Pop()); } return(Discard.Pop()); }
//check the target pile is empty or not public bool IsPileEmpty(PileName p) { switch (p) { case PileName.Stock: return(Stock.Empty); case PileName.Discard: return(Discard.Empty); default: return(true); } }
//draw a card from stock or discard //player //pile public void DrawCard(Player player, PileName pn) { if (!CanDraw(player)) { _currentError = ErrorMessage.NotPlayerTurn; throw new ArgumentException("It is not this player's turn", "player"); } if (IsPileEmpty(pn)) { throw new ArgumentException("The pile is empty", "pn"); } Card c = PopFromPile(pn); AddToPlayerCards(player, c); //if drawn from discard pile, remeber the card if (pn == PileName.Discard) { _cardJustDrawn = c; } else { _cardJustDrawn = null; } if (pn == PileName.Stock && IsPileEmpty(PileName.Stock)) { var topOnDiscard = Discard.Pop(); while (Discard.Count > 0) { Stock.Add(Discard.Pop()); Stock.Shuffle(null); } Discard.Add(topOnDiscard); } _currentError = ErrorMessage.NoError; var newState = (player == Player.One) ?State.Player1MeldLayDiscard : State.Player2MeldLayDiscard; AfterActStuff(new DrawMove(player, pn), newState); }
public DrawMove(Player player, PileName pile) : base(player) { _pile = pile; }