Использование 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().

Это должно помочь быть на вашем веселом пути!

Другие вопросы по тегам