uci: 支持 position fen moves 指令

原来是在 Position::set() 中
th->us = sideToMove;
现在转移到 position() 函数中,以解决 moves 执行指令后再执行 go 卡住的问题。
This commit is contained in:
Calcitem 2020-11-22 10:53:03 +08:00
parent 5c563ce72b
commit b56990d7c0
2 changed files with 3 additions and 5 deletions

View File

@ -238,7 +238,6 @@ Position &Position::set(const string &fenStr, Thread *th)
// 2. Active color // 2. Active color
ss >> token; ss >> token;
sideToMove = (token == 'b' ? BLACK : WHITE); sideToMove = (token == 'b' ? BLACK : WHITE);
th->us = sideToMove;
// 3. Phrase // 3. Phrase
ss >> token; ss >> token;

View File

@ -75,6 +75,8 @@ void position(Position *pos, istringstream &is)
while (is >> token && (m = UCI::to_move(pos, token)) != MOVE_NONE) { while (is >> token && (m = UCI::to_move(pos, token)) != MOVE_NONE) {
pos->do_move(m); pos->do_move(m);
} }
Threads.main()->us = pos->sideToMove;
} }
@ -314,13 +316,10 @@ string UCI::move(Move m)
/// UCI::to_move() converts a string representing a move in coordinate notation /// UCI::to_move() converts a string representing a move in coordinate notation
/// (g1f3, a7a8q) to the corresponding legal Move, if any. /// to the corresponding legal Move, if any.
Move UCI::to_move(Position *pos, string &str) Move UCI::to_move(Position *pos, string &str)
{ {
if (str.length() == 5) // Junior could send promotion piece in uppercase
str[4] = char(tolower(str[4]));
for (const auto &m : MoveList<LEGAL>(*pos)) for (const auto &m : MoveList<LEGAL>(*pos))
if (str == UCI::move(m)) if (str == UCI::move(m))
return m; return m;