Qt Sensors - Maze QML Example▲
Sélectionnez
//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 &
lt; dimension; x++
){
labyrinth[x] =
new
Array(dimension);
for
(var y =
0
; y &
lt; 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 &
lt; dimension &
amp;&
amp; y &
lt; dimension){
var rnd =
Math.floor(Math.random()*
5
);
if
(Math.floor(Math.random()*
2
) ==
1
){
if
(rnd ==
0
) x--
;
if
(rnd &
gt;=
1
) x++
;
if
(x &
lt; 0
) x++
;
if
(x &
gt;=
dimension){
x =
ox;
break
;
}
}
else
{
if
(rnd ==
0
) y--
;
if
(rnd &
gt;=
1
) y++
;
if
(y &
lt; 0
) y++
;
if
(y &
gt;=
dimension){
y =
oy;
break
;
}
}
/*avoid to have [2]2|
|2|2|*/
if
(x &
lt; (dimension -
1
) &
amp;&
amp; y &
lt; (dimension -
1
)){
if
(labyrinth[x +
1
][y] ==
2
&
amp;&
amp; labyrinth[x][y +
1
] ==
2
&
amp;&
amp; labyrinth[x +
1
][y +
1
] ==
2
){
y =
oy;
x =
ox;
continue
;
}
}
/*avoid to have |2[2]
|2|2|*/
if
(x &
gt; 0
&
amp;&
amp; y &
lt; (dimension -
1
)){
if
(labyrinth[x -
1
][y] ==
2
&
amp;&
amp; labyrinth[x][y +
1
] ==
2
&
amp;&
amp; labyrinth[x -
1
][y +
1
] ==
2
){
y =
oy;
x =
ox;
continue
;
}
}
/*avoid to have |2|2|
[2]2|*/
if
(x &
lt; (dimension -
1
) &
amp;&
amp; y &
gt; 0
){
if
(labyrinth[x +
1
][y] ==
2
&
amp;&
amp; labyrinth[x][y -
1
] ==
2
&
amp;&
amp; labyrinth[x +
1
][y -
1
] ==
2
){
y =
oy;
x =
ox;
continue
;
}
}
/*avoid to have |2|2|
|2[2]*/
if
(x &
gt; 0
&
amp;&
amp; y &
gt; 0
){
if
(labyrinth[x -
1
][y] ==
2
&
amp;&
amp; labyrinth[x][y -
1
] ==
2
&
amp;&
amp; labyrinth[x -
1
][y -
1
] ==
2
){
y =
oy;
x =
ox;
continue
;
}
}
labyrinth[x][y] =
2
;
ox =
x;
oy =
y;
}
//finish way
while
(x &
lt; (dimension -
1
)){
labyrinth[x][y] =
2
;
x++
;
}
while
(y &
lt; (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 &
lt; dimension; x++
){
var rnd =
0
;
for
(var y =
0
; y &
lt; 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 &
gt; 0
&
amp;&
amp; y &
gt; 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 &
amp;&
amp; xy ==
xxyy &
amp;&
amp; 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 &
amp;&
amp; xxy ==
xxyy &
amp;&
amp; xxyy ==
xyy){
if
(rnd ==
1
)
rnd =
0
;
else
rnd =
1
;
}
}
else
if
(x ==
0
&
amp;&
amp; y &
gt; 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 &
amp;&
amp; xxy ==
xxyy &
amp;&
amp; 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 &
amp;&
amp; xy ==
xxyy &
amp;&
amp; 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 &
gt; 0
){
if
(labyrinth[idx][idy] ==
1
)
return
false
;
}
if
(dx &
lt; 0
){
if
(labyrinth[idx][idy] ==
1
)
return
false
;
}
if
(dy &
gt; 0
){
if
(labyrinth[idx][idy] ==
1
)
return
false
;
}
if
(dy &
lt; 0
){
if
(labyrinth[idx][idy] ==
1
)
return
false
;
}
//check if won
if
(idx ==
(dimension -
1
) &
amp;&
amp; 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 &
lt; dimension; y++
){
var line =
""
;
for
(var x =
0
; x &
lt; dimension; x++
){
line +=
labyrinth[x][y];
}
console.log(line);
}
}