Qt 5.8 | Qt Sensors | Qt Sensors - Maze QML Example | lib.js Example File

Qt 5.8.0 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);
          }
      }