| Games-Board documentation | Contained in the Games-Board distribution. |
Games::Board::Space -- a parent class for spaces on game board
$Id: /my/cs/projects/board/trunk/lib/Games/Board/Space.pm 27799 2006-11-11T02:23:32.940873Z rjbs $
use Games::Board;
my $board = Games::Board->new;
$board->add_space(Games::Board::Space->new(
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 the spaces on a game board.
newThis method constructs a new space and returns it.
idThis method returns the id of the space.
boardThis method returns board on which this space sits.
dir_id($dir)This method returns the id of the space found in the given direction from this space.
dir($dir)This method returns the space found in the given direction from this space.
contains($piece)This method returns a true value if the space contains the passed piece.
receive($piece)This method will place the given piece onto this space.
implement this dist!
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::Space; use Carp;
our $VERSION = '1.011';
sub new { my $class = shift; my %args = @_; return unless $args{id}; croak "no board supplied in space creation" unless eval { $args{board}->isa('Games::Board') }; my $space = { id => $args{id}, board => $args{board}, }; $space->{dir} = $args{dir} if $args{dir} and (ref $args{dir} eq 'HASH'); bless $space => $class; }
sub id { my $space = shift; return $space->{id}; }
sub board { my $space = shift; $space->{board}; }
sub dir_id { my ($space, $dir) = @_; return $space->{dir}{$dir} if (ref $space->{dir} eq 'HASH'); }
sub dir { my ($space, $dir) = @_; $space->board->space($space->dir_id($dir)); }
sub contains { my ($self, $piece) = @_; return 1 if grep { $_ eq $piece->id } @{$self->{contents}}; }
sub receive { my ($self, $piece) = @_; return unless eval { $piece->isa('Games::Board::Piece') }; return if $self->contains($piece); $piece->{current_space} = $self->id; push @{$self->{contents}}, $piece->id; }
1;