Skip to content

Instantly share code, notes, and snippets.

Created September 28, 2017 21:42
Show Gist options
  • Save anonymous/6c483fd3651e8191d6d00c2836066a81 to your computer and use it in GitHub Desktop.
Save anonymous/6c483fd3651e8191d6d00c2836066a81 to your computer and use it in GitHub Desktop.
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.placeObject(map.getWidth()-4, 12, 'block');
map.placeObject(map.getWidth()-4, 13, 'block');
map.placeObject(map.getWidth()-4, 14, 'block');
map.placeObject(map.getWidth()-5, 14, 'block');
map.placeObject(map.getWidth()-5, 16, 'block');
map.placeObject(map.getWidth()-6, 14, 'block');
map.placeObject(map.getWidth()-6, 16, 'block');
map.placeObject(map.getWidth()-7, 14, 'block');
map.placeObject(map.getWidth()-8, 14, 'block');
//mur vertical
map.placeObject(map.getWidth()-8, 15, 'block');
map.placeObject(map.getWidth()-8, 16, 'block');
map.placeObject(map.getWidth()-8, 17, 'block');
//mur horizontal
map.placeObject(map.getWidth()-9, 16, 'block');
map.placeObject(map.getWidth()-10, 16, 'block');
map.placeObject(map.getWidth()-11, 16, 'block');
map.placeObject(map.getWidth()-12, 16, 'block');
map.placeObject(map.getWidth()-13, 16, 'block');
map.placeObject(map.getWidth()-14, 16, 'block');
map.placeObject(map.getWidth()-15, 16, 'block');
map.placeObject(map.getWidth()-16, 16, 'block');
map.placeObject(map.getWidth()-17, 16, 'block');
map.placeObject(map.getWidth()-18, 16, 'block');
map.placeObject(map.getWidth()-19, 16, 'block');
map.placeObject(map.getWidth()-20, 16, 'block');
map.placeObject(map.getWidth()-21, 16, 'block');
map.placeObject(map.getWidth()-22, 16, 'block');
map.placeObject(map.getWidth()-23, 16, 'block');
map.placeObject(map.getWidth()-24, 16, 'block');
map.placeObject(map.getWidth()-25, 16, 'block');
map.placeObject(map.getWidth()-26, 16, 'block');
map.placeObject(map.getWidth()-27, 16, 'block');
map.placeObject(map.getWidth()-28, 16, 'block');
map.placeObject(map.getWidth()-29, 16, 'block');
//
map.placeObject(map.getWidth()-30, 16, 'block');
map.placeObject(map.getWidth()-31, 16, 'block');
map.placeObject(map.getWidth()-32, 16, 'block');
map.placeObject(map.getWidth()-33, 16, 'block');
map.placeObject(map.getWidth()-34, 16, 'block');
map.placeObject(map.getWidth()-35, 16, 'block');
map.placeObject(map.getWidth()-36, 16, 'block');
map.placeObject(map.getWidth()-37, 16, 'block');
map.placeObject(map.getWidth()-38, 16, 'block');
map.placeObject(map.getWidth()-39, 16, 'block');
map.placeObject(map.getWidth()-40, 16, 'block');
map.placeObject(map.getWidth()-41, 16, 'block');
map.placeObject(map.getWidth()-42, 16, 'block');
map.placeObject(map.getWidth()-43, 16, 'block');
map.placeObject(map.getWidth()-44, 16, 'block');
map.placeObject(map.getWidth()-44, 17, 'block');
map.placeObject(map.getWidth()-44, 18, 'block');
map.placeObject(map.getWidth()-44, 19, 'block');
map.placeObject(map.getWidth()-44, 20, 'block');
map.placeObject(map.getWidth()-44, 21, 'block');
map.placeObject(map.getWidth()-44, 22, 'block');
map.placeObject(map.getWidth()-44, 23, 'block');
map.placeObject(map.getWidth()-44, 24, 'block');
map.placeObject(map.getWidth()-44, 25, 'block');
map.placeObject(map.getWidth()-44, 26, 'block');
map.placeObject(map.getWidth()-4, 16, 'block');
map.placeObject(map.getWidth()-3, 16, 'block');
map.placeObject(map.getWidth()-2, 16, 'block');
map.placeObject(map.getWidth()-1, 16, 'block');
//map.placeObject(map.getWidth()-4, 15, 'block');
//map.placeObject(map.getWidth()-4, 16, 'block');
}
function validateLevel(map) {
map.validateExactlyXManyObjects(1, 'exit');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment