From c8e8946a5be041249404e222995e7242f5d8457e Mon Sep 17 00:00:00 2001 From: gashapwn Date: Sun, 4 Apr 2021 15:22:37 +0000 Subject: [PATCH] lpst.pl - added a second and third shade. refactored shades to use a hash --- lpst.pl | 107 +++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 41 deletions(-) diff --git a/lpst.pl b/lpst.pl index 6300a7d..e61eac8 100644 --- a/lpst.pl +++ b/lpst.pl @@ -5,11 +5,14 @@ use strict; use utf8; -my $XBOX_CHR = chr(0x2573); -my $SHADE_CHR = chr(0x2591); +my $X_BOX_CHR = chr(0x2573); +my $GRAY_BOX_CHR = chr(0x2591); my $ALT_US = chr(0x2017); my $ALT_PIPE = chr(0x2016); +my $SHADE_1_CHR = $GRAY_BOX_CHR; +my $SHADE_2_CHR = $X_BOX_CHR; + my $PAD_AXIS = " "; my $PAD_EVEN = " "; my $PAD_ODD = " "; @@ -18,15 +21,20 @@ my $HEX_1 = '-/--\-'; my $HEX_2 = '| __ |'; my $HEX_3 = '| |'; -my $HEX_S_1 = '-/--\-'; -my $HEX_S_2 = sprintf("|%s==%s|", $SHADE_CHR, $SHADE_CHR); -my $HEX_S_3 = sprintf("|%s%s%s%s|", $SHADE_CHR, $SHADE_CHR, $SHADE_CHR, $SHADE_CHR); -# my $HEX_S_1 = '-/--\-'; -# my $HEX_S_2 = '|'.$SHADE_CHR.'__'.$SHADE_CHR.'|'; -# my $HEX_S_3 = '|'.$SHADE_CHR.$SHADE_CHR.$SHADE_CHR.$SHADE_CHR.'|'; +my $HEX_S1_1 = '-/--\-'; +my $HEX_S1_2 = sprintf("|%s%s%s%s|", $SHADE_1_CHR, $SHADE_1_CHR, $SHADE_1_CHR, $SHADE_1_CHR); +my $HEX_S1_3 = sprintf("|%s%s%s%s|", $SHADE_1_CHR, $SHADE_1_CHR, $SHADE_1_CHR, $SHADE_1_CHR); + +my $HEX_S2_1 = '-/--\-'; +my $HEX_S2_2 = sprintf("|%s%s%s%s|", $SHADE_2_CHR, $SHADE_2_CHR, $SHADE_2_CHR, $SHADE_2_CHR); +my $HEX_S2_3 = sprintf("|%s%s%s%s|", $SHADE_2_CHR, $SHADE_2_CHR, $SHADE_2_CHR, $SHADE_2_CHR); + +my $HEX_S3_1 = '-/--\-'; +my $HEX_S3_2 = sprintf("|%s%s%s%s|", $SHADE_2_CHR, $SHADE_2_CHR, $SHADE_1_CHR, $SHADE_1_CHR); +my $HEX_S3_3 = sprintf("|%s%s%s%s|", $SHADE_2_CHR, $SHADE_2_CHR, $SHADE_1_CHR, $SHADE_1_CHR); -my $HL_1 = "|_____"; -my $HL_2 = $ALT_PIPE.$ALT_US.$ALT_US.$ALT_US.$ALT_US.$ALT_US; +my $HL_1 = "|____ "; +my $HL_2 = $ALT_PIPE.$ALT_US.$ALT_US.$ALT_US.$ALT_US." "; my $SUB_CHR = "_"; my $ALT_SUB_CHR = "="; @@ -49,8 +57,8 @@ my $MG_IT = "It"; # Ittan-Momen my $MG_H = "H"; # Harpy my $MG_S = "S"; # Slime my $MG_RC = "Rc"; # Redcap -my $MG_RO = "Hs"; # Red Oni -my $MG_HS = "Ro"; # Holstaur +my $MG_HS = "Hs"; # Holstaur +my $MG_RO = "Ro"; # Red Oni my $MG_B = "B"; # Blue Oni my $MG_P = "P"; # Preistess my $MG_IM = "Im"; # Imp @@ -123,7 +131,7 @@ my %MOVE = ( [-3, 2], [-1,-2], [ 1, 2], [ 3,-2] ], $MG_RC => [ - [-1, 0], [-2, 0], [ 0, 1], [ 0, 2] + [-1, 0], [-2, 0], [ 1, 0], [ 2, 0] ], $MG_S => [ [-1, 1], [-2, 2], [ 0, 1], [ 0, 2], @@ -136,7 +144,7 @@ my %MOVE = ( [-1, 1], [ 0, 1], [ 1, 1], [ 1,-2] ], $MG_B => [ - [-1, 1], [ 0, 1], [ 0,-2], [ 1,-2] + [-1, 1], [ 0, 1], [ 0,-2], [ 2,-2] ], $MG_P => [ [-4, 2], [-2, 1], [-2,-2], [-1,-1], @@ -144,7 +152,7 @@ my %MOVE = ( ], $MG_IM => [ [-2, 1], [-1,-1], [-1, 2], [ 1, 1], - [ 1,-1], [ 1,-2], [ 2,-1] + [ 1,-1], [ 2,-1] ], $MG_F => [ [-1, 0], [-1, 1], [ 0, 1], [ 0,-1], @@ -162,7 +170,7 @@ my %MOVE = ( ], $MG_SY => [ [-4, 4], [-3, 3], [-3, 2], [-1,-2], - [ 0,-2], [ 0,-3], [ 0, 3], [ 0, 4], + [ 0,-4], [ 0,-3], [ 0, 3], [ 0, 4], [ 1, 2], [ 3,-2], [ 3,-3], [ 4,-4] ] ); @@ -171,15 +179,19 @@ my %MOVE = ( my $EMPTY_CELL = "_"; # Shade enum -my $SHADED_ENUM = 1; +my $SHADE_3_ENUM = 3; +my $SHADE_2_ENUM = 2; +my $SHADE_1_ENUM = 1; my $EMPTY_ENUM = 0; my %SHADE = ( - $SHADED_ENUM => [$HEX_S_1, $HEX_S_2, $HEX_S_3], + $SHADE_1_ENUM => [$HEX_S1_1, $HEX_S1_2, $HEX_S1_3], + $SHADE_2_ENUM => [$HEX_S2_1, $HEX_S2_2, $HEX_S2_3], + $SHADE_3_ENUM => [$HEX_S3_1, $HEX_S3_2, $HEX_S3_3], $EMPTY_ENUM => [$HEX_1, $HEX_2, $HEX_3] ); -my @sc0 = (); +my %sc = (); my %board; # Display pieces @@ -193,17 +205,22 @@ sub f_1($$$){ my $s0; $p =~ s/($P1|$P2)$DIV//; - $p =~ s/$EMPTY_CELL//; - $p .= "__" if length($p) < 1; + # $p =~ s/$EMPTY_CELL//; + # $p .= "__" if length($p) < 1; $p .= "_" if length($p) < 2; $s0 = $hex; + $s0 =~ s/$SUB_CHR{1,2}/$p/; - if ($p eq "__"){ - $s0 =~ s/$ALT_SUB_CHR{1,2}/$SHADE_CHR$SHADE_CHR/; - }else{ - $p =~ s/_/$SHADE_CHR/; - $s0 =~ s/$ALT_SUB_CHR{1,2}/$p/; + + unless($p eq "__"){ + substr($s0, 2,2) = $p; } + # if ($p eq "__"){ + # $s0 =~ s/$ALT_SUB_CHR{1,2}/$SHADE_1_CHR$SHADE_1_CHR/; + # }else{ + # # $p =~ s/_/$SHADE_1_CHR/; + # $s0 =~ s/$ALT_SUB_CHR{1,2}/$p/; + # } if($c0 % 2 == 0){ $s0 =~ s/$SUB_CHR/$BLANK_CELL_CHR/g; @@ -215,15 +232,21 @@ sub f_1($$$){ # Display shade #================================================== -sub shade_cell($){ +sub shade_cell($$){ my $not = shift; - push(@sc0, $not) unless shade_t($not); + my $en = shift; + + $sc{$not} = $en unless (grep /^$not$/, keys(%sc)); } sub shade_t($){ my $not = shift; - return $SHADED_ENUM if grep /^$not$/, @sc0; + return $sc{$not} if (grep /^$not$/, keys(%sc)); return $EMPTY_ENUM; + + # return $SHADE_1_ENUM if grep /^$not$/, @sc0; + # return $SHADE_2_ENUM if grep /^$not$/, @sc1; + # return $EMPTY_ENUM; } sub get_shade_chr($){ @@ -304,11 +327,6 @@ sub add_cell($$$$$){ $s1 .= disp_2($r0, $c0); $s2 .= disp_3($r0, $c0); - # if($c0 % 2 == 0){ - # $s0 =~ s/ /$SHADE_CHR/g; - # $s1 =~ s/ /$SHADE_CHR/g; - # $s2 =~ s/ /$SHADE_CHR/g; - # } return ($s0, $s1, $s2); } @@ -471,9 +489,13 @@ sub calc_move($$){ $x_shift = $mov->[0]; # make x_shift adjustment - $ni = $y_shift != 0 ? ($y_shift / ($y_shift * -1)) : -1; - $ni *= -1; - $n0 = ($r0 + 1) % 2; + + $ni = $y_shift != 0 ? ($y_shift / abs($y_shift)) : 1; + # $ni *= -1; + + # moving down: $ni == -1 want value of 0 + # moving up: $ni == +1 want value of 1 + $n0 = ($r0 + (($ni + 1)/2) ) % 2; $x_shift += int(($y_shift + ($n0 * $ni)) / 2); return apply_shift($not, [$x_shift, $y_shift]); @@ -496,12 +518,15 @@ binmode(STDOUT, ":utf8"); }(1...11); my $m1 = "E6"; -my $c1 = $MG_A; +my $c1 = $MG_SY; $board{$m1} = $P1.$DIV.$c1; -# for my $mv (@{$MOVE{$c1}}){ -# printf("%s\n", calc_move($m1, $mv)); -# } +for my $mv (@{$MOVE{$c1}}){ + shade_cell(calc_move($m1, $mv), $SHADE_1_ENUM); +} disp_board(); + + +