X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=Position.pm;h=c3dbccaedde8b026a9585410c64134798e650d04;hp=272cadb78d2124275556e16df5bc7403b19cbe6d;hb=5a9dbd3f72666ce02396c30d1b74dae3ab32d40b;hpb=65aa4e3d31851a0b504f55ec9907b4fe4f9f8966 diff --git a/Position.pm b/Position.pm index 272cadb..c3dbcca 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; @@ -50,6 +51,40 @@ sub start_pos { return $class->new("<12> rnbqkbnr pppppppp -------- -------- -------- -------- PPPPPPPP RNBQKBNR W -1 1 1 1 1 0 dummygamenum $white $black -2 dummytime dummyincrement 39 39 dummytime dummytime 1 none (0:00) none 0 0 0"); } +sub from_fen { + my ($class, $fen) = @_; + my ($board, $toplay, $castling, $ep_square, $halfmove_clock, $fullmove_clock) = split / /, $fen; + + my $pos = {}; + $board =~ s/(\d)/"-"x$1/ge; + $pos->{'board'} = Board->new(split /\//, $board); + $pos->{'toplay'} = uc($toplay); + + if ($ep_square =~ /^([a-h])/) { + $pos->{'ep_file_num'} = ord($1) - ord('a'); + } else { + $pos->{'ep_file_num'} = -1; + } + + $pos->{'white_castle_k'} = ($castling =~ /K/) ? 1 : 0; + $pos->{'white_castle_q'} = ($castling =~ /Q/) ? 1 : 0; + $pos->{'black_castle_k'} = ($castling =~ /k/) ? 1 : 0; + $pos->{'black_castle_q'} = ($castling =~ /q/) ? 1 : 0; + $pos->{'time_since_100move_rule_reset'} = $halfmove_clock // 0; + $pos->{'player_w'} = 'white'; + $pos->{'player_b'} = 'black'; + $pos->{'white_clock'} = 0; + $pos->{'black_clock'} = 0; + $pos->{'move_num'} = $fullmove_clock // 0; + $pos->{'last_move_uci'} = undef; + $pos->{'last_move'} = undef; + $pos->{'prettyprint_cache'} = {}; + $pos->{'tbprobe_cache'} = {}; + + bless $pos, $class; + return $pos; +} + sub fen { my $pos = shift; @@ -131,6 +166,7 @@ sub to_json_hash { 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'};