私はJavaでチェスプログラムを書いています。これまでのところ順調に進んでいますが、UI の更新に問題があります。
以下は、JPanel を拡張するクラス ChessBoard のコード スニペットです。これは、ユーザーが移動しようとすると呼び出されます。
if ( isLegalMove( aMove ) ) { // If the move's legal
makeMove( aMove ); // Make that move
select = null; // Reset some info
drag = null;
toggleTurn(); // Change turns
generateMoves( 0 ); // Get legal moves for CPU
repaint(); // Redraw board
thread.run(); // Run chess algorithm
}
スレッドは、ChessBoard のインスタンスで "run" を呼び出しています。動きを見つけるアルゴリズムは、動きを決定するのに数秒かかる場合があります。
ユーザーの動きを反映するように UI を更新してから、アルゴリズムを実行したいと考えています。そのため、別のスレッドでアルゴリズムを実行します。しかし、私の UI は、コンピューターも動き出すまで更新されません。
したがって、ユーザーがスペースをクリックしてそこにピースを送ると、画面がフリーズし、突然ピースが移動しましたが、コンピューターも移動し、再びプレーヤーの番になります。
どんな助けでも大歓迎です。