if ( $jumper->hasPeg() ) {
####
package boardTree;
use lib('.');
use board;
use hole;
use warnings;
use diagnostics;
use Data::Dumper;
use strict;
use Exporter;
use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = ();
@EXPORT_OK = qw( &new );
%EXPORT_TAGS = ( DEFAULT => [qw ( &new )] );
#
# new - boardTree constructor
#
sub new {
my ($pkg, $board, $index, $level, $links ) = @_;
my $obj = bless {
board => $board,
index => defined( $index ) ? $index : 0,
level => defined( $level ) ? $level : 0,
links => defined( $links ) ? $links : []
}, $pkg;
return $obj;
}
sub makeLinks {
my $obj = shift;
my $nextLevel = $obj->{'level'} + 1;
print "nextLevel => $nextLevel\n";
for my $jumper ( $obj->{'board'}->getHoles() ) {
print __FILE__ . " $jumper\n";
if ( $jumper->hasPeg() ) {
for my $jumpy ( $jumper->getLinks() ) {
my $rc = $jumpy->jumpingOver( $jumper->getIndex() );
if ( $rc > -1 ) {
my @nholes = ();
for ($obj->{'board'}->getHoles()) {
my %newHole = %$_;
push ( @nholes, \%newHole );
}
$nholes[$jumpy->getIndex()]->{'peg'} = 'white';
$nholes[$jumper->getIndex()]->{'peg'} = 'white';
$nholes[$rc]->{'peg'} = 'black';
my $newBoard = new board( \@nholes, $nextLevel );
push( @{$obj->{'links'}},
new boardTree (
$newBoard,
$obj->{'index'} + 1,
$nextLevel,
[] ));
$obj->{'links'}[$obj->getNumLinks()-1]->makeLinks();
}
}
}
}
}
#
# returns the links attribute
#
sub getLinks {
my $obj = shift;
return @{$obj->{'links'}};
}
sub getNumLinks {
my $obj = shift;
return $#{@{$obj->{'links'}}} + 1;
}
#
# print out the object
#
sub dumpPretty {
my $obj = shift;
print __FILE__ . "[" . __LINE__ . "] level => " . $obj->{'level'} . ":\n";
$obj->{'board'}->dumpPretty();
print "\tno links = " . $obj->getNumLinks() . "\n";
for my $l ( $obj->getLinks() ) {
$l->dumpPretty();
}
}
####
my @nholes = ();
for ($obj->{'board'}->getHoles()) {
my %newHole = %$_;
push ( @nholes, \%newHole );
}
$nholes[$jumpy->getIndex()]->{'peg'} = 'white';
$nholes[$jumper->getIndex()]->{'peg'} = 'white';
$nholes[$rc]->{'peg'} = 'black';
my $newBoard = new board( \@nholes, $nextLevel );