Exemple #1
0
        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;
        }
Exemple #2
0
        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);
                    }
                }
            }
        }