Games::Board - a parent class for board games


Games-Board documentation Contained in the Games-Board distribution.

Index


Code Index:

NAME

Top

Games::Board -- a parent class for board games

VERSION

Top

 $Id: /my/cs/projects/board/trunk/lib/Games/Board.pm 27799 2006-11-11T02:23:32.940873Z rjbs  $

SYNOPSIS

Top

	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');

DESCRIPTION

Top

This module provides a base class for representing board games.

METHODS

Top

new

This 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.

piececlass

This method returns the class used for pieces on this board.

spaceclass

This 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.

TODO

Top

Lots. First up: write a TODO list.

SEE ALSO

Top

AUTHOR

Top

Ricardo SIGNES <rjbs@cpan.org>

COPYRIGHT

Top


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!";