Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- exports.generate = function(width, height, bombs) {
- var map = {};
- map.original = generateField(width, height, bombs);
- map.current = [];
- for (var x = 0; x < map.original.length; x++) {
- map.current[x] = [];
- for (var y = 0; y < map.original[0].length; y++) {
- map.current[x][y] = {
- x: x,
- y: y,
- value: 0,
- type: unknown
- };
- }
- }
- return map;
- };
- exports.click = function(map, update, tile) {
- map.current[tile.x][tile.y] = map.original[tile.x][tile.y];
- if (map.original[tile.x][tile.y].type === bomb) {
- map.current = map.original
- }
- update(map.current);
- };
- var bomb = 'b';
- var unknown = 'u';
- var tile = 't';
- var empty = 'e';
- function generateField(width, height, bombs) {
- var map = [];
- var bombArray = generateBombArray(width * height, bombs);
- for (var x = 0; x < width; x++) {
- map[x] = [];
- for (var y = 0; y < height; y++) {
- map[x][y] = {};
- map[x][y].x = x;
- map[x][y].y = y;
- map[x][y].value = 0;
- map[x][y].type = tile;
- if (bombArray[x * width + y]) {
- map[x][y].type = bomb;
- }
- };
- };
- for (var x = 0; x < map.length; x++) {
- for (var y = 0; y < map[x].length; y++) {
- if (map[x][y].type === bomb) {
- around(x, y, map, function(x, y, tile) {
- if (tile.type !== bomb) {
- map[x][y].value++;
- }
- })
- }
- };
- };
- return map;
- };
- function generateBombArray(size, bombs) {
- var pos = 0;
- var currentBombs = 0;
- var bombArray = [];
- while (currentBombs < bombs) {
- pos += Math.floor(Math.random() * size);
- if (pos > size)
- pos -= size;
- if (!bombArray[pos]) {
- bombArray[pos] = true;
- currentBombs++;
- }
- }
- return bombArray;
- };
- function around(x, y, map, cb) {
- for (var _x = -1; _x <= 1; _x++) {
- for (var _y = -1; _y <= 1; _y++) {
- var X = _x + x;
- var Y = _y + y;
- if (X >= 0 && Y >= 0 &&
- X < map.length && Y < map[X].length) {
- cb(X, Y, map[X][Y]);
- }
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement