summaryrefslogtreecommitdiffstats
path: root/examples/sensors/maze/lib.js
diff options
context:
space:
mode:
Diffstat (limited to 'examples/sensors/maze/lib.js')
-rw-r--r--examples/sensors/maze/lib.js264
1 files changed, 264 insertions, 0 deletions
diff --git a/examples/sensors/maze/lib.js b/examples/sensors/maze/lib.js
new file mode 100644
index 00000000..3bae6a86
--- /dev/null
+++ b/examples/sensors/maze/lib.js
@@ -0,0 +1,264 @@
+//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);
+ }
+}