Exemplo n.º 1
0
    static private void movePuzzle()
    {
        int direction = (int)stackDFS.Pop();

        if (direction == 0)
        {
            PuzzleData.moveLeft(xTempPuzzle, yTempPuzzle);
        }
        else if (direction == 1)
        {
            PuzzleData.moveUp(xTempPuzzle, yTempPuzzle);
        }
        else if (direction == 2)
        {
            PuzzleData.moveRight(xTempPuzzle, yTempPuzzle);
        }
        else if (direction == 3)
        {
            PuzzleData.moveDown(xTempPuzzle, yTempPuzzle);
        }
        if (!trackBack)
        {
            addMove(direction);
        }
        addVisitedList();

        trackBack = false;
    }
Exemplo n.º 2
0
    static private void addNextMove()
    {
        bool moveAdded = false;

        if (isValidMove(0))
        {
            PuzzleData.moveLeft(xTempPuzzle, yTempPuzzle);
            if (isVisitedState())
            {
                PuzzleData.moveRight(xTempPuzzle, yTempPuzzle);
            }
            else
            {
                PuzzleData.moveRight(xTempPuzzle, yTempPuzzle);
                stackDFS.Push(0);
                moveAdded = true;
            }
        }

        if (isValidMove(1))
        {
            PuzzleData.moveUp(xTempPuzzle, yTempPuzzle);
            if (isVisitedState())
            {
                PuzzleData.moveDown(xTempPuzzle, yTempPuzzle);
            }
            else
            {
                PuzzleData.moveDown(xTempPuzzle, yTempPuzzle);
                stackDFS.Push(1);
                moveAdded = true;
            }
        }

        if (isValidMove(2))
        {
            PuzzleData.moveRight(xTempPuzzle, yTempPuzzle);
            if (isVisitedState())
            {
                PuzzleData.moveLeft(xTempPuzzle, yTempPuzzle);
            }
            else
            {
                PuzzleData.moveLeft(xTempPuzzle, yTempPuzzle);
                stackDFS.Push(2);
                moveAdded = true;
            }
        }

        if (isValidMove(3))
        {
            PuzzleData.moveDown(xTempPuzzle, yTempPuzzle);
            if (isVisitedState())
            {
                PuzzleData.moveUp(xTempPuzzle, yTempPuzzle);
            }
            else
            {
                PuzzleData.moveUp(xTempPuzzle, yTempPuzzle);
                stackDFS.Push(3);
                moveAdded = true;
            }
        }
        if (!moveAdded)
        {
            int lastMove = (int)stackMoves.Pop();
            if (lastMove == 0)
            {
                lastMove = 2;
            }
            else if (lastMove == 1)
            {
                lastMove = 3;
            }
            else if (lastMove == 2)
            {
                lastMove = 0;
            }
            else if (lastMove == 3)
            {
                lastMove = 1;
            }

            stackDFS.Push(lastMove);
            trackBack = true;
        }
    }