チェスエンジンの iPhone への移植に成功しました。移植は難しくありません。一般的なチェス エンジンのほとんどは、Universal Chess Interface Protocol または Chess Engine Communication Protocol を採用しています。各プロトコルの詳細については、ウィキペディアを参照してください。
ここで、オープン ソースの UCI チェス エンジンの 1 つを使用し、C または C++ でコンパイルするとします。XCode は C および C++ をネイティブにサポートしているため、ソースを XCode にコピーするだけでコンパイルできます。
次のフェーズは、エンジンをインターフェースに接続することです。繰り返しますが、これは難しくありません。プロトコル コマンドをエンジンに送信する必要があります。エンジンは結果を標準出力に返します。UNIX の pipe() を使用して結果をパイプする必要があります。詳細については、iPhoneの他のスレッド
Fork() を参照してください。
例:
engine_loop がエンジンのゲーム ループであると仮定します (すべてのエンジンにループが必要です)。
engine_loop(int fd[])
{
dup2(fd[1], STANDARD_OUTPUT);
while(true)
{
printf("e4\n"); // This is dumb, we always make the same move, but you get the idea
}
}
my_objective_c_function()
{
int fd[2];
pipe(fd);
engine_loop(fd);
char buffer[1024];
read(fd[0], buffer, 1024);
// buffer == "e4"
// Send "e4" to the interface
}
コード フラグメントは、エンジンからインターフェースに結果を送信する方法を示しています。ここで、逆の方法を実行する必要があります。これは上記のコードと非常によく似ています。実際のシナリオでは、接続が確立されたら、UCI コマンドを送信する必要があります。例を示します。
ucinew
isready
go infinite
stop
UCI チェス エンジン プロトコルのドキュメントをよくお読みください。必要になります。