# Configuration
my $server = "freechess.org";
-my $target = "Sesse";
+my $target = "22";
# my $engine = "/usr/games/toga2";
my $engine = "wine Rybkav2.3.2a.mp.w32.exe";
my $telltarget = undef; # undef to be silent
my ($last_move, $last_tell);
my $last_text = '';
my $last_told_text = '';
+my ($board_waiting, $board_calculating);
uciprint("uci");
}
uciprint("setoption name UCI_AnalyseMode value true");
+uciprint("setoption name Preserve Analysis value true");
uciprint("setoption name NalimovPath value c:\\nalimov");
uciprint("setoption name NalimovUsage value Rarely");
uciprint("setoption name Hash value 1024");
$line =~ tr/\r//d;
if ($line =~ /^<12> /) {
my $fen = style12_to_fen($line);
- uciprint("stop");
- uciprint("position fen $fen");
- uciprint("go infinite");
+
+ # if this is already in the queue, ignore it
+ next if (defined($board_waiting) && $fen eq $board_waiting);
+
+ # if we're already chewing on this and there's nothing else in the queue,
+ # also ignore it
+ next if (!defined($board_waiting) && defined($board_calculating) &&
+ $fen eq $board_calculating);
+
+ # if we're already thinking on something, stop and wait for the engine
+ # to approve
+ if (defined($board_calculating)) {
+ uciprint("stop");
+ $board_waiting = $fen;
+ } else {
+ # it's wrong just to give the FEN (the move history is useful,
+ # and per the UCI spec, we should really have sent "ucinewgame"),
+ # but it's easier
+ uciprint("position fen $fen");
+ uciprint("go infinite");
+ }
%uciinfo = ();
$last_move = time;
parse_ids(@ids);
}
+ if ($line =~ /^bestmove/) {
+ if (defined($board_calculating)) {
+ uciprint("position fen $board_waiting");
+ uciprint("go infinite");
+
+ $board_calculating = $board_waiting;
+ $board_waiting = undef;
+ }
+ }
}
sub parse_infos {