diff --git a/lpst.pl b/lpst.pl index 7990b45..a1ca691 100644 --- a/lpst.pl +++ b/lpst.pl @@ -13,7 +13,8 @@ my $HEX_1 = '-/--\-'; my $HEX_2 = '| __ |'; my $HEX_3 = '| |'; -my $SHADE_CHR = chr(0x2592); +my $XBOX_CHR = chr(0x2573); +my $SHADE_CHR = chr(0x2591); my $ALT_US = chr(0x2017); my $ALT_PIPE = chr(0x2016); @@ -82,7 +83,15 @@ my %AXIS_RV = map { # -1 -1 # -# [Row mvoe, Diag move] +# ODD +# UP: 0, +1 +# DOWN: -1, -1 + +# EVEN +# UP: +1, +1 +# DOWN: +0, -1 + +# [Row move, Diag move] my %MOVE = ( $MG_A => [ @@ -407,6 +416,16 @@ sub disp_board(){ printf("%s", $b); } + + + + + + + + + + sub cell_index_rev($$){ return $AXIS_RV{$_[0]}.$_[1]; } @@ -416,6 +435,49 @@ sub cell_index($){ return ($AXIS{$chr1}, $chr2); } +sub apply_shift($$){ + my ($not, $my_shift) = (shift, shift); + my $r0; + my $c0; + + ($r0, $c0) = cell_index($not); + + $r0 += $my_shift->[0]; + $c0 += $my_shift->[1]; + die "cell index [$r0, $c0]: out of bound exception" if $r0 > 11 or $c0 > 11 or $r0 < 1 or $c0 < 1; + return cell_index_rev($r0, $c0); +} + +sub calc_move($$){ + my ($not, $mov) = (shift, shift); + my $r0; + my $c0; + + my $x_shift; + my $y_shift; + + my $n0; + my $ni; + + ($r0, $c0) = cell_index($not); + + # Calc y_shift + $y_shift = $mov->[1]; + + # Calc x_shift + $x_shift = $mov->[0]; + + # make adjustment + $ni = ($y_shift / ($y_shift * -1)); + $ni *= -1; + + $n0 = ($r0 + 1) % 2; + + $x_shift += int(($y_shift + ($n0 * $ni)) / 2); + + return apply_shift($not, [$x_shift, $y_shift]); +} + # Main starts here! binmode(STDOUT, ":utf8"); @@ -432,10 +494,13 @@ binmode(STDOUT, ":utf8"); $AXIS_RV{$_} }(1...11); -$board{"F5"} = $P1.$DIV.$MG_QS; +my $m1 = "F4"; +my $c1 = $MG_A; +$board{$m1} = $P1.$DIV.$c; +for my $mv in $MOVE{} +printf("%s\n", calc_move($m1, [-2,-2])); +# printf("%s\n", calc_move($m1, [-6,6])); disp_board(); -# disp_0("C1"); -# printf(">>%s, %s\n", cell_index("C1"));