lib.js Example File | Qt Sensors 5.5

- Qt 5.5
- Qt Sensors
- Qt Sensors - Maze QML Example
- lib.js Example File
- Qt 5.5.1 Reference Documentation

# lib.js Example File

maze/lib.js

    //global variables
    var labyrinth = null;
    var dimension = 24;
    var cellDimension = 13;
    var won;
    var objectArray = null;
    var sec = 0.0

    //Allocate labyrinth arrays and create labyrinth and way reflected in the labyrinth array
    function createLabyrinth()
    {
        won = false;
        //create the labyrinth matrix
        labyrinth = null;
        labyrinth = new Array(dimension);
        for (var x = 0; x < dimension; x++ ){
            labyrinth[x] = new Array(dimension);
            for (var y = 0; y < dimension; y++ ){
                labyrinth[x][y] = 0;
            }
        }
        createWay();
        createLab();
    }

    //Create a way where the mouse can reach the cheese
    function createWay()
    {
        //Create rnd way to have at least one solution
        //A way square is marked as a 2 in the labyrinth array
        var x = 0;
        var y = 0;
        var ox = x;
        var oy = y;
        labyrinth[0][0] = 2;
        while (x < dimension && y < dimension){
            var rnd = Math.floor(Math.random()*5);
            if (Math.floor(Math.random()*2) == 1){
                if (rnd == 0) x--;
                if (rnd >= 1) x++;
                if (x < 0) x++;
                if (x >= dimension){
                    x = ox;
                    break;
                }
            }
            else {
                if (rnd == 0) y--;
                if (rnd >= 1) y++;
                if (y < 0) y++;
                if (y >= dimension){
                    y = oy;
                    break;
                }
            }

            /*avoid to have [2]2|
                            |2|2|*/
            if (x < (dimension - 1) && y < (dimension - 1)){
                if (labyrinth[x + 1][y] == 2
                    && labyrinth[x][y + 1] == 2
                    && labyrinth[x + 1][y + 1] == 2){
                    y = oy;
                    x = ox;
                    continue;
                }
            }
            /*avoid to have |2[2]
                            |2|2|*/
            if (x > 0 && y < (dimension - 1)){
                if (labyrinth[x - 1][y] == 2
                    && labyrinth[x][y + 1] == 2
                    && labyrinth[x - 1][y + 1] == 2){
                    y = oy;
                    x = ox;
                    continue;
                }
            }
            /*avoid to have |2|2|
                            [2]2|*/
            if (x < (dimension - 1) && y > 0){
                if (labyrinth[x + 1][y] == 2
                    && labyrinth[x][y - 1] == 2
                    && labyrinth[x + 1][y - 1] == 2){
                    y = oy;
                    x = ox;
                    continue;
                }
            }
            /*avoid to have |2|2|
                            |2[2]*/
            if (x > 0 && y > 0){
                if (labyrinth[x - 1][y] == 2
                    && labyrinth[x][y - 1] == 2
                    && labyrinth[x - 1][y - 1] == 2){
                    y = oy;
                    x = ox;
                    continue;
                }
            }

            labyrinth[x][y] = 2;
            ox = x;
            oy = y;
        }
        //finish way
        while (x < (dimension - 1)){
            labyrinth[x][y] = 2;
            x++;
        }
        while (y < (dimension - 1)){
            labyrinth[x][y] = 2;
            y++;
        }
    }

    //Create the labyrinth with rnd values
    function createLab()
    {
        //A wall square is marked as a 1 in the labyrinth array
        //Not a wall square is marked as a 0 in the labyrinth array
        //The Cheese square is marked as a 3 in the labyrinth array
        //The start is marked as a -1 in the labyrinth array
        for (var x = 0; x < dimension; x++ ){
            var rnd = 0;
            for (var y = 0; y < dimension; y++){
                //But don't overwrite the way
                if (labyrinth[x][y] != 2){
                    var rnd = Math.floor(Math.random()*2);
                    var xy = 0;
                    var xxy = 0;
                    var xyy = 0;
                    var xxyy = 0;

                    if (x > 0 && y > 0){
                        xy = labyrinth[x - 1][y - 1];
                        if (xy == 2)
                            xy = 0;

                        xyy = labyrinth[x - 1][y];
                        if (xyy == 2)
                            xyy = 0;

                        xxy = labyrinth[x][y - 1];
                        if (xxy == 2)
                            xxy = 0;

                        xxyy = rnd;
                        if (xxyy == 2)
                            xxyy = 0;

                        //avoid to have to many |0|1| or |1|0| [xy  ][xxy ]
                        //                      |1[0]    |0[1] [xyy ][xxyy]
                        if (xyy == xxy && xy == xxyy && xy != xxy){
                            if (rnd == 1)
                                rnd = 0;
                            else rnd = 1;
                        }

                        //avoid to have to many |1|1| or |0|0|
                        //                      |1[1]    |0[0]
                        if (xy == xxy && xxy == xxyy && xxyy == xyy){
                            if (rnd == 1)
                                rnd = 0;
                            else rnd = 1;
                        }
                    }
                    else if (x == 0 && y > 0){
                        xy = labyrinth[x][y - 1];
                        if (xy == 2)
                            xy = 0;

                        xyy = rnd;
                        if (xyy == 2)
                            xyy = 0;

                        xxy = labyrinth[x + 1][y - 1];
                        if (xxy == 2)
                            xxy = 0;

                        xxyy = labyrinth[x + 1][y];
                        if (xxyy == 2)
                            xxyy = 0;

                        //avoid to have to many |1|1| or |0|0|
                        //                      |1[1]    |0[0]
                        if (xy == xxy && xxy == xxyy && xxyy == xyy){
                            if (rnd == 1)
                                rnd = 0;
                            else rnd = 1;
                        }

                        //avoid to have to many |0|1| or |1|0| [xy  ][xxy ]
                        //                      |1[0]    |0[1] [xyy ][xxyy]
                        if (xyy == xxy && xy == xxyy && xy != xxy){
                            if (rnd == 1)
                                rnd = 0;
                            else rnd = 1;
                        }
                    }
                    labyrinth[x][y] = rnd;
                }

            }
        }
        //set start and end
        labyrinth[0][0] = -1;
        labyrinth[0][1] = 0;
        labyrinth[1][0] = 0;
        labyrinth[1][1] = 0;

        labyrinth[dimension - 2][dimension - 2] = 0;
        labyrinth[dimension - 2][dimension - 1] = 0;
        labyrinth[dimension - 1][dimension - 2] = 0;
        labyrinth[dimension - 1][dimension - 1] = 3;
    }

    //Function that checks if the mouse can be moved in x and y
    function canMove(x, y)
    {
        //Check if movement is allowed
        var xcenter = x + (cellDimension / 2);
        var ycenter = y + (cellDimension / 2);
        //try to get the index
        var idx = Math.floor(xcenter / cellDimension);
        var idy = Math.floor(ycenter / cellDimension);
        var dx = xcenter - (idx * cellDimension + ( cellDimension / 2 ));
        var dy = ycenter - (idy * cellDimension + ( cellDimension / 2 ));

        if (dx > 0){
            if (labyrinth[idx][idy] == 1)
                return false;
        }
        if (dx < 0){
            if (labyrinth[idx][idy] == 1)
                return false;
        }
        if (dy > 0){
            if (labyrinth[idx][idy] == 1)
                return false;
        }
        if (dy < 0){
            if (labyrinth[idx][idy] == 1)
                return false;
        }
        //check if won
        if (idx == (dimension - 1) && idy == (dimension - 1))
            won = true;
        return true;
    }

    //Function that prints out the labyrith array values in the console
    function printLab()
    {
        //for debug purposes print out lab n console
        var iy = 0;
        for (var y = 0; y < dimension; y++ ){
            var line = "";
            for (var x = 0; x < dimension; x++ ){
                line += labyrinth[x][y];
            }
            console.log(line);
        }
    }