55 lines
1 KiB
JavaScript
55 lines
1 KiB
JavaScript
/**
|
|
* Represents the state of a game.
|
|
*/
|
|
export class State
|
|
{
|
|
/**
|
|
* The board of the game.
|
|
*
|
|
* @type {Board}
|
|
*/
|
|
#board;
|
|
|
|
/**
|
|
* The number of turns that have been played.
|
|
*/
|
|
turnCount = 0;
|
|
|
|
/**
|
|
* Initializes a new instance of the {@link State `State`} class.
|
|
*
|
|
* @param {number} width
|
|
* The width of the board.
|
|
*
|
|
* @param {number} height
|
|
* The height of the board.
|
|
*/
|
|
constructor(width, height)
|
|
{
|
|
this.#board = /** @type {Board} */ (
|
|
Array(height).fill("").map(
|
|
() =>
|
|
{
|
|
return Array(width).fill(
|
|
/** @type {CellOwner} */ (""));
|
|
}));
|
|
}
|
|
|
|
/**
|
|
* Gets the id of the current player.
|
|
*
|
|
* @type {CellOwner}
|
|
*/
|
|
get currentPlayer()
|
|
{
|
|
return this.turnCount % 2 === 0 ? "r" : "b";
|
|
}
|
|
|
|
/**
|
|
* Gets the board of the game.
|
|
*/
|
|
get board()
|
|
{
|
|
return this.#board;
|
|
}
|
|
}
|