Advertisement
Guest User

Untitled

a guest
Aug 28th, 2014
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. exports.generate = function(width, height, bombs) {
  2.     var map = {};
  3.  
  4.     map.original = generateField(width, height, bombs);
  5.  
  6.     map.current = [];
  7.  
  8.     for (var x = 0; x < map.original.length; x++) {
  9.         map.current[x] = [];
  10.         for (var y = 0; y < map.original[0].length; y++) {
  11.             map.current[x][y] = {
  12.                 x: x,
  13.                 y: y,
  14.                 value: 0,
  15.                 type: unknown
  16.             };
  17.         }
  18.     }
  19.  
  20.     return map;
  21. };
  22.  
  23. exports.click = function(map, update, tile) {
  24.     map.current[tile.x][tile.y] = map.original[tile.x][tile.y];
  25.  
  26.     if (map.original[tile.x][tile.y].type === bomb) {
  27.         map.current = map.original
  28.     }
  29.  
  30.     update(map.current);
  31. };
  32.  
  33. var bomb = 'b';
  34. var unknown = 'u';
  35. var tile = 't';
  36. var empty = 'e';
  37.  
  38. function generateField(width, height, bombs) {
  39.     var map = [];
  40.  
  41.     var bombArray = generateBombArray(width * height, bombs);
  42.  
  43.     for (var x = 0; x < width; x++) {
  44.         map[x] = [];
  45.         for (var y = 0; y < height; y++) {
  46.             map[x][y] = {};
  47.  
  48.             map[x][y].x = x;
  49.             map[x][y].y = y;
  50.             map[x][y].value = 0;
  51.             map[x][y].type = tile;
  52.  
  53.             if (bombArray[x * width + y]) {
  54.                 map[x][y].type = bomb;
  55.             }
  56.         };
  57.     };
  58.  
  59.     for (var x = 0; x < map.length; x++) {
  60.         for (var y = 0; y < map[x].length; y++) {
  61.             if (map[x][y].type === bomb) {
  62.                 around(x, y, map, function(x, y, tile) {
  63.                     if (tile.type !== bomb) {
  64.                         map[x][y].value++;
  65.                     }
  66.                 })
  67.             }
  68.         };
  69.     };
  70.  
  71.     return map;
  72. };
  73.  
  74. function generateBombArray(size, bombs) {
  75.     var pos = 0;
  76.     var currentBombs = 0;
  77.     var bombArray = [];
  78.  
  79.     while (currentBombs < bombs) {
  80.         pos += Math.floor(Math.random() * size);
  81.  
  82.         if (pos > size)
  83.             pos -= size;
  84.  
  85.         if (!bombArray[pos]) {
  86.             bombArray[pos] = true;
  87.             currentBombs++;
  88.         }
  89.     }
  90.  
  91.     return bombArray;
  92. };
  93.  
  94. function around(x, y, map, cb) {
  95.     for (var _x = -1; _x <= 1; _x++) {
  96.         for (var _y = -1; _y <= 1; _y++) {
  97.             var X = _x + x;
  98.             var Y = _y + y;
  99.  
  100.             if (X >= 0 && Y >= 0 &&
  101.                 X < map.length && Y < map[X].length) {
  102.  
  103.             cb(X, Y, map[X][Y]);
  104.         }
  105.         }
  106.     }
  107. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement