Skip to content

Instantly share code, notes, and snippets.

Created April 17, 2014 19:31
Show Gist options
  • Select an option

  • Save anonymous/11006610 to your computer and use it in GitHub Desktop.

Select an option

Save anonymous/11006610 to your computer and use it in GitHub Desktop.

Revisions

  1. @invalid-email-address Anonymous created this gist Apr 17, 2014.
    105 changes: 105 additions & 0 deletions untrusted-lvl7-solution.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,105 @@
    /*************
    * colors.js *
    *************
    *
    * You're almost at the exit. You just need to get past this
    * color lock.
    *
    * Changing your environment is no longer enough. You must
    * learn to change yourself. I've sent you a little something
    * that should help with that.
    */

    function startLevel(map) {
    map.placePlayer(0, 12);

    map.placeObject(5, 12, 'phone');

    // The function phone lets you call arbitrary functions,
    // as defined by player.setPhoneCallback() below.
    // The function phone callback is bound to Q or Ctrl-6.
    map.getPlayer().setPhoneCallback(function () {
    var player = map.getPlayer();

    switch (color){
    case 1:
    player.setColor('#0f0');
    color++;
    break;
    case 2:
    player.setColor('#f00');
    color++;
    break;
    case 3:
    player.setColor('#ff0');
    color = 1;
    break;

    }

    });
    var color = 1;


    ({
    });


    map.defineObject('redLock', {
    symbol: '☒',
    color: "#f00", // red
    impassable: function(player, object) {
    return player.getColor() != object.color;
    }
    });

    map.defineObject('greenLock', {
    symbol: '☒',
    color: "#0f0", // green
    impassable: function(player, object) {
    return player.getColor() != object.color;
    }
    });

    map.defineObject('yellowLock', {
    symbol: '☒',
    color: "#ff0", // yellow
    impassable: function(player, object) {
    return player.getColor() != object.color;
    }
    });

    for (var x = 20; x <= 40; x++) {
    map.placeObject(x, 11, 'block');
    map.placeObject(x, 13, 'block');
    }
    map.placeObject(22, 12, 'greenLock');
    map.placeObject(25, 12, 'redLock');
    map.placeObject(28, 12, 'yellowLock');
    map.placeObject(31, 12, 'greenLock');
    map.placeObject(34, 12, 'redLock');
    map.placeObject(37, 12, 'yellowLock');
    map.placeObject(40, 12, 'exit');
    for (var y = 0; y < map.getHeight(); y++) {
    if (y != 12) {
    map.placeObject(40, y, 'block');
    }
    for (var x = 41; x < map.getWidth(); x++) {
    map.setSquareColor(x, y, '#080');
    }
    }
    }

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

    function onExit(map) {
    if (!map.getPlayer().hasItem('phone')) {
    map.writeStatus("We need the phone!");
    return false;
    } else {
    return true;
    }
    }