=encoding euc-jp =head1 NAME =begin original Games::Goban - Board for playing go, renju, othello, etc. =end original Games::Goban - 碁、連珠、オセロ、その他で遊ぶための盤面 =head1 概要 use Games::Goban; my $board = new Games::Goban ( size => 19, game => "go", white => "Seigen, Go", black => "Minoru, Kitani", referee => \&Games::Goban::Rules::Go, ); # 訳注:上記の関数はこのパッケージに含まれていない $board->play("pd"); $board->play("dd"); # 訳注:play というメソッドはない print $board->as_sgf; # move の間違い =head1 説明 =begin original This is a generic module for handling goban-based board games. Theoretically, it can be used to handle many of the other games which can use Smart Game Format (SGF) but I want to keep it reasonably restricted in order to keep it simple. =end original これは碁盤を使うボードゲームを操作する汎用モジュールである。 理論的にはSmart Game Format(SGF)以外のゲームも数多く操作できるのだが、 シンプルにしておくために、合理的な制限をかけておきたいと思う。 =head1 メソッド =head2 new(%options); =begin original Creates and initializes a new goban. The options and their legal values (* marks defaults): =end original 新しい碁盤を作成し初期化する。オプションとその適切な値(*がデフォルト): size 9, 11, 13, 15, 17, *19 # 盤面のサイズ game *go, othello, renju, gomoku # 競技の種類 white 任意のテキスト, *: "Miss White" # 白 black 任意のテキスト, *: "Mr Black" # 黒 referee 任意のサブルーチン, *: sub {1} # 審判(どんな手も正当) =begin original The referee subroutine takes a board object and a piece object, and determines whether or not the move is legal. It also reports if the game is won. =end original 審判(referee)サブルーチンは盤面オブジェクトと駒オブジェクト[訳注:実際は 盤面の位置を表す2文字]を引数に取り、その手が合法か違法かを判定する。 また、勝敗の報告を行う。 =head2 move $ok = $board->move($position) =begin original Takes a move, creates a Games::Goban::Piece object, and attempts to place it on the board, subject to the constraints of the I. If this is not successful, it returns C<0> and sets C<$@> to be an error message explaining why the move could not be made. If successful, updates the board, updates the move number and the turn, and returns true. =end original 一手すすめてGames::Goban::Pieceオブジェクトを生成し、Iサブルーチンの 制約に従って盤面に駒を置こうと試みる。その手が成功しなかったらメソッドはC<0>を 返し、C<$@>になぜ移動できなかったを説明するエラーメッセージをセットする。 手が成功したら盤面を更新し、手数と手番を更新して真値を返す。 [訳注:このメソッドが返すのは白駒か黒駒かを表す文字('w'か'b')。] =head2 get $move = $board->get($position) =begin original Gets the C object at the given location, if there is one. Locations are specified as per SGF - a 19x19 board starts from C in the top left corner, with C in the bottom right. C does not exist. =end original 指定した位置に駒があればCオブジェクトを得る。 位置はSGF(Smart Game Format)に基づいて指定する。例えば19x19盤は 左上隅がCで右下がC。Cは存在しない。 [訳注:iは存在していて、19x19の場合、aa〜ssまでのようです…] =head2 size $size = $board->size =begin original Returns the size of the goban. =end original 碁盤のサイズを返す。 =head2 as_sgf $sgf = $board->as_sgf; =begin original Returns a representation of the board as an SGF (Smart Game Format) file. =end original 盤面をSGF(Smart Game Format)ファイル形式で返す。 =head2 as_text print $board->as_text(coords => 1) =begin original Returns a printable text picture of the board, similar to that printed by C. Black pieces are represented by C, white pieces by C, and the latest move is bracketed. I points are in their normal position for Go, and printed as an C<+>. Coordinates are not printed by default, but can be enabled as suggested in the synopsis. =end original プリント可能なように、盤面をテキスト絵にして返す。これはCが印刷する ものに似ている。黒駒はC、白駒はCで表され、最新の手は括弧が付く。 I<星>は碁に対応した通常の位置にあり、C<+>で表される。デフォルトでは座標は 出力されないが、上の使用方法で示したようにやれば可能だ。 =head2 register my $key = $board->register(\&callback); =begin original Register a calllback to be called after every move is made. This is useful for analysis programs which wish to maintain statistics on the board state. The C returned from this can be fed to... =end original 全手終了の後に呼び出されるコールバックルーチンを登録する。これは盤面状態の 統計を管理する分析用プログラムを使う際に便利だ。このメソッドが返すCは 次のように利用される… =head2 notes $board->notes($key)->{score} += 5; =begin original C returns a hash reference which can be used by a callback to store local state about the board. =end original Cは盤面の局所的状態を保持するためにコールバックルーチンが利用できる ハッシュリファレンスを返す。 =head2 hash $hash = $board->hash =begin original Provides a unique hash of the board position. If the phrase "positional superko" means anything to you, you want to use this method. If not, move along, nothing to see here. =end original 盤面の配置を表す一意なハッシュを返す。"positional superko"というフレーズが あなたにとって意味があるなら、このメソッドを使いたいだろう。そうでないなら、 ここにみるべきものはない、先に進んで欲しい。 [訳注:super ko については http://home.snafu.de/jasiek/superko.html を参照] =head1 C メソッド =begin original Here are the methods which can be called on a C object, representing a piece on the board. =end original ここでは、盤上の駒を表すCオブジェクトから呼び出す メソッドについて触れる。 =head1 color =begin original Returns "b" for a black piece and "w" for a white. C is also provided for Anglophones. =end original 黒駒なら"b"を、白駒なら"w"を返す。英式発音用にCも用意されている。 =head1 notes =begin original Similar to the C method on the board class, this provides a private area for callbacks to scribble on. =end original 盤面クラスメソッドのCと同じで、殴り書きするためのコールバックルーチン用 にプライベートなエリアを提供する[訳注:スクラッチパッドの提供]。 =head1 position =begin original Returns the position of this piece, as a two-character string. Incidentally, try to avoid taking references to C objects, since this stops them being destroyed in a timely fashion. Use a C and C if you can get away with it, or take a weak reference if you're worried about the piece going away or being replaced by another one in that position. =end original この駒の位置を2文字で返す。ちなみに、Cオブジェクトへのリファレンスを とるのは避けたほうがいい。なぜなら、適切なときにオブジェクトが破壊されるのを 妨げるからだ。オブジェクトが欲しいなら、CとCを使うこと。 あるいは駒が去ったり、別の駒に置き換えられるのが心配であるなら、 弱いリファレンス(weak reference)を使うこと。 =head1 move =begin original Returns the move number on which this piece was played. =end original この駒の手数を返す。 =head1 board =begin original Returns the board object whence this piece came. =end original この駒がいる盤面オブジェクトを返す。 =head1 参考 Smart Game Format: http://www.red-bean.com/sgf/ C The US Go Association: http://www.usgo.org/ =head1 作者 Simon Cozens, C