gogame.js
v1.0.0
Published
A headless high-performance Go (Baduk/Weiqi) logic engine with move validation and scoring.
Maintainers
Readme
gogame.js
gogame.js is a headless JavaScript Go (Baduk/Weiqi) library used for move generation/validation, capture detection, and area scoring - basically everything but the AI.
gogame.js has been extensively tested in Node.js and modern browsers.
Installation
npm install gogame.js
Importing
Import (as ESM)
import { Go } from 'gogame.js'
Import (as CommonJS)
const { Go } = require('gogame.js')
Example Code
The code below plays a random game of Go on a 9x9 board:
import { Go } from 'gogame.js'
const game = new Go(9)
while (!game.done) {
// Logic to select a legal coordinate
game.move('e5')
game.move('pass')
game.move('pass')
}
console.log(game.score())
User Interface
By design, gogame.js is a headless library and does not include user interface elements. It is intended to be used with a frontend board renderer.
API
Constructor: new Go([ size ], [ komi ])
Creates a new game instance.
size(Integer, default: 19): The dimensions of the board.komi(Float, default: 6.5): Points added to White's score.
.ascii()
Returns a string containing an ASCII diagram of the current position.
const game = new Go(9)
game.move('e5')
console.log(game.ascii())
// -> a b c d e f g h i
// 9 . . . . . . . . . 9
// 8 . . . . . . . . . 8
// 7 . . . . . . . . . 7
// 6 . . . . . . . . . 6
// 5 . . . . X . . . . 5
// 4 . . . . . . . . . 4
// 3 . . . . . . . . . 3
// 2 . . . . . . . . . 2
// 1 . . . . . . . . . 1
// a b c d e f g h i
.board
Returns a flat 1D array representation of the current position. Empty squares are null.
const game = new Go(9)
game.board
// -> [null, null, 'B', null, ...]
.clear()
Clears the board.
game.clear()
.get(square)
Returns the piece on the square. Returns null if the square is empty.
game.move('e5')
game.get('e5')
// -> 'B'
.move(square)
Executes a move on the board.
square: The algebraic notation (e.g., 'e5') or 'pass'.- Returns: A move object on success, or
nullif the move is illegal (occupied, suicide, or superko).
game.move('e5')
// -> { col: 'B', sq: 'e5', caps: 0, board: [...] }
.score()
Calculates the current score based on Area rules.
- Returns:
{ B: Number, W: Number }
game.score()
// -> { B: 12, W: 18.5 }
.turn
Returns the current player whose turn it is ('B' or 'W').
.done
A boolean indicating if the game has ended via two consecutive passes.
Technical Specifications
Coordinate System
gogame.js uses a standard algebraic coordinate system where the X-axis is represented by letters (a-z) and the Y-axis by numbers (1-n).
Positional Superko
This library implements the Positional Superko rule. A move is illegal if it results in a board state that has occurred previously in the game.
Scoring
gogame.js uses Area Scoring (Chinese/AGA standard), counting stones on the board plus surrounded empty intersections.
License
MIT
