# Solution to level 6 in Untrusted: http://alex.nisnevich.com/untrusted/

Home   »   Solution to level 6 in Untrusted: http://alex.nisnevich.com/untrusted/

``````
/****************
* drones101.js *
****************
*
* Do you remember, my dear Professor, a certain introductory
* computational rationality class you taught long ago? Assignment
* #2, behavior functions of autonomous agents? I remember that one
* fondly - but attack drones are so much easier to reason about
* when they're not staring you in the face, I would imagine!
*/

function startLevel(map) {
function moveToward(obj, type) {
var target = obj.findNearest(type);
var leftDist = obj.getX() - target.x;
var upDist = obj.getY() - target.y;

var direction;
if (upDist == 0 && leftDist == 0) {
return;
} if (upDist > 0 && upDist >= leftDist) {
direction = 'up';
} else if (upDist < 0 && upDist < leftDist) {
direction = 'down';
} else if (leftDist > 0 && leftDist >= upDist) {
direction = 'left';
} else {
direction = 'right';
}

if (obj.canMove(direction)) {
obj.move(direction);
}
}

map.defineObject('attackDrone', {
'type': 'dynamic',
'symbol': 'd',
'color': 'red',
'onCollision': function (player) {
player.killedBy('an attack drone');
},
'behavior': function (me) {
moveToward(me, 'player');
}
});

map.placePlayer(1, 1);
map.placeObject(map.getWidth()-2, 12, 'attackDrone');
map.placeObject(map.getWidth()-1, 12, 'exit');

map.placeObject(map.getWidth()-1, 11, 'block');
map.placeObject(map.getWidth()-2, 11, 'block');
map.placeObject(map.getWidth()-1, 13, 'block');
map.placeObject(map.getWidth()-2, 13, 'block');
map.defineObject('attackDrone2', {
'type': 'dynamic',
'symbol': 'e',
'color': 'purple',
});
map.defineObject('attackDrone3', {
'type': 'dynamic',
'symbol': 'e',
'color': 'purple',
});
map.defineObject('attackDrone4', {
'type': 'dynamic',
'symbol': 'e',
'color': 'purple',
});
map.placeObject(map.getWidth()-6, 12, 'attackDrone2');
map.placeObject(map.getWidth()-5, 13, 'attackDrone3');
map.placeObject(map.getWidth()-5, 11, 'attackDrone2');
}

function validateLevel(map) {
map.validateExactlyXManyObjects(1, 'exit');
}
``````