summaryrefslogtreecommitdiff
path: root/lib/TextPrinter.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/TextPrinter.pm')
-rw-r--r--lib/TextPrinter.pm79
1 files changed, 79 insertions, 0 deletions
diff --git a/lib/TextPrinter.pm b/lib/TextPrinter.pm
new file mode 100644
index 0000000..d786b86
--- /dev/null
+++ b/lib/TextPrinter.pm
@@ -0,0 +1,79 @@
+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;