SHARE
TWEET

Untitled

a guest Apr 21st, 2019 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * robotMaze.js
  3.  *
  4.  * The blue key is inside a labyrinth, and extracting
  5.  * it will not be easy.
  6.  *
  7.  * It's a good thing that you're a AI expert, or
  8.  * we would have to leave empty-handed.
  9.  */
  10.  
  11. function startLevel(map) {
  12.     // Hint: you can press R or 5 to "rest" and not move the
  13.     // player, while the robot moves around.
  14.  
  15.     map.getRandomInt = function(min, max) {
  16.         return Math.floor(Math.random() * (max - min + 1)) + min;
  17.     }
  18.  
  19.     map.placePlayer(map.getWidth()-1, map.getHeight()-1);
  20.     var player = map.getPlayer();
  21.  
  22.     map.defineObject('robot', {
  23.         'type': 'dynamic',
  24.         'symbol': 'R',
  25.         'color': 'gray',
  26.         'onCollision': function (player, me) {
  27.             me.giveItemTo(player, 'blueKey');
  28.         },
  29.         'behavior': function (me) {
  30.  
  31.             var x = me.getX();
  32.             var y = me.getY();
  33.             var endX = map.getWidth() - 2;
  34.  
  35.             if ((x == endX) && ((y == 7) || (y == 8) || (y == 9))) {
  36.                 // At key (or above) or barrier, move down.
  37.                 me.move('down');
  38.             } else if ((x == endX-1) && ((y == 7) || (y == 8))) {
  39.                 // To the left of key (getAdjecent won't pick this up).
  40.                 if (me.canMove('right')) {
  41.                     me.move('right');
  42.                 } else {
  43.                     me.move('down');
  44.                 }
  45.             } else if (! ((x == endX) && (y == 10)) ) {
  46.                    // Not outside.. figure out our move.
  47.                
  48.                 // Get available moves from here.
  49.                 var moves = map.getAdjacentEmptyCells(me.getX(), me.getY());
  50.  
  51.                 // See if we're at a 'deadspot'
  52.                 var deadspot = false;
  53.                 if (moves.length == 1) {
  54.                         deadspot = true;
  55.                 } else if (moves.length == 2) {                                        
  56.                     // Probably a better way to figure this out, but...
  57.                     var topLeftCorner =
  58.                         (!me.canMove('left') && !me.canMove('up')) &&
  59.                         ((map.getObjectTypeAt(x+1,y+1) != 'block' ) &&
  60.                         (map.getObjectTypeAt(x+1,y+1) != 'tree' ));
  61.            
  62.                     var topRightCorner =
  63.                         (!me.canMove('right') && !me.canMove('up')) &&
  64.                         ((map.getObjectTypeAt(x-1,y+1) != 'block' ) &&
  65.                         (map.getObjectTypeAt(x-1,y+1) != 'tree'));
  66.            
  67.                     var bottomLeftCorner =
  68.                         (!me.canMove('right') && !me.canMove('down')) &&
  69.                         ((map.getObjectTypeAt(x+1,y-1) != 'block' ) &&
  70.                         (map.getObjectTypeAt(x+1,y-1) != 'tree'));
  71.            
  72.                     var bottomRightCorner =
  73.                         (!me.canMove('left') && !me.canMove('down')) &&
  74.                         ((map.getObjectTypeAt(x-1,y-1) != 'block') &&
  75.                         (map.getObjectTypeAt(x-1,y-1) != 'tree') );
  76.                    
  77.                     deadspot = topLeftCorner || topRightCorner ||
  78.                         bottomLeftCorner || bottomRightCorner;
  79.                     }
  80.                
  81.                 // Move randomly.
  82.                 me.move(moves[map.getRandomInt(0, moves.length - 1)][1]);
  83.                                
  84.                 moves = map.getAdjacentEmptyCells(me.getX(), me.getY());
  85.                 if (deadspot == true) {
  86.                        // We have a deadspot - persist it with a block!
  87.                      map.placeObject(x,y, 'tree');
  88.                 }
  89.  
  90.             } // else we're free stay still!
  91.  
  92.  
  93.         }
  94.     });
  95.  
  96.     map.defineObject('barrier', {
  97.         'symbol': '░',
  98.         'color': 'purple',
  99.         'impassable': true,
  100.         'passableFor': ['robot']
  101.     });
  102.  
  103.     map.placeObject(0, map.getHeight() - 1, 'exit');
  104.     map.placeObject(1, 1, 'robot');
  105.     map.placeObject(map.getWidth() - 2, 8, 'blueKey');
  106.     map.placeObject(map.getWidth() - 2, 9, 'barrier');
  107.  
  108.     var autoGeneratedMaze = new ROT.Map.DividedMaze(map.getWidth(), 10);
  109.     autoGeneratedMaze.create( function (x, y, mapValue) {
  110.         // don't write maze over robot or barrier
  111.         if ((x == 1 && y == 1) || (x == map.getWidth() - 2 && y >= 8)) {
  112.             return 0;
  113.         } else if (mapValue === 1) { //0 is empty space 1 is wall
  114.             map.placeObject(x,y, 'block');
  115.         } else {
  116.             map.placeObject(x,y,'empty');
  117.         }
  118.     });
  119. }
  120.  
  121. function validateLevel(map) {
  122.     map.validateExactlyXManyObjects(1, 'exit');
  123.     map.validateExactlyXManyObjects(1, 'robot');
  124.     map.validateAtMostXObjects(1, 'blueKey');
  125. }
  126.  
  127. function onExit(map) {
  128.     if (!map.getPlayer().hasItem('blueKey')) {
  129.         map.writeStatus("We need to get that key!");
  130.         return false;
  131.     } else {
  132.         return true;
  133.     }
  134. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top