Games-Board
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Games/Board.pm view on Meta::CPAN
use strict;
use warnings;
package Games::Board 1.014;
# ABSTRACT: a parent class for board games
use Carp;
use Games::Board::Space;
use Games::Board::Piece;
#pod =head1 SYNOPSIS
#pod
#pod use Games::Board;
#pod
#pod my $board = Games::Board->new;
#pod
#pod $board->add_space(
#pod id => 'go',
#pod dir => { next => 'mediterranean', prev => 'boardwalk' },
#pod cost => undef
#pod );
#pod
#pod my $tophat = Games::Board::Piece->new(id => 'tophat')->move(to => 'go');
#pod
#pod =head1 DESCRIPTION
#pod
#pod This module provides a base class for representing board games.
#pod
#pod =method new
#pod
#pod This method constructs a new game board and returns it. As constructed it has
#pod no spaces or pieces on it.
#pod
#pod =cut
sub new {
my $class = shift;
my $board = {
spaces => { }
};
bless $board => $class;
}
#pod =method space
#pod
#pod my $space = $board->space($id);
#pod
#pod This method returns the space with the given C<$id>. If no space with that id
#pod exists, undef is returned.
#pod
#pod =cut
sub space {
my $board = shift;
my $space = shift;
return $board->{spaces}{$space};
}
#pod =method add_space
#pod
#pod my $space = $board->add_space(%args);
#pod
#pod This method adds a space to the board. It is passed a hash of attributes to
#pod use in creating a Games::Board::Space object. The object is created by calling
#pod the constructor on the class whose name is returned by the C<spaceclass>
#pod method. This class must inherit from Games::Board::Space.
#pod
#pod =cut
sub add_space {
my ($board, %args) = @_;
my $space;
$space = $board->spaceclass->new(board => $board, %args);
return unless eval { $space->isa('Games::Board::Space') };
if ($board->space($space->id)) {
carp "space '" . $space->id . "' already exists on board";
} else {
$board->{spaces}{$space->id} = $space;
return $space;
}
}
#pod =method piececlass
#pod
#pod This method returns the class used for pieces on this board.
#pod
#pod =cut
sub piececlass { 'Games::Board::Piece' }
#pod =method spaceclass
#pod
#pod This method returns the class used for spaces on this board.
#pod
#pod =cut
sub spaceclass { 'Games::Board::Space' }
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.223 second using v1.00-cache-2.02-grep-82fe00e-cpan-3b7f77b76a6c )