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