18892b03df
Signed-off-by: prescientmoon <git@moonythm.dev> |
||
---|---|---|
.. | ||
.github/workflows | ||
.vscode | ||
assets | ||
src | ||
.gitignore | ||
.prettierrc | ||
LICENSE | ||
package.json | ||
pnpm-lock.yaml | ||
README.md | ||
rollup.config.ts | ||
tsconfig.json |
Loopover
Installation
npm install @adrielus/loopover
(There is also an amd build at /dist/bundle.amd.js
which uses the Loopover
namespace)
Usage
Creating a game
To create a game use the createGame
helper and pass it the width
and the height
of the board:
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:
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:
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:
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:
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:
game.moveX(-1, 1)
The board will look like:
1 | 2 | 3 |
5 | 6 | 4 |
7 | 8 | 9 |
Note: both
moveX
andmoveY
WON'T mutate the original game state, but will return the new state.
Contributing
First, clone this repo:
git clone https://github.com/Mateiadrielrafael/loopover
cd loopover
Then use pnpm to install the dependencies:
pnpm install
You can use the build
command to build the package (this is dont automatically by github actions):
pnpm run build