-
-
Save wasnertobias/9ce6c6e4a4fc7943ec3d to your computer and use it in GitHub Desktop.
Solution to level 8 in Untrusted: http://alex.nisnevich.com/untrusted/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************* | |
* intoTheWoods.js * | |
******************* | |
* | |
* Ah, you're out of the woods now. Or into the woods, as the | |
* case may be. | |
* | |
* So take a deep breath, relax, and remember what you're here | |
* for in the first place. | |
* | |
* I've traced its signal and the Algorithm is nearby. You'll | |
* need to go through the forest and across the river, and | |
* you'll reach the fortress where it's kept. Their defences | |
* are light, and we should be able to catch them off-guard. | |
*/ | |
function startLevel(map) { | |
// NOTE: In this level alone, map.placeObject is allowed to | |
//overwrite existing objects. | |
map.displayChapter('Chapter 2\nRaiders of the Lost Algorithm'); | |
map.placePlayer(2, map.getHeight() - 1); | |
var functionList = {}; | |
functionList['fortresses'] = function () { | |
function genRandomValue(direction) { | |
if (direction === "height") { | |
return Math.floor(Math.random() * (map.getHeight()-3)); | |
} else if (direction === "width") { | |
return Math.floor(Math.random() * (map.getWidth()+1)); | |
} | |
} | |
var x = genRandomValue("width"); | |
var y = genRandomValue("height"); | |
for (var i = x-2; i < x+2; i++) { | |
map.placeObject(i,y-2, 'block'); | |
} | |
for (var i = x-2; i < x+2; i++) { | |
map.placeObject(i,y+2, 'block'); | |
} | |
for (var j = y-2; j < y+2; j++) { | |
map.placeObject(x-2,j, 'block'); | |
} | |
for (var j = y-2; j < y+2; j++) { | |
map.placeObject(x+2,j, 'block'); | |
} | |
}; | |
functionList['generateForest'] = function () { | |
for (var i = 0; i < map.getWidth(); i++) { | |
for (var j = 0; j < map.getHeight(); j++) { | |
// initialize to empty if the square contains a forest already | |
if (map.getObjectTypeAt(i, j) === 'tree') { | |
// remove existing forest | |
map.placeObject(i,j, 'empty'); | |
} | |
if (map.getPlayer().atLocation(i,j) || | |
map.getObjectTypeAt(i, j) === 'block' || | |
map.getObjectTypeAt(i, j) === 'exit') { | |
continue; | |
} | |
var rv = Math.random(); | |
if (rv < 0.45) { | |
map.placeObject(i, j, 'tree'); | |
} | |
} | |
} | |
map.refresh(); | |
}; | |
functionList['movePlayerToExit'] = function () { | |
map.writeStatus("Permission denied."); | |
} | |
functionList['pleaseMovePlayerToExit'] = function () { | |
map.writeStatus("I don't think so."); | |
} | |
functionList['movePlayerToExitDamnit'] = function () { | |
map.writeStatus("So, how 'bout them <LOCAL SPORTS TEAM>?"); | |
} | |
// generate forest | |
functionList['generateForest'](); | |
// generate fortresses | |
functionList['fortresses'](); | |
functionList['fortresses'](); | |
functionList['fortresses'](); | |
functionList['fortresses'](); | |
map.getPlayer().setPhoneCallback(functionList["generateForest"]); | |
map.placeObject(map.getWidth()-1, map.getHeight()-1, 'exit'); | |
} | |
function validateLevel(map) { | |
map.validateAtLeastXObjects(100, 'tree'); | |
map.validateExactlyXManyObjects(1, 'exit'); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment