Exemple #1
0
        //pop a card from a Pile
        Card PopFromPile(PileName p)
        {
            if (p == PileName.Stock)
            {
                return(Stock.Pop());
            }

            return(Discard.Pop());
        }
Exemple #2
0
        //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);
            }
        }
Exemple #3
0
        //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);
        }
Exemple #4
0
 public DrawMove(Player player, PileName pile)
     : base(player)
 {
     _pile = pile;
 }