#!/usr/bin/perl -w use strict; if( $#ARGV != 0 ) { die "$0 \n"; } my $line_count = $ARGV[0]; my $pi = atan2(0, -1); my @buffer = (); for(my $i = 0; $i < 40; $i++) { push @buffer, (("X" x 79) . "\n"); } my $char = 0; my $last_x = 40; my $last_y = 80; for(; $line_count > 0; $line_count--) { push @buffer, (("X" x 79) . "\n"); # Generate dango my $cx = rand(70) + 5; my $distance = sqrt(($cx - $last_x) * ($cx - $last_x) + $last_y * $last_y); if( $last_y > 30 && $distance > 40 ) { my $size = 17 + rand(5); for(my $ta = 0; $ta < 2 * $pi; $ta += 0.05) { for(my $tr = 0; $tr < $size; $tr += 0.1) { my $x = $cx + $tr * cos($ta); my $dy = $tr * sin($ta); my $vscale = $dy > 0 ? 0.2 : 0.4; my $y = $#buffer - 20 + $dy * $vscale; $y = int($y + 0.5); $x = int($x + 0.5); if( $x >= 0 && $x < length($buffer[$y]) ) { substr($buffer[int($y + 0.5)], int($x + 0.5), 1) = ' '; } } } my $dx = rand($size) - $size / 2; if( $cx + $dx - 3 > 1 ) { substr($buffer[$#buffer - 21], int($cx + $dx) - 3, 1) = '#'; substr($buffer[$#buffer - 22], int($cx + $dx) - 3, 1) = '#'; } if( $cx + $dx + 2 < 78 ) { substr($buffer[$#buffer - 21], int($cx + $dx) + 2, 1) = '#'; substr($buffer[$#buffer - 22], int($cx + $dx) + 2, 1) = '#'; } $last_x = $cx; $last_y = 0; } else { $last_y += 2; } # Output text following template my $template = shift @buffer; foreach my $c (unpack 'C*', $template) { $c = chr($c); if( $c =~ /\s/s ) { print $c; } else { print chr($char + ord('a')); $char = ($char + 1) % 26; } } }