jungo
v0.2.0
Published
A Jungo game library
Maintainers
Readme
jungo
純碁(Jungo)のゲームロジックを提供するTypeScriptライブラリです。
概要
純碁は、盤上の石数のみで勝敗を決めるシンプルな囲碁です。このライブラリは、純碁のゲームロジックをTypeScriptで実装し、イミュータブルなAPIを提供します。
特徴
- イミュータブルな設計: 全てのゲーム状態は不変(immutable)で、各着手は新しい状態を返します
- 完全な型定義: TypeScriptによる完全な型サポート
- 純粋な関数: 副作用のない純粋関数によるゲームロジック
インストール
npm install jungo基本的な使い方
import { createGame, playMove } from 'jungo';
// 9x9の盤面でゲームを開始
const initialState = createGame(9);
// 黒が(2, 3)に着手
const result1 = playMove(initialState, {
type: 'play',
position: { x: 2, y: 3 }
});
if (result1.success) {
console.log('着手成功');
const newState = result1.state;
// 白が(3, 3)に着手
const result2 = playMove(newState, {
type: 'play',
position: { x: 3, y: 3 }
});
if (result2.success) {
console.log('白の着手成功');
}
}
// パス
const passResult = playMove(initialState, { type: 'pass' });
// 投了
const resignResult = playMove(initialState, { type: 'resign' });API仕様
createGame(size: number): GameState
新しいゲームを作成します。
パラメータ:
size: 盤面のサイズ(例: 5, 7, 9)
戻り値:
- 初期化された
GameStateオブジェクト
playMove(state: GameState, move: Move): MoveResult
着手を実行し、新しいゲーム状態を返します。
パラメータ:
state: 現在のゲーム状態move: 実行する着手(play、pass、resignのいずれか)
戻り値:
MoveResult: 成功時は新しいGameState、失敗時はエラー情報を含むオブジェクト
着手のタイプ:
// 石を置く
{ type: 'play', position: { x: number, y: number } }
// パス
{ type: 'pass' }
// 投了
{ type: 'resign' }エラーの種類:
invalid_position: 盤面外の座標occupied: すでに石が置かれているsuicide: 自殺手(置いた瞬間に取られる手)ko: コウルール違反game_over: ゲーム終了済み
型定義
主要な型:Color, Cell, Position, Move, GameState, MoveResult, MoveError
詳細はAPIドキュメントを参照してください。
純碁のゲームルール
- 手番: 黒から始まり、交互に着手します
- 石の取り: 相手の石を囲うと取れます
- 自殺手禁止: 囲まれている場所に石を置くことはできません。ただし、その手で相手の石を取る場合は置くことができます
- コウ: 直前の局面を繰り返す手は打てません
- 終局: 2連続パスでゲーム終了
- 勝敗: 盤上の石数が多い方の勝ち
開発
# ビルド
npm run build
# テスト実行
npm test
# リント
npm run lint
# フォーマット
npm run format
# 型チェック
npm run typecheck