typescript(loopover): chore: added a readme
Signed-off-by: prescientmoon <git@moonythm.dev>
This commit is contained in:
parent
a156a02f94
commit
a5ecfc656f
110
typescript/loopover/README.md
Normal file
110
typescript/loopover/README.md
Normal file
|
@ -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
|
||||
```
|
BIN
typescript/loopover/assets/solved.png
Normal file
BIN
typescript/loopover/assets/solved.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Loading…
Reference in a new issue