Skip to content

Instantly share code, notes, and snippets.

Created June 6, 2014 06:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/2b108479b618ed27d8d4 to your computer and use it in GitHub Desktop.
Save anonymous/2b108479b618ed27d8d4 to your computer and use it in GitHub Desktop.
Solution to level 16 in Untrusted: http://alex.nisnevich.com/untrusted/
/*************
* lasers.js *
*************
*
* Time to unleash the killer lasers! Each laser will kill you
* unless you have the appropriate color. Too bad you can't
* see which color corresponds to which laser!
*/
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function startLevel(map) {
map.placePlayer(0, 0);
map.placeObject(map.getWidth()-1, map.getHeight()-1, 'exit');
var player = map.getPlayer();
for (var i = 0; i < 25; i++) {
var colors = ['red', 'yellow', 'teal'];
var startX = getRandomInt(0, 600);
var startY = getRandomInt(0, 500);
var angle = getRandomInt(0, 360);
var length = getRandomInt(200, 300);
var color = colors[i % 3];
createLaser(startX, startY, angle, length, color);
}
function createLaser(centerX, centerY, angleInDegrees, length, color) {
var angleInRadians = angleInDegrees * Math.PI / 180;
var x1 = centerX - Math.cos(angleInRadians) * length / 2;
var y1 = centerY + Math.sin(angleInRadians) * length / 2;
var x2 = centerX + Math.cos(angleInRadians) * length / 2;
var y2 = centerY - Math.sin(angleInRadians) * length / 2;
// map.createLine() creates a line with an effect when
// the player moves over it, but doesn't display it
map.createLine([x1, y1], [x2, y2], function (player) {
if (player.getColor() != color) {
player.killedBy('a ' + color + ' laser');
}
});
// using canvas to draw the line
var ctx = map.getCanvasContext();
ctx.beginPath();
ctx.strokeStyle = color;
ctx.lineWidth = 5;
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.stroke();
if (player.colorlist === undefined) {
player.colorlist = [];
}
player.colorlist.push(color);
console.log(player.colorlist);
player.setPhoneCallback(function () {
if (player.colorIndex === undefined) {
player.colorIndex = 0;
}
player.colorIndex++;
if (player.colorIndex >= player.colorlist.length) {
player.colorIndex = 0;
}
console.log(player.colorIndex);
player.setColor(player.colorlist[player.colorIndex]);
console.log(player.color);
});
}
}
function validateLevel(map) {
map.validateExactlyXManyObjects(1, 'exit');
map.validateAtLeastXLines(25);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment