dlkulp

Recursive Loop funtion

Nov 18th, 2014
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Recursive function fails for no specified reason, just exits the application.  If I had a breakpoint that it hit it says, "The debugger's worker process (msvsmon.exe) unexpectedly exited. Debugging will be aborted."
  2.  
  3. class Floor {
  4.     public grid: Array<Array<GridTile>>;
  5.  
  6.     private loop(x: number, y: number, dir: number): void {
  7.         var mag: number = 0;
  8.  
  9.         // Set mag (length of wall)
  10.         if (dir == 0) mag = 16 - y;
  11.         else if (dir == 1) mag = 16 - x;
  12.         else if (dir == 2) mag = y;
  13.         else mag = x;
  14.        
  15.         // Make a wall until you hit another wall in the specified direction
  16.         while (!this.grid[x][y].wall && mag > 4) {
  17.             this.grid[x][y].wall = !this.grid[x][y].wall;
  18.            
  19.             if (dir == 0) y++;
  20.             else if (dir == 1) x++;
  21.             else if (dir == 2) y--;
  22.             else if (dir == 3) x--;
  23.         }
  24.  
  25.         // Make a door in the middle-ish
  26.         var door = Math.ceil((Math.random() * (mag * (2 / 3))) + (mag / 6));
  27.         if (dir == 0 || dir == 2) this.grid[x][door].door = true;
  28.         else if (dir == 1 || dir == 3) this.grid[door][y].door = true;
  29.  
  30.         var newCord1: number = door;
  31.         var newCord2: number = door;
  32.  
  33.         // Get new coords
  34.         for (var i: number = 0; newCord1 == door && newCord2 == door && i < 50; i++) {
  35.             newCord1 = Math.ceil((Math.random() * (mag * (2 / 3))) + (mag / 6));
  36.             newCord2 = Math.ceil((Math.random() * (mag * (2 / 3))) + (mag / 6));
  37.         }
  38.  
  39.         // Do the recursion
  40.         if (mag > 4) {
  41.             // Recursive x
  42.             if (dir == 0 || dir == 2) {
  43.                 // Recurse right
  44.                 this.loop(x + 1, newCord1, 1);
  45.                 // Recurse left
  46.                 this.loop(x - 1, newCord2, 3);
  47.             }
  48.             // Recursive y
  49.             else if (dir == 1 || dir == 3) {
  50.                 // Recurse up
  51.                 this.loop(newCord1, y + 1, 0); // If commented it at least runs, needs to be refined but it's better
  52.                 // Recurse down
  53.                 this.loop(newCord2, y - 1, 2);
  54.             }
  55.         }
  56.     }
  57.  
  58.     constructor() {
  59.         this.grid = [];
  60.  
  61.         for (var j: number = 0; j <= 17; j++) {
  62.             this.grid[j] = [];
  63.             for (var k: number = 0; k <= 17; k++) {
  64.                 this.grid[j][k] = new GridTile();
  65.                 this.grid[j][k].wall = (j == 0 || j == 17) ? true : (k == 0 || k == 17) ? true : false;
  66.             }
  67.         }
  68.         var dir = Math.round(Math.random());
  69.         var x: number = (dir == 0) ? Math.floor(Math.random() * 9) + 4 : 1;
  70.         var y: number = (dir == 1) ? Math.floor(Math.random() * 9) + 4 : 1;
  71.         this.loop(x, y, dir);
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment