Game-Life-Faster
view release on metacpan or search on metacpan
script/game-life-faster view on Meta::CPAN
sub cmd_clear_grid {
$life->clear();
return;
}
sub cmd_clear_point {
my ( $x, $y ) = @_;
$life->unset_point( $x, $y );
return;
}
sub cmd_clear_screen {
print CLEAR_STRING;
return;
}
sub cmd_dead {
return _state_opt( dead => @_ );
}
sub cmd_dump {
my ( $method, @arg ) = @_;
my $data = $method ? $life->$method( @arg ) : $life->{grid};
if ( eval { require Data::Dump; 1; } ) {
print Data::Dump::dump( $data ), "\n";
} elsif ( eval { require Data::Dumper; 1; } ) {
no warnings qw{ once };
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Sortkeys = 1;
print Data::Dumper::Dumper( $data );
} else {
die "No dumper available\n";
}
return;
}
sub cmd_exit {
pop @reader_stack;
return;
}
sub cmd_grid {
$opt{autoclear}
and cmd_clear_screen();
print "$_\n" for $life->get_text_grid( $opt{living}, $opt{dead} );
return;
}
sub cmd_help {
pod2usage( { -verbose => 2, -exitval => 'NOEXIT' } );
return;
}
sub cmd_living {
_state_opt( living => @_ );
return;
}
sub cmd_load {
local @ARGV = @_;
my %o = %opt;
GetOptions( \%o,
qw{ living=s },
) or return;
my ( $file, $x, $y ) = @ARGV;
$x ||= 0;
$y ||= 0;
my @rows;
local $_ = undef;
open my $fh, '<:encoding(utf-8)', $file
or die "Unable to open $file: $!\n";
while ( <$fh> ) {
s/ \s+ \z //smx;
push @rows, $_;
}
close $fh;
$life->place_text_points( $x, $y, $o{living}, @rows );
return;
}
sub cmd_new {
my @arg = @_;
Getopt::Long::GetOptionsFromArray( \@arg, \%opt, qw{ faster! } )
or return;
my ( $size, $breed, $live ) = @arg;
_size( size => $size );
_rule( breed => $breed );
_rule( live => $live );
my $class;
if ( $opt{faster} ) {
$class = 'Game::Life::Faster';
require Game::Life::Faster;
} else {
$class = 'Game::Life';
require Game::Life;
}
print "$class->new( ", join( ', ', map{ _expand( $opt{$_} ) } qw{
size breed live } ), ")\n";
$life = $class->new( map { $opt{$_} } qw{ size breed live } );
return;
}
sub cmd_pause {
my ( $pause ) = @_;
defined $pause
and _pause_opt( pause => $pause );
print "pause $opt{pause}\n";
return;
}
sub cmd_used {
my ( $living, $dead ) = @_;
my ( $min_x, $min_y, $rslt ) = $life->get_used_text_grid(
$living, $dead );
print "$min_x,$min_y\n$rslt";
return;
}
sub cmd_place_points {
my ( $x, $y, @array ) = @_;
( run in 1.312 second using v1.01-cache-2.11-cpan-364913b4093 )