public class CardPile {
	public CardPile (int xl, int yl )
		{ x = xl; y = yl; pile = new Stack(); }
	public PlayingCard top 
		{ get { return (PlayingCard) pile.Peek (); } }
	public bool isEmpty 
		{ get { return pile.Count == 0; }	}
	public PlayingCard pop 
		{ get { return (PlayingCard) pile.Pop (); } }
		
		// the following are sometimes overridden
	public virtual bool includes (int tx, int ty ) {
		return( ( x <= tx ) && ( tx <= x + CardView.Width ) &&
		    ( y <= ty ) && ( ty <= y + CardView.Height ) );
	}
	public virtual void select (int tx, int ty ) {
		// do nothing--override
	}
	public virtual void addCard (PlayingCard aCard )
		{ pile.Push(aCard); }
	public virtual void display (CardView cv) {
		if ( isEmpty ) {
			cv.display(null, x, y);
		} else {
			cv.display((PlayingCard) pile.Peek(), x, y );
		}
	}
	public virtual bool canTake (PlayingCard aCard)
		{ return false; }
	protected int x, y; // coordinates of the card pile
	protected Stack pile; // card pile data
}