Acme-Monkey
view release on metacpan or search on metacpan
bin/monkey_life.pl view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use Acme::Monkey::Frame;
use Acme::Monkey::Frame::Layer;
use Term::ANSIColor qw( :constants );
use Time::HiRes qw( sleep );
use Term::ReadKey;
my $frame = Acme::Monkey::Frame->new(
width => 20,
height => 10,
);
my $background = Acme::Monkey::Frame::Layer->new(
width => $frame->width(),
height => $frame->height(),
color => GREEN,
);
foreach my $x (1..$background->width()) {
foreach my $y (1..$background->height()) {
my $folliage = int( rand() * 12) -6;
if ($folliage < 3) {
$background->set( $x, $y, '.' );
}
elsif ($folliage==3) {
$background->set( $x, $y, '%' );
}
elsif ($folliage==4) {
$background->set( $x, $y, 'X' );
}
else {
$background->set( $x, $y, '+' );
}
}
}
$frame->layers->{z} = $background;
my $food = Acme::Monkey::Frame::Layer->new(
width => $frame->width(),
height => $frame->height(),
color => BOLD.YELLOW,
);
$frame->layers->{x} = $food;
my %monkeys;
my $monkey_id = 1;
sub create_monkey {
my ($x, $y, $age) = @_;
my $layer = Acme::Monkey::Frame::Layer->new(
width => 1,
height => 1,
x => $x,
y => $y,
color => RED,
);
$age = 1;
# $age ||= int(rand() * 100) + 1;
$layer->set( 1, 1, age_char($age) );
$frame->layers->{"monkey_$monkey_id"} = $layer;
$monkeys{$monkey_id} = {
layer => $layer,
# hunger => int(rand() * 20) + 1,
hunger => 0,
age => $age,
last_move => 0,
};
$monkey_id ++;
}
sub age_char {
my ($age) = @_;
return '.' if ($age < 7);
return 'o' if ($age < 20);
return '@' if ($age < 80);
return '#';
}
sub add_food {
$food->set(
int(rand() * $frame->width()) + 1,
int(rand() * $frame->height()) + 1,
'/',
);
}
ReadMode 4;
eval {
foreach (1..1000) {
my $key = ReadKey( -1 ) || '';
( run in 2.650 seconds using v1.01-cache-2.11-cpan-d8267643d1d )