>>3290Hey, I remember this game! My solution to level 13 was this:
var canMove = function(x,y, walked){
return (map.getObjectTypeAt(x, y) == 'empty' ||
map.getObjectTypeAt(x,y) == 'blueKey') &&
walked[x][y] == undefined;
}
var getPath = function(goal, c, max, walked){
walked[c.x][c.y] = true;
map.setSquareColor(c.x, c.y, '#FFF');
var sol = [];
if(c.x == goal.x && c.y == goal.y){
sol.push({'x': c.x, 'y': c.y});
return sol;
}
if(max == 0){
return sol;
}
c.x += 1;
if(canMove(c.x, c.y, walked)){
sol = sol.concat(getPath(goal, c, max-1, walked));
if(sol.length != 0){
sol.push({'x': c.x, 'y': c.y, 'd': "right"});
}
}
c.x -= 2;
if(sol.length == 0 && canMove(c.x, c.y, walked)){
sol = sol.concat(getPath(goal, c, max-1, walked));
if(sol.length != 0){
sol.push({'x': c.x, 'y': c.y, 'd': "left"});
}
}
c.x += 1;
c.y += 1;
if(sol.length == 0 && canMove(c.x, c.y, walked)){
sol = sol.concat(getPath(goal, c, max-1, walked));
if(sol.length != 0){
sol.push({'x': c.x, 'y': c.y, 'd': "down"});
}
}
c.y -= 2;
if(sol.length == 0 && canMove(c.x, c.y, walked)){
sol = sol.concat(getPath(goal, c, max-1, walked));
if(sol.length != 0){
sol.push({'x': c.x, 'y': c.y, 'd': "up"});
}
}
c.y += 1;
return sol;
}
if(me.firstrun == undefined){
var walked = [];
for(var i = 0; i < map.getWidth(); i++){
walked[i] = [];
}
me.path = getPath({'x': map.getWidth()-2, 'y': 8},
{'x': me.getX()-1, 'y': me.getY()},
200,
walked
);
console.log(map.getWidth()-2, me.path);
me.iterator = me.path.length-1;
me.firstrun = false;
}
if(me.iterator > 0){
me.iterator--;
me.move(me.path[me.iterator].d);
} else {
me.move("down");