2.6.3 • Published 1 year ago

quoridor v2.6.3

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

quoridor.js

Installation

npm install quoridor

API

createNewGame: () => Game

Generates a new game.

import { createNewGame, getUnicodeRepresentation } from 'quoridor';

const game = createNewGame();

console.log(getUnicodeRepresentation(game));

// ┌───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┐
// │   ║   ║   ║   ║   ║   ║   ║   ║   ║   ║   │
// │   ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐   │
// │ 9 │   │   │   │   │ 2 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 8 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 7 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 6 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 5 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 4 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 3 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 2 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 1 │   │   │   │   │ 1 │   │   │   │   │   │
// │   └───┴───┴───┴───┴───┴───┴───┴───┴───┘   │
// │   ║ A ║ B ║ C ║ D ║ E ║ F ║ G ║ H ║ I ║   │
// └───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┘

createGameFromMoves: (moves: Move[]) => Game

Generates a game from an array of moves. Does not verify that the moves are valid.

import { createGameFromMoves, getUnicodeRepresentation } from 'quoridor';

const game = createGameFromMoves(['e2', 'e8', 'd7v']);

console.log(getUnicodeRepresentation(game));

// ┌───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┐
// │   ║   ║   ║   ║   ║   ║   ║   ║   ║   ║   │
// │   ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐   │
// │ 9 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 8 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 7 │   │   │   │   ║ 2 │   │   │   │   │   │
// │   ├───┼───┼───┼───╫───┼───┼───┼───┼───┤   │
// │ 6 │   │   │   │   ║   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 5 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 4 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 3 │   │   │   │   │ 1 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 2 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 1 │   │   │   │   │   │   │   │   │   │   │
// │   └───┴───┴───┴───┴───┴───┴───┴───┴───┘   │
// │   ║ A ║ B ║ C ║ D ║ E ║ F ║ G ║ H ║ I     │
// └───╫───╫───╫───╫───╫───╫───╫───╫───╫───────┘

getUnicodeRepresentation: (game: Game) => string

Returns a string representation of the board game state using Unicode box-drawing characters.

import { createNewGame, getUnicodeRepresentation } from 'quoridor';

const unicodeRepresentation = getUnicodeRepresentation(createNewGame())

console.log(unicodeRepresentation);

// ┌───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┐
// │   ║   ║   ║   ║   ║   ║   ║   ║   ║   ║   │
// │   ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐   │
// │ 9 │   │   │   │   │ 2 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 8 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 7 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 6 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 5 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 4 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 3 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 2 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 1 │   │   │   │   │ 1 │   │   │   │   │   │
// │   └───┴───┴───┴───┴───┴───┴───┴───┴───┘   │
// │   ║ A ║ B ║ C ║ D ║ E ║ F ║ G ║ H ║ I ║   │
// └───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┘

isMoveValid: (game: Game, move: Move) => boolean

Checks if a move is valid.

import { createGameFromMoves, isMoveValid } from 'quoridor';

const game = createGameFromMoves(['e2', 'e8', 'd7v']);
const move = 'd7';

const moveIsValid = isMoveValid(game, move);

console.log(moveIsValid);

// false

isMove: (maybeMove: string) => boolean

Checks if a string is a move. This can be convenient when using TypeScript since it can be used as a type guard to safely cast a string to a Move.

import { isMove } from 'quoridor';

const game = createGameFromMoves(['e2', 'e8', 'd7v']);
const move = 'd7';

const moveIsValid = isMove(game, move);

console.log(isMove('a1'));

// true

console.log(isMove('humbug'));

// false

console.log(isMove('i9'))

// false

undo: (game: Game) => Game

Returns a new game with the most recent move undone. If no moves have been made yet, an identical game is returned.

import { createGameFromMoves, undo, getUnicodeRepresentation } from 'quoridor';

const game = createGameFromMoves(['e2', 'e8', 'd7v']);
const gameWithUndoneMove = undo(game);

console.log(getUnicodeRepresentation(game));

// ┌───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┐
// │   ║   ║   ║   ║   ║   ║   ║   ║   ║   ║   │
// │   ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐   │
// │ 9 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 8 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 7 │   │   │   │   ║ 2 │   │   │   │   │   │
// │   ├───┼───┼───┼───╫───┼───┼───┼───┼───┤   │
// │ 6 │   │   │   │   ║   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 5 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 4 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 3 │   │   │   │   │ 1 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 2 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 1 │   │   │   │   │   │   │   │   │   │   │
// │   └───┴───┴───┴───┴───┴───┴───┴───┴───┘   │
// │   ║ A ║ B ║ C ║ D ║ E ║ F ║ G ║ H ║ I     │
// └───╫───╫───╫───╫───╫───╫───╫───╫───╫───────┘

console.log(getUnicodeRepresentation(gameWithUndoneMove));

// ┌───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┐
// │   ║   ║   ║   ║   ║   ║   ║   ║   ║   ║   │
// │   ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐   │
// │ 9 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 8 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 7 │   │   │   │   │ 2 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 6 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 5 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 4 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 3 │   │   │   │   │ 1 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 2 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 1 │   │   │   │   │   │   │   │   │   │   │
// │   └───┴───┴───┴───┴───┴───┴───┴───┴───┘   │
// │   ║ A ║ B ║ C ║ D ║ E ║ F ║ G ║ H ║ I ║   │
// └───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┘

redo: (game: Game) => Game

Returns a new game with the most recently undone move redone. If no moves have been undone yet, an identical game is returned.

import { createGameFromMoves, redo, undo, getUnicodeRepresentation } from 'quoridor';

const game = createGameFromMoves(['e2', 'e8', 'd7v']);
const gameWithUndoneMove = undo(game);
const gameWithUndoneMoveRedone = redo(gameWithUndoneMove);

console.log(getUnicodeRepresentation(game));

// ┌───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┐
// │   ║   ║   ║   ║   ║   ║   ║   ║   ║   ║   │
// │   ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐   │
// │ 9 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 8 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 7 │   │   │   │   ║ 2 │   │   │   │   │   │
// │   ├───┼───┼───┼───╫───┼───┼───┼───┼───┤   │
// │ 6 │   │   │   │   ║   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 5 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 4 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 3 │   │   │   │   │ 1 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 2 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 1 │   │   │   │   │   │   │   │   │   │   │
// │   └───┴───┴───┴───┴───┴───┴───┴───┴───┘   │
// │   ║ A ║ B ║ C ║ D ║ E ║ F ║ G ║ H ║ I     │
// └───╫───╫───╫───╫───╫───╫───╫───╫───╫───────┘

console.log(getUnicodeRepresentation(gameWithUndoneMove));

// ┌───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┐
// │   ║   ║   ║   ║   ║   ║   ║   ║   ║   ║   │
// │   ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐   │
// │ 9 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 8 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 7 │   │   │   │   │ 2 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 6 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 5 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 4 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 3 │   │   │   │   │ 1 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 2 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 1 │   │   │   │   │   │   │   │   │   │   │
// │   └───┴───┴───┴───┴───┴───┴───┴───┴───┘   │
// │   ║ A ║ B ║ C ║ D ║ E ║ F ║ G ║ H ║ I ║   │
// └───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┘

console.log(getUnicodeRepresentation(gameWithUndoneMoveRedone));

// ┌───╫───╫───╫───╫───╫───╫───╫───╫───╫───╫───┐
// │   ║   ║   ║   ║   ║   ║   ║   ║   ║   ║   │
// │   ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐   │
// │ 9 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 8 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 7 │   │   │   │   ║ 2 │   │   │   │   │   │
// │   ├───┼───┼───┼───╫───┼───┼───┼───┼───┤   │
// │ 6 │   │   │   │   ║   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 5 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 4 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 3 │   │   │   │   │ 1 │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 2 │   │   │   │   │   │   │   │   │   │   │
// │   ├───┼───┼───┼───┼───┼───┼───┼───┼───┤   │
// │ 1 │   │   │   │   │   │   │   │   │   │   │
// │   └───┴───┴───┴───┴───┴───┴───┴───┴───┘   │
// │   ║ A ║ B ║ C ║ D ║ E ║ F ║ G ║ H ║ I     │
// └───╫───╫───╫───╫───╫───╫───╫───╫───╫───────┘

Publishing a new version

Check that linting, formatting, build and tests pass

npm run lint
npm run format
npm run build
npm test

Bump version

npm version [major | minor | patch]

Publish to NPM

npm publish
2.4.0

1 year ago

2.6.1

1 year ago

2.6.0

1 year ago

2.6.3

1 year ago

2.6.2

1 year ago

2.3.8

1 year ago

2.3.7

1 year ago

2.5.0

1 year ago

2.3.4

1 year ago

2.3.6

1 year ago

2.3.5

1 year ago

1.8.1

2 years ago

1.8.0

2 years ago

2.2.1

2 years ago

2.2.0

2 years ago

2.0.0

2 years ago

2.1.9

2 years ago

2.1.10

2 years ago

1.7.5

2 years ago

1.7.4

2 years ago

1.7.3

2 years ago

1.7.2

2 years ago

1.7.1

2 years ago

1.7.0

2 years ago

2.3.0

2 years ago

2.1.2

2 years ago

2.1.1

2 years ago

2.3.2

2 years ago

2.1.4

2 years ago

2.3.1

2 years ago

2.1.3

2 years ago

2.1.6

2 years ago

2.3.3

2 years ago

2.1.5

2 years ago

2.1.8

2 years ago

2.1.7

2 years ago

2.1.0

2 years ago

1.6.8

2 years ago

1.6.7

2 years ago

1.6.4

2 years ago

1.6.3

2 years ago

1.6.2

2 years ago

1.6.1

2 years ago

1.6.0

2 years ago

1.6.6

2 years ago

1.6.5

2 years ago

1.5.2

3 years ago

1.5.1

3 years ago

1.5.0

3 years ago

1.4.1

3 years ago

1.4.0

3 years ago

1.3.0

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago