написать шахматный интерфейс Android с графическим интерфейсом без ndk - PullRequest
0 голосов
/ 13 января 2019

Я ищу способ запустить шахматный движок (например, Stockfish ) без использования NDK и JNI.

Основная проблема, с которой я столкнулся, заключается в том, как запустить программное обеспечение (как в приглашении) и сохранить его работоспособным, пока оно отправляет мне результаты.

Второй и более конкретный вопрос - как установить на устройство установленные шахматные движки, если это возможно (и если есть способ их использовать).

ниже я подробно расскажу, чего хочу достичь

Я не знаю, возможно ли то, что я хочу сделать, поэтому я объясню: когда вы устанавливаете приложение с шахматным движком, например Komodo или Stockfish , когда вы выполнив их, вы увидите сообщение о том, что вам необходимо загрузить приложение с графическим интерфейсом, чтобы оно работало как полностью шахматная программа. Из этих сообщений каждый может сделать вывод, что приложение с графическим интерфейсом может использовать установленный в устройстве движок.

Есть ли способ увидеть установленные на устройстве движки, чтобы отобразить их в окне выбора, и «извлечь» эти движки из приложений, или найти их расположение на устройстве, или выполнить приложения через другое путь похож на намерения?

Проблема в том, что шахматный движок - это программное обеспечение, которое должно постоянно работать, чтобы использовать позицию; вы посылаете им позицию, которая вам нравится, чтобы они ее использовали, и по мере того, как они анализируют, они продолжают посылать вам свои данные и продолжают делать это, пока вы не отправите им команду остановиться.

Если вы запустите Stockfish в командной строке Windows, вы ясно увидите, о чем я говорю. Когда он выполняется, он ожидает команды; им вы отправляете команду "uci"; затем вы отправляете команду типа "position fen", затем отправляете "go infinite", и они начинают вычислять и продолжают отправлять вывод о своих вычислениях.

Итак, я хотел бы создать приложение, которое будет использовать установленные движки в устройстве.

До сих пор я не обнаружил, как это сделать. Мне пришлось скачать исходный код приложения DoidFish и проанализировать, что они сделали ... и они получили исходный код stockfish и выполнили его с JNI.

Но тогда у меня в приложении был бы фиксированный и ограниченный список движков, и я бы не использовал движки без открытого источника, такие как Komodo и Houdini. Я вижу, что приложение Chessbase может использовать несколько движков, как вы можете видеть на скриншотах на странице приложения. Они также показали движок Komodo в списке (как я купил приложение, чтобы увидеть) ... У меня установлен Komodo ... Так что они должны были сделать по-другому ...

Поскольку я не мог разгадать тайну, я скачал скомпилированную версию armfish и попробовал выполнить ее с помощью метода exec Runtime, например:

Runtime rt = Runtime.getRuntime();
String[] commands = {enginePath, "uci"};

Process proc = rt.exec(commands);

Однако движок - это программное обеспечение, которое вы должны выполнить, и оно должно работать, пока вы отправляете ему команды, как я объяснил ранее, но таким образом я выполнил движок, и он отправил мне вывод ( Я получил с BufferedReader), а затем прекратил выполнение.

Извините за такой большой текст, не могли бы вы помочь мне разобраться?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Чтобы двигатель работал, мне пришлось использовать ProcessBuild для создания процесса.

Для этого я использовал следующий код:

    process = processBuilder.start(); // To run the engine

    //
    // Start the thread that will handle the responses of the engine.
    //
    Thread responseThread = new Thread(runnableobject);
    responseThread.start(); // Then treat the response in this file

Чтобы получить установленный движок, я использовал намерение "intent.chess.provider.ENGINE"

0 голосов
/ 13 января 2019

Если вам интересно, как Stockfish представляет себя различным шахматным графическим приложениям, посмотрите на Исходный код Stockfish Chess .

Обратите внимание, что вам потребуется понимание Bound Services и AIDL , которые сложные темы для Android. Таким образом, пока конкретный шахматный движок поддерживает interface ccc.chess.engines.IChessEngineService, соответственно, приложение GUI может использовать тот же механизм для связи с ним.

Хотя это будет описывать, как устанавливается соединение, как вы знаете, протокол между движком и графическим интерфейсом будет Универсальный шахматный интерфейс

...