X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=Position.pm;h=8a42a6fa39f59f9e42bd80ec08bb5d7719a759e7;hp=6840e7fdd6dd342ff883bbbd45aa2e6ff7546716;hb=bdf7fb246fa3fcf64350d8edd3f3a9ea9c32f46f;hpb=35725006988891aae7234a39c4f7c603c8b17bd9 diff --git a/Position.pm b/Position.pm index 6840e7f..8a42a6f 100644 --- a/Position.pm +++ b/Position.pm @@ -38,6 +38,7 @@ sub new { } $pos->{'last_move'} = $x[29]; $pos->{'prettyprint_cache'} = {}; + $pos->{'tbprobe_cache'} = {}; bless $pos, $class; return $pos; @@ -78,6 +79,7 @@ sub from_fen { $pos->{'last_move_uci'} = undef; $pos->{'last_move'} = undef; $pos->{'prettyprint_cache'} = {}; + $pos->{'tbprobe_cache'} = {}; bless $pos, $class; return $pos; @@ -130,40 +132,12 @@ sub fen { return $fen; } -# Returns a compact bit string describing the same data as fen(), -# except for the half-move and full-move clock. -sub bitpacked_fen { - my $pos = shift; - my $board = $pos->{'board'}->bitpacked_fen(); - - my $bits = ""; - if ($pos->{'toplay'} eq 'W') { - $bits .= "0"; - } else { - $bits .= "1"; - } - - $bits .= $pos->{'white_castle_k'}; - $bits .= $pos->{'white_castle_q'}; - $bits .= $pos->{'black_castle_k'}; - $bits .= $pos->{'black_castle_q'}; - - my $col = $pos->{'ep_file_num'}; - if ($col == -1) { - $bits .= "0"; - } else { - $bits .= "1"; - $bits .= (qw(000 001 010 011 100 101 110 111))[$col]; - } - - return $board . pack('b*', $bits); -} - sub to_json_hash { my $pos = shift; my $json = { %$pos, fen => $pos->fen() }; delete $json->{'board'}; delete $json->{'prettyprint_cache'}; + delete $json->{'tbprobe_cache'}; delete $json->{'black_castle_k'}; delete $json->{'black_castle_q'}; delete $json->{'white_castle_k'}; @@ -244,6 +218,12 @@ sub make_move { } $np->{'player_w'} = $pos->{'player_w'}; $np->{'player_b'} = $pos->{'player_b'}; + if (exists($pos->{'start_fen'})) { + $np->{'start_fen'} = $pos->{'start_fen'}; + } + if (exists($pos->{'chess960'})) { + $np->{'chess960'} = $pos->{'chess960'}; + } if (defined($pretty_move)) { $np->{'last_move'} = $pretty_move; } else { @@ -265,6 +245,11 @@ sub make_pretty_move { return ($pos, $uci_move); } +sub is_chess960 { + my ($pos) = shift; + return (defined($pos->{'chess960'}) && $pos->{'chess960'}); +} + sub _pos_to_square { my ($row, $col) = @_; return sprintf("%c%d", ord('a') + $col, 8 - $row);