public void SearchPrepare() { FoundSolution = false; Solution = null; NbBacktrack = 0; var validMoves = genMoves(Game).FindAll(m => canMove(Game, m)); movesTrace = new MovesTrace <T2>(); movesTrace.AddStep(validMoves); stepSearch = StepSearch.Forward; }
void doSearch() { if (stepSearch == StepSearch.Backward) { if (movesTrace.CurrentStep == null) { return; } var step = movesTrace.CurrentStep.Value; var move = step.CurrentMove.Value; undoMove(Game, move); if (step.CurrentMove.Next != null) { step.CurrentMove = step.CurrentMove.Next; stepSearch = StepSearch.Forward; } else { movesTrace.RemoveLast(); } } else { var step = movesTrace.CurrentStep.Value; var move = step.CurrentMove.Value; doMove(Game, move); stepSearch = StepSearch.Forward; if (endGame(Game)) { checkSolution(); stepSearch = StepSearch.Backward; } else { var validMoves = genMoves(Game).FindAll(m => canMove(Game, m)); if (validMoves.Count == 0) { stepSearch = StepSearch.Backward; ++NbBacktrack; } else { movesTrace.AddStep(validMoves); } } } }