Использование Stockfish Chess AI в Unity
Доброе утро. Я пытаюсь внедрить Stockfish в шахматную игру Unity. Мне сказали, что лучше всего использовать Spawn.Process Кто-нибудь знает о существующем коде, на который я могу посмотреть и взять в качестве ссылки?
Разные игровые состояния - лучший способ общения с ИИ?
Спасибо!
2 ответа
Если вы можете представить свое игровое состояние в нотации Форсайта-Эдвардса и прочитать алгебраическую нотацию, чтобы улучшить состояние своей доски, это должно сработать:
String GetBestMove(String forsythEdwardsNotationString){
var p = new System.Diagnostics.Process();
p.StartInfo.FileName = "stockfishExecutable";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
String setupString = "position fen "+forsythEdwardsNotationString;
p.StandardInput.WriteLine(setupString);
// Process for 5 seconds
String processString = "go movetime 5000";
// Process 20 deep
// String processString = "go depth 20";
p.StandardInput.WriteLine(processString);
String bestMoveInAlgebraicNotation = p.StandardOutput.ReadLine();
p.Close();
return bestMoveInAlgebraicNotation;
}
Несколько лет назад я использовал http://chessforeva.blogspot.com/2010/10/unity3d-chess-project.html в качестве отправной точки для моего приложения/игры для MacOS, iOS, Android, Windows Chess.
Он использует алгебраическую запись с использованием FEN, а мясо и картошка того, что вы хотите сделать, находятся в c0_4unity_chess.js и Scriptings.js. Кроме того, в StockFishCall.js под функцией Update() вы увидите функцию, аналогичную GetBestMove() выше, как Ruzihm упомянул об использовании ProcessLineIN() для "bestmove".
В скрипте есть функции c0_get_FEN(), c0_put_to_PGN() и set_pos().
Это должно помочь быть на вашем веселом пути!