X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=Board.pm;h=6df8ecae1326b4bb083f66598c3e5b59a1455b3b;hp=720189899045eb72ea25850167e98613c2c374a5;hb=bdf7fb246fa3fcf64350d8edd3f3a9ea9c32f46f;hpb=72de1da79baf2dddf6b37374aeb27bd3576af596 diff --git a/Board.pm b/Board.pm index 7201898..6df8eca 100644 --- a/Board.pm +++ b/Board.pm @@ -200,14 +200,15 @@ sub parse_pretty_move { push @squares, [ $row, $col ]; } } - - # Filter out pieces which cannot reach this square. - @squares = grep { $board->can_reach($piece, $_->[0], $_->[1], $to_row, $to_col) } @squares; - - # See if doing this move would put us in check - # (yes, there are clients that expect us to do this). - @squares = grep { !$board->make_move($_->[0], $_->[1], $to_row, $to_col, $promo)->in_check($side) } @squares; - + if (scalar @squares > 1) { + # Filter out pieces which cannot reach this square. + @squares = grep { $board->can_reach($piece, $_->[0], $_->[1], $to_row, $to_col) } @squares; + } + if (scalar @squares > 1) { + # See if doing this move would put us in check + # (yes, there are clients that expect us to do this). + @squares = grep { !$board->make_move($_->[0], $_->[1], $to_row, $to_col, $promo)->in_check($side) } @squares; + } if (scalar @squares == 0) { die "Impossible move $move"; } @@ -232,42 +233,6 @@ sub fen { # Returns a compact bit string describing the same data as fen(). # This is encoded using a Huffman-like encoding, and should be # typically about 1/3 the number of bytes. -sub bitpacked_fen { - my ($board) = @_; - my $bits = ""; - - for my $row (0..7) { - for my $col (0..7) { - my $piece = $board->[$row][$col]; - if ($piece eq '-') { - $bits .= "0"; - next; - } - - my $color = (lc($piece) eq $piece) ? 0 : 1; - $bits .= "1" . $color; - - if (lc($piece) eq 'p') { - $bits .= "0"; - } elsif (lc($piece) eq 'n') { - $bits .= "100"; - } elsif (lc($piece) eq 'b') { - $bits .= "101"; - } elsif (lc($piece) eq 'r') { - $bits .= "1110"; - } elsif (lc($piece) eq 'q') { - $bits .= "11110"; - } elsif (lc($piece) eq 'k') { - $bits .= "11111"; - } else { - die "Unknown piece $piece"; - } - } - } - - return pack('b*', $bits); -} - sub can_reach { my ($board, $piece, $from_row, $from_col, $to_row, $to_col) = @_;