package TextPrinter; use strict; use warnings; use Term::ANSIColor; { my %colours = ( 'black' => [ map { color($_,'on_black') } 'dark yellow','dark green','dark blue' ], 'white' => [ map { color($_,'on_white') } 'green', 'blue', 'yellow' ], ); my $strip_length = 0; sub rotate { my ($arr) = @_; my $el = shift @$arr; push @$arr, $el; return; } sub next_colour { my ($which) = @_; if ($strip_length < 1) { $strip_length = 1+int(rand(7)); rotate($colours{$which}); } --$strip_length; return $colours{$which}->[0]; } } sub draw_cell { print next_colour(shift eq '*' ? 'black' : 'white'), chr(65+int(rand(26))); } { my $white = color('black','on_white'); my $reset = color('reset'); sub draw_row { my ($row,$scale)=@_; $scale||=1; print $white,' 'x(3*$scale); for my $cell (@$row) { draw_cell($cell) for 1..$scale; } print $white,' 'x(3*$scale); print $reset,"\n"; } sub draw_empty_row { my ($row,$scale)=@_; $scale||=1; print $white,' 'x((6+@$row)*$scale),$reset,"\n" for 1..(3*$scale); } } sub draw_whole { my ($arr,$scale)=@_; $scale||=1; draw_empty_row($arr->[0],$scale); for my $row (@$arr) { draw_row($row,$scale) for 1..$scale; } draw_empty_row($arr->[0],$scale); } 1;