本文へ移動

Narabe並べ

48種類の盤上ゲームを、新しい局面を返す手の操作、合法手の一覧、再生できる棋譜で扱えます。

「並べ」は五目並べの「並べ」。石を並べることを表す言葉です。 名前について(英語)

目次

やり方

囲碁を打ち数える

基本APIで囲碁を打ち、面積で得点を数え、下位の囲碁用の関数を使います。

基本APIから打つ

囲碁では石を置き、自分でパスを選べます。基本APIは盤外、石のある位置、自殺手、単純コウを確認します。通常のパスが2回続くと面積で勝敗を決めます。ハンディキャップによる手番の省略は、その2回に含みません。

import {createGame,playMove,passTurn,scoreArea} from "@johnmorrisdotca/narabe";
let game = createGame({variant:"go",size:9});
game = playMove(game,{row:4,col:4});
game = playMove(game,{row:4,col:5});
console.log(scoreArea(game.board,game.settings.size));
game = passTurn(passTurn(game));
console.log(game.status,game.winner,game.winBy);
{ black: 1, white: 1 }
won white territory

得点を理解する

scoreAreaは石と、1色だけに囲まれた空き領域を数えます。両色に接する領域や、どちらにも接しない領域は数えません。死に石の判定や除去はしないため、パスする前に実際の着手で解決します。通常のコミは白に6.5で、ハンディキャップによって内部で調整されます。scoreAreaはコミなしの面積を返し、終了した局面の勝者にはコミが反映されます。

下位の関数を使う

囲碁用エントリーにはapplyGoMove、goLegal、walledIn、areaWinner、playGoMoveがあります。applyGoMoveは盤内の空き位置を前提とし、自殺手の場合にnullを返します。完全な確認にはgoLegalを使います。groupAtには石のある位置を渡し、playGoMoveには合法と分かっている位置を渡します。外部入力にはplayMoveを優先します。コウは直後の取り返しを防ぐ方式で、局面全体の反復を禁止する方式ではありません。

ソースを見るGitHub で編集@johnmorrisdotca/narabe 1.3.0 のソースから作成しました。

この日本語は、まだ日本語を母語とする方の確認を受けていません。訂正を歓迎します。