minesweeper-for-web
Version:
Minesweeper as a WebComponent.
81 lines • 3.67 kB
JavaScript
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