# tsgammon-core

> A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui

Latest version **0.3.0** (published 2022-08-03) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install tsgammon-core
pnpm add tsgammon-core
yarn add tsgammon-core
bun add tsgammon-core
```

Provides the command `tsgammon-core`.

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.3.0 |
| Published | 2022-08-03 |
| First published | 2022-03-29 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 2.3 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | tkshio |
| Maintainers | tkshio.nacl |
| Keywords | backgammon, game, tsgammon, typescript |

## Links

- npm: https://www.npmjs.com/package/tsgammon-core
- Repository: https://github.com/tkshio/tsgammon-core
- Homepage: https://github.com/tkshio/tsgammon-core#readme
- Issues: https://github.com/tkshio/tsgammon-core/issues
- npm.io page: https://npm.io/package/tsgammon-core

## Dependencies (2)

- [typescript](https://npm.io/package/typescript.md) ^4.6.3
- [@borderless/base64](https://npm.io/package/@borderless/base64.md) ^1.0.1

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 0.3.0 (latest) — 2022-08-03
- 0.2.0 — 2022-04-09
- 0.1.0 — 2022-03-29

## README

# tsgammon-core
A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui

[![npm version](https://badge.fury.io/js/tsgammon-core.svg)](https://badge.fury.io/js/tsgammon-core)
[![tkshio](https://circleci.com/gh/tkshio/tsgammon-core.svg?style=shield)](https://circleci.com/gh/tkshio/tsgammon-core)

## demo
````
$ npm install tsgammon-core
$ npm exec tsgammon-core -- -b

...
(snip)
...

red: Roll 54 Moves 23/Off

 tsgammon        Position ID: AAAATt4fAAAAAA

 +13-14-15-16-17-18------19-20-21-22-23-24-+   
 |                  |   |                  |OOO
 |                  |   |                  |OOO
 |                  |   |                  |OOO
 |                  |   |                  |OOO
 |                  |   |                  |OOO
^|                  |BAR|                  |   
 |                  |   | 7                |   
 |                  |   | X  X             |   
 |                  |   | X  X           X |   
 |                  |   | X  X           X |   
 |                  |   | X  X     X     X |   
 +12-11-10--9--8--7-------6--5--4--3--2--1-+   
Red wins 2 pt. by Gammon
Result: red 2 - white 0
$
````


## usage

setup:
```typescript
const node:BoardStateNode = boardStateNodeFromArray(
    [
        0, // your bar point
        2,0,0,0,0,-5, 0,-3,0,0,0,5,
        -5,0,0,0,3,0,5,0,0,0,0,-2,
        0, // opponents bar point
    ],
    1,3 // dice
)
// or:
// = boardStateNode(boardState(),diceRoll(1,3))
```

list up moves:
```typescript
const candidates: Move[][] = collectMoves(node)
    .filter(moves => !moves.isRedundant)
    .map(moves => moves.moves)

candidates.map(moves => console.log(moves.map(move=>formatMove(move))))

// [ '1/4', '1/2' ]
// [ '1/4', '4/5' ]
// [ '1/4', '17/18' ]
// [ '1/4', '19/20' ]
// ...
```

or list up as nodes:
```typescript
// each node corresponds to the position after moves[n]
const nodes:BoardStateNodes[] = collectNodes(node)

// nodes[0] corresponds to moves[0] (=[1/4, 1/2])
const nodeAfterMove = nodes[0]

// turn board for next player
const nextBoardState = nodeAfterMove.board.revert()

// build node again, with roll(52)
const nextNodeToPlay = boardStateNode(nextBoardState,diceRoll(5,2))

```

test whether pieces on a point is moveble:
```typescript
const nodeAfterMove14 = findMove(node, 1, false/* use larger pip first */)
// returns position after move [1/4]
console.log(nodeAfterMove14.hasValue) // true

const nodeAfterMove12 = findMove(node, 1, true/* use smaller pip first */)
// returns position after move [1/2]
console.log(nodeAfterMove12.hasValue) // true

const nodeAfterMove23 = findMove(node, 2, true)
// there is no piece on point[2], so you can't move it
console.log(nodeAfterMove23.hasValue) // false
```

use jgammon's evaluator:
```typescript
import { simpleNNEngine, evaluate } from "tsgammon_core/engines/SimpleNNGammon"

// let SimpleNNGammon play
const nodeAfterMove = simpleNNEngine.checkerPlay(node)
console.log(formatMoves(nodeAfterMove.lastMoves()))

// [ '17/20', '19/20' ]

// show evaluation
console.log(evaluate(node.board))

// {
//  e: 0.013857996981876702,
//  myWin: 0.5195381529700068,
//  myGammon: 0.13486295689906583,
//  oppWin: 0.48047063702629805,
//  oppGammon: 0.16007247586089787
//}
```

## License

Apache 2.0 license.

---
_Source: https://npm.io/package/tsgammon-core · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
