@adrielus/loopover

Reliable loopover simulator

Usage no npm install needed!

<script type="module">
  import adrielusLoopover from 'https://cdn.skypack.dev/@adrielus/loopover';
</script>

README

npm (scoped) npm bundle size (scoped) forthebadge

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 and moveY 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