Пример #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
 private static void PlayGame(PatienceField field)
 {
     field.Stock.JustMoveTop = true;
     string input;
     do
     {
         field.DumpToConsole();
         input = Console.ReadLine();
         if (input.Length < 2)
             field = field.NextCard();
         else if (input.Length == 2)
         {
             var from = field.GetStack(input[0]);
             var to = field.GetStack(input[1]);
             field = Move(field, from, to);
             if (field.IsDone())
                 break;
         }
     } while (input != "exit");
 }
Пример #3
0
        public Patience()
        {
            InitializeComponent();

            Field = new PatienceField();
            Field.FillWithRandomCards(new Random(24));
            Field.Stock.JustMoveTop = true;
            playStack1.Stack        = Field.PlayStacks[0];
            playStack2.Stack        = Field.PlayStacks[1];
            playStack3.Stack        = Field.PlayStacks[2];
            playStack4.Stack        = Field.PlayStacks[3];
            playStack5.Stack        = Field.PlayStacks[4];
            playStack6.Stack        = Field.PlayStacks[5];
            playStack7.Stack        = Field.PlayStacks[6];

            AddPlayHandler(playStack1);
            AddPlayHandler(playStack2);
            AddPlayHandler(playStack3);
            AddPlayHandler(playStack4);
            AddPlayHandler(playStack5);
            AddPlayHandler(playStack6);
            AddPlayHandler(playStack7);

            finishStack1.Stack = Field.FinishStacks[0];
            finishStack2.Stack = Field.FinishStacks[1];
            finishStack3.Stack = Field.FinishStacks[2];
            finishStack4.Stack = Field.FinishStacks[3];

            AddFinishHandler(finishStack1);
            AddFinishHandler(finishStack2);
            AddFinishHandler(finishStack3);
            AddFinishHandler(finishStack4);

            openCardStack.Stack      = Field.Stock;
            openCardStack.MouseDown += (sender, e) => SetOrigin(openCardStack.Stack);

            closedCardStack.Stack = new StockComplementStack()
            {
                Stock = Field.Stock
            };
        }
Пример #4
0
        public Patience()
        {
            InitializeComponent();

            Field = new PatienceField();
            Field.FillWithRandomCards(new Random(24));
            Field.Stock.JustMoveTop = true;
            playStack1.Stack = Field.PlayStacks[0];
            playStack2.Stack = Field.PlayStacks[1];
            playStack3.Stack = Field.PlayStacks[2];
            playStack4.Stack = Field.PlayStacks[3];
            playStack5.Stack = Field.PlayStacks[4];
            playStack6.Stack = Field.PlayStacks[5];
            playStack7.Stack = Field.PlayStacks[6];

            AddPlayHandler(playStack1);
            AddPlayHandler(playStack2);
            AddPlayHandler(playStack3);
            AddPlayHandler(playStack4);
            AddPlayHandler(playStack5);
            AddPlayHandler(playStack6);
            AddPlayHandler(playStack7);

            finishStack1.Stack = Field.FinishStacks[0];
            finishStack2.Stack = Field.FinishStacks[1];
            finishStack3.Stack = Field.FinishStacks[2];
            finishStack4.Stack = Field.FinishStacks[3];

            AddFinishHandler(finishStack1);
            AddFinishHandler(finishStack2);
            AddFinishHandler(finishStack3);
            AddFinishHandler(finishStack4);

            openCardStack.Stack = Field.Stock;
            openCardStack.MouseDown += (sender, e) => SetOrigin(openCardStack.Stack);

            closedCardStack.Stack = new StockComplementStack() { Stock = Field.Stock };
        }
Пример #5
0
 private static SolverEntry TrySolve(PatienceField field, TimeSpan timeout)
 {
     Console.WriteLine(timeout);
     var solver = new Solver(field, silent: false);
     SolverEntry result = solver.Solve(timeout);
     return result;
 }