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