| Games-Board documentation | Contained in the Games-Board distribution. |
Games::Board -- a parent class for board games
$Id: /my/cs/projects/board/trunk/lib/Games/Board.pm 27799 2006-11-11T02:23:32.940873Z rjbs $
use Games::Board;
my $board = Games::Board->new;
$board->add_space(
id => 'go',
dir => { next => 'mediterranean', prev => 'boardwalk' },
cost => undef
);
my $tophat = Games::Board::Piece->new(id => 'tophat')->move(to => 'go');
This module provides a base class for representing board games.
newThis method constructs a new game board and returns it. As constructed it has no spaces or pieces on it.
space($id)This method returns the space with the given $id. If no space with that id
exists, undef is returned.
add_space(%args)This method adds a space to the board. It is passed a hash of attributes to
use in creating a Games::Board::Space object. The object is created by calling
the constructor on the class whose name is returned by the spaceclass
method. This class must inherit from Games::Board::Space.
piececlassThis method returns the class used for pieces on this board.
spaceclassThis method returns the class used for spaces on this board.
add_piece(%args)This method adds a piece to the board. It is passed a hash of attributes to
use in creating a Games::Board::Piece object. The object is created by calling
the constructor on the class whose name is returned by the piececlass
method. This class must inherit from Games::Board::Piece.
Lots. First up: write a TODO list.
Ricardo SIGNES <rjbs@cpan.org>
Copyright 2003-2004 by Ricardo Signes <rjbs@cpan.org>
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://www.perl.com/perl/misc/Artistic.html
| Games-Board documentation | Contained in the Games-Board distribution. |
use strict; use warnings; package Games::Board; use Carp; use Games::Board::Space; use Games::Board::Piece;
our $VERSION = '1.011';
sub new { my $class = shift; my $board = { spaces => { } }; bless $board => $class; }
sub space { my $board = shift; my $space = shift; return $board->{spaces}{$space}; }
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; } }
sub piececlass { 'Games::Board::Piece' }
sub spaceclass { 'Games::Board::Space' }
sub add_piece { my $board = shift; my %args = @_; my $piece; $piece = $board->piececlass->new(board => $board, @_); $piece ||= shift; return unless eval { $piece->isa('Games::Board::Piece') }; return $piece; }
"Family fun night!";