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