Why not adopt me?
NAME
Games::Goban - Board for playing go, renju, othello, etc.
SYNOPSIS
use Games::Goban;
my $board = new Games::Goban (
size => 19,
game => "go",
white => "Seigen, Go",
black => "Minoru, Kitani",
referee => \&Games::Goban::Rules::Go,
);
$board->move("pd"); $board->move("dd");
print $board->as_sgf;
DESCRIPTION
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.
METHODS
new(%options);
Creates and initializes a new goban. The options and their legal values (* marks defaults):
size 9, 11, 13, 15, 17, *19
game *go, othello, renju, gomoku
white Any text, default: "Miss White"
black Any text, default: "Mr Black"
referee Any subroutine, default: sub {1} # (All moves are valid)
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.
move
$ok = $board->move($position)
Takes a move, creates a Games::Goban::Piece object, and attempts to place it on the board, subject to the constraints of the referee. If this is not successful, it returns 0
and sets $@
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.
get
$move = $board->get($position)
Gets the Games::Goban::Piece
object at the given location, if there is one. Locations are specified as per SGF - a 19x19 board starts from aa
in the top left corner, with tt
in the bottom right. i
does not exist.
size
$size = $board->size
Returns the size of the goban.
as_sgf
$sgf = $board->as_sgf;
Returns a representation of the board as an SGF (Smart Game Format) file.
as_text
print $board->as_text(coords => 1)
Returns a printable text picture of the board, similar to that printed by gnugo
. Black pieces are represented by X
, white pieces by O
, and the latest move is bracketed. hoshi points are in their normal position for Go, and printed as an +
. Coordinates are not printed by default, but can be enabled as suggested in the synopsis.
register
my $key = $board->register(\&callback);
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 key
returned from this can be fed to...
notes
$board->notes($key)->{score} += 5;
notes
returns a hash reference which can be used by a callback to store local state about the board.
hash
$hash = $board->hash
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.
Games::Goban::Piece
methods
Here are the methods which can be called on a Games::Goban::Piece
object, representing a piece on the board.
color
Returns "b" for a black piece and "w" for a white. colour
is also provided for Anglophones.
notes
Similar to the notes
method on the board class, this provides a private area for callbacks to scribble on.
position
Returns the position of this piece, as a two-character string. Incidentally, try to avoid taking references to Piece
objects, since this stops them being destroyed in a timely fashion. Use a position
and get
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.
move
Returns the move number on which this piece was played.
board
Returns the board object whence this piece came.
SEE ALSO
Smart Game Format: http://www.red-bean.com/sgf/
Games::Go::SGF
The US Go Association: http://www.usgo.org/
AUTHOR
Simon Cozens, simon@cpan.org