Skip to content

Instantly share code, notes, and snippets.

@masak
Created January 1, 2009 02:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masak/42176 to your computer and use it in GitHub Desktop.
Save masak/42176 to your computer and use it in GitHub Desktop.
sub put($sky, $row, $column, $char) {
return $sky unless 0 <= $row <= 24 && 0 <= $column <= 79;
my $pos = 80 * $row + $column;
return $sky.substr(0,$pos) ~ $char ~ $sky.substr($pos+1);
}
my $empty_sky = (' ' x 79 ~ "\n") x 24;
my $n = 20;
my @firework_times = map { (0..900).pick }, ^$n;
my @firework_positions = map { (10..69).pick }, ^$n;
my @explosions = map {
my $p = @firework_positions[$_];
map { [12, $p, -1 + (rand() - .5) * .7, (rand() - .5) * 2] }, ^10
}, ^$n;
for 0 .. 1000 -> $time {
my $sky = $empty_sky;
for @firework_times Z @firework_positions Z @explosions ->
$t, $p, $e {
given $time {
when $t .. $t+12 {
$sky = put($sky, 24 - ($time-$t), $p, '|');
}
when $t+14 .. $t+24 {
for $e {
$sky = put($sky, floor(.[0]), floor(.[1]), '.');
.[0] += .[2]; # y movement
.[1] += .[3]; # x movement
.[2] += .5; # gravity
}
}
}
}
print "\n" x 70;
print $sky;
sleep 0.05;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment