diff options
author | Lincoln Ramsay <lincoln.ramsay@nokia.com> | 2012-06-19 15:47:09 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-20 01:56:15 +0200 |
commit | b2e97817684f40ab9353fa279a4c02ef9c12e13d (patch) | |
tree | b7c7114b555539de9e1bc5a1bd1ed5afeed777bb /examples/sensors/maze/lib.js | |
parent | 5e89b386f4aae5a4953c725b6aab565b21a3330f (diff) |
Remove the 'special' naming of examples.
Just go back to the naming convention we had before.
Change-Id: Iefecb7a5e0ab3aa4d22267b4f475a8e9c1c96058
Reviewed-by: Lorn Potter <lorn.potter@nokia.com>
Diffstat (limited to 'examples/sensors/maze/lib.js')
-rw-r--r-- | examples/sensors/maze/lib.js | 264 |
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); + } +} |