示例#1
0
        private static PatienceField Move(PatienceField field, CardStack from, CardStack to)
        {
            if (from == null || to == null)
            {
                Console.WriteLine("Invalid move: unknown stack");
                return(field);
            }

            var cardToMove = from.GetMovableCards().FirstOrDefault(c => to.CanAccept(c, from));

            if (cardToMove == null)
            {
                Console.WriteLine("Invalid move: none of the cards on from can enter destination");
                return(field);
            }
            return(field.Move(cardToMove, from, to));
        }
示例#2
0
        public PatienceField Move(Card toMove, CardStack from, CardStack to)
        {
            var newto = to.Accept(toMove, from);
            var newfrom = from.Remove(toMove);

            var newstock = Replace(Stock, from, newfrom);

            var newplaystacks = PlayStacks;
            var newfinishstacks = FinishStacks;

            if (from is PlayStack)
                newplaystacks = newplaystacks.Select(ps => Replace(ps, from, newfrom));
            else if (from is FinishStack)
                newfinishstacks = newfinishstacks.Select(ps => Replace(ps, from, newfrom));

            if (to is PlayStack)
                newplaystacks = newplaystacks.Select(ps => Replace(ps, to, newto));
            else if (to is FinishStack)
                newfinishstacks = newfinishstacks.Select(ps => Replace(ps, to, newto));

            return new PatienceField(newstock, newplaystacks, newfinishstacks);
        }
示例#3
0
 protected override CardStack DoAccept(Card c, CardStack from)
 {
     return(new FinishStack(this, c));
 }
示例#4
0
 protected abstract CardStack DoAccept(Card c, CardStack from);
示例#5
0
 public abstract bool CanAccept(Card c, CardStack from);
示例#6
0
 public override bool CanAccept(Card c, CardStack from)
 {
     return(false);
 }
示例#7
0
 protected override CardStack DoAccept(Card c, CardStack from)
 {
     // Cards cannot return to stock
     throw new InvalidOperationException();
 }