import React from 'react'; class Grid extends React.Component { constructor() { super(); this.state = { row: 16, col: 16, mines: 51, set: [], }; this.state.grid = this.numberingGrid( this.createGrid( this.shuffleSet( this.createSet( this.state.set, ), ), ), ); } createSet(obj) { for (let i = 0, j = this.state.row * this.state.col; i < j; i++) { obj.push(0 < this.state.mines ? 'm' : 'w'); this.state.mines--; } return obj; } shuffleSet(obj) { return obj.sort(function() { return Math.round(Math.random()) - .5; }); } createGrid(obj) { let grid = [[]], row = 0, col = 0; for (let i = 0, j = obj.length; i < j; i++) { grid[row][col] = obj[i]; if (15 === col && 15 !== row) { row++; col = 0; grid.push([]); } else { col++; } } return grid; } isThereMine(obj, row, col) { return 'm' === obj?.[row]?.[col] ? 1 : 0; } numberingGrid(obj) { let nbr = 0; for (let i = 0; i < this.state.row; i++) { for (let j = 0; j < this.state.col; j++) { if ('w' === obj[i][j]) { nbr = 0; nbr += this.isThereMine(obj, i - 1, j); nbr += this.isThereMine(obj, i - 1, j - 1); nbr += this.isThereMine(obj, i - 1, j + 1); nbr += this.isThereMine(obj, i, j - 1); nbr += this.isThereMine(obj, i, j + 1); nbr += this.isThereMine(obj, i + 1, j); nbr += this.isThereMine(obj, i + 1, j + 1); nbr += this.isThereMine(obj, i + 1, j - 1); obj[i][j] = nbr; } } } return obj; } } export default Grid;