UNPKG

minesweeper-for-web

Version:
81 lines 3.67 kB
var _MinesweeperEngine_board; import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib"; import { FieldKey } from '../types/index.js'; import { MinesweeperBoard } from './MinesweeperBoard.js'; export class MinesweeperEngine { constructor(onWinCallback = () => { }, onLoseCallback = () => { }) { _MinesweeperEngine_board.set(this, void 0); this.isGameOver = true; this.onWinCallback = onWinCallback; this.onLoseCallback = onLoseCallback; } get board() { return __classPrivateFieldGet(this, _MinesweeperEngine_board, "f"); } createBoard(columns = 9, rows = 9, bombs = 10) { this.gameModeConfiguration = { columns, rows, bombs, }; this.restart(); } restart() { __classPrivateFieldSet(this, _MinesweeperEngine_board, new MinesweeperBoard(this.gameModeConfiguration), "f"); this.isGameOver = false; } /** * @returns Delta of the amount of flags */ toggleFlag(selectedRow, selectedColumn) { if (__classPrivateFieldGet(this, _MinesweeperEngine_board, "f").revealedFields[selectedRow][selectedColumn]) { return 0; } if (__classPrivateFieldGet(this, _MinesweeperEngine_board, "f").flags[selectedRow][selectedColumn]) { // removing a flag is always possible __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").removeFlag(selectedRow, selectedColumn); return -1; } if (__classPrivateFieldGet(this, _MinesweeperEngine_board, "f").flagCounter < __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").bombs) { // it should not be possible to place more flags than bombs __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").addFlag(selectedRow, selectedColumn); return 1; } return 0; } /** * @returns {number} Delta of the amount of question marks */ toggleQuestionMark(selectedRow, selectedColumn) { if (__classPrivateFieldGet(this, _MinesweeperEngine_board, "f").revealedFields[selectedRow][selectedColumn]) { return 0; } if (__classPrivateFieldGet(this, _MinesweeperEngine_board, "f").questionMarks[selectedRow][selectedColumn]) { __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").removeQuestionMark(selectedRow, selectedColumn); return -1; } __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").addQuestionMark(selectedRow, selectedColumn); return 1; } selectField(selectedRow, selectedColumn) { const field = __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").revealField(selectedRow, selectedColumn); if (field === FieldKey.BOMB) { __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").revealBombs(); this.onLoseCallback(); this.isGameOver = true; return field; } // flatten the 2d boolean array and count false values const unrevealedFieldsAmount = __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").revealedFields .flat() .filter((revealedField) => !revealedField).length; if (unrevealedFieldsAmount === __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").bombs) { __classPrivateFieldGet(this, _MinesweeperEngine_board, "f").revealBombs(true); this.onWinCallback(); this.isGameOver = true; } return field; } } _MinesweeperEngine_board = new WeakMap(); //# sourceMappingURL=MinesweeperEngine.js.map