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); }
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"); }
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 }; }
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; }