diff --git a/typescript/loopover/README.md b/typescript/loopover/README.md new file mode 100644 index 0000000..4a2d714 --- /dev/null +++ b/typescript/loopover/README.md @@ -0,0 +1,110 @@ +# Loopover + +## Installation + +```sh +npm install @adrielus/loopover +``` + +## Usage + +### Creating a game + +To create a game use the `createGame` helper and pass it the `width` and the `height` of the board: + +```ts +import { createGame } from '@adrielus/loopover' + +// this creates a 3x3 board +const game = createGame(3, 3) +``` + +The `createGame` method returns a `GameState` instance. + +### Getting the metadata from a state + +Each `GameState` instance has a `width` and a `height` prop: + +```ts +game.width // 3 +game.height // 3 +``` + +### Iterating over a state + +The `GameState` has a `[Symbol.iterator]` prop, so you can iterate over it with a for of loop: + +```ts +for (const piece of game) { + // piece is just an int +} +``` + +You can also transform it into an array and then use a normal for loop: + +```ts +const array = [...game] + +for (let index = 0; index < array.length; index++) { + const piece = array[index] +} +``` + +Or you can use the cells getter which will return an array: + +```ts +for (let index = 0; index < game.cells.length; i++) { + const piece = array[index] +} +``` + +### Applying moves: + +The GameState instance has 2 methods for applying moves: `moveX` and `moveY`. Both method accept a direction (1 or -1) and a layer. + +Example: + +If the board is in the following position: + +| | | | +| --- | --- | --- | +| 1 | 2 | 3 | +| 4 | 5 | 6 | +| 7 | 8 | 9 | + +and you apply: + +```ts +game.moveX(-1, 1) +``` + +The board will look like: + +| | | | +| --- | --- | --- | +| 1 | 2 | 3 | +| 5 | 6 | 4 | +| 7 | 8 | 9 | + +> Note: both `moveX` and `moveY` **_WON'T_** mutate the original game state, but will return the new state. + +# Contributing + +First, clone this repo: + +```sh +git clone https://github.com/Mateiadrielrafael/loopover +cd loopover +``` + +Then use **_pnpm_** to install the dependencies: + +```sh +pnpm install +``` + +You can use the `build` command to build the package (this is dont automatically by github actions): + +```sh +pnpm run build +``` diff --git a/typescript/loopover/assets/solved.png b/typescript/loopover/assets/solved.png new file mode 100644 index 0000000..9659ad1 Binary files /dev/null and b/typescript/loopover/assets/solved.png differ