Games::Go::Cinderblock::State - A game state representation
my $rulemap = Games::Go::Cinderblock::Rulemap::Rect->new( w => 5, h => 3, ); my $board = [ [qw/0 w 0 b 0], [qw/w w 0 b b], [qw/0 w 0 b 0] ]; my $state = Games::Go::Cinderblock::State->new( rulemap => $rulemap, board => $board, turn => 'b', ); # b expertly fills in an eye my $move_result = $state->attempt_move( color => 'b', node => [2,4], ); $state = $move_result->resulting_state; say "Current turn: ' . $state->turn; # Current turn: w
Unless you want bad things to happen, do not modify the state directly while using it as the basis of a scorable. States are generally immutable, but you do have the power to change them directly. Don't, though.
Use attempt_move, instead. In the future, move attempts will have special categories for passes & other tricky shenanigans.
Usage: my $move_result = $state->attempt_move(node=>$node,color=>$color
my $move_result = $state->attempt_move(node=>$node,color=>$color
Return a MoveResult, which contains a resulting state if the move attempt is successful.
Returns a new Games::Go::Cinderblock::Scorable with this state as its basis.
# a chain of black stones, starting at [10,10]. my $chain = $state->floodfill( sub{$_ eq 'b'}, [10,10]);
Usage: my $nodeset = $state->floodfill($condition, $progenitor)
my $nodeset = $state->floodfill($condition, $progenitor)
This returns a nodeset of connected nodes where the condition evaluates to true, beginning at a progenitor node.
To get a chain of white stones starting at $node $state->floodfill( $sub{ $_ eq 'w' }, $node);
To get a region of empty space, starting at $node $state->floodfill( $sub{ ! $_ }, $node);
my $not_larger_nodeset = $state->grep_nodeset(sub{$_ =~ /[wb]/}, $nodeset)
Another awkward functional thing.
To install Games::Go::Cinderblock, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Games::Go::Cinderblock
CPAN shell
perl -MCPAN -e shell install Games::Go::Cinderblock
For more information on module installation, please visit the detailed CPAN module installation guide.