Games::Board::Space - a parent class for spaces on game board


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

Index


Code Index:

NAME

Top

Games::Board::Space -- a parent class for spaces on game board

VERSION

Top

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

SYNOPSIS

Top

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

DESCRIPTION

Top

This module provides a base class for representing the spaces on a game board.

METHODS

Top

new

This method constructs a new space and returns it.

id

This method returns the id of the space.

board

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

Cdir($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.

TODO

Top

implement this dist!

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::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;