ボタンの画像アイコンを更新する方法を知っている人はいますか?
問題は:
チェッカー ゲームを作成し、GUI を作成しています。AI を含むすべてが機能しますが、移動後に AI を呼び出したため、ボタンにチェッカーが表示されません。
- クリックされたボタン
- チェッカーがある特定のボタンをクリックします
- チェッカーが行かなければならない次の場所をクリックします
- すぐにAIを呼び出して行動させます。
私のボタンにはチェッカーの画像の ImageIcons があります。チェッカーが移動する必要がある次の場所をクリックすると、JPanel の JButton はその瞬間に更新されませんが、AI が移動して移動を終了するまで待機します。チェッカーがどこに行ったかわかりません。
3-4 Calls が次々と実行されると、AI が行った結果の動きのみが表示されますが、実装された actionListener を終了した後にすべてが更新されるため、私の動きは表示されません。
呼び出してみました:repaint(); 再検証(); 無効にする(); ボタンを含む JPanel 上。
ステップ 4 の前に、AI が移動する前に何を置いたかをユーザーが確認できるようにします。
else
{
//This is where the code starts
if ("White".equals(Red_Or_White.getText()))
{
//Meaning that it is white's turn, then
playerPlaysAMove(x, y, goingToGo_x, goingToGo_y);
}
if ("AI".equals(AI_Enabled.getText()))
{
//AI is enabled
AIMoves(board, "Red");
//the AI needs to play the position as if the AI was a red player,
//because the player must be white
}
}
両方の AI が同じラウンドでプレイしますが、AI の計算には約 1 分かかり、その際、actionListener (else ステートメントの後) を抜けた後にすべてのボタンを更新するため、AI がプレイするまでプレイヤーの動きはわかりません。 .
ボードは、JPanel に配置される 8x8 ボタンの配列です。
static void playerPlaysAMove(int save_x, int save_y, int moveTo_x, int moveTo_y)
{
if(save_x - moveTo_x == 1 || save_x - moveTo_x == -1)
{
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
else if (save_x - moveTo_x == 2 && save_y - moveTo_y == 2)
{
board[save_x-1][save_y-1].setIcon(null);
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
else if (save_x - moveTo_x == 2 && save_y - moveTo_y == -2)
{
board[save_x-1][save_y+1].setIcon(null);
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
else if (save_x - moveTo_x == -2 && save_y - moveTo_y == 2)
{
board[save_x+1][save_y-1].setIcon(null);
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
else if (save_x - moveTo_x == -2 && save_y - moveTo_y == -2)
{
board[save_x+1][save_y+1].setIcon(null);
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
}
基本的には、ユーザーの選択ボタンとユーザーの移動先ボタンの XY 座標を計算しました。正しい技かどうかのチェックもありますが、ここがメインの動きです。
XY 座標の差が 1 の場合、プレイヤーはジャンプではなく移動していることを意味し、XY 座標の差が 2 の場合、プレイヤーはジャンプしていることを意味します。また、元の XY 座標のボタンを null に設定する必要があります。つまり、アイコンが消えてから、新しい imageIcon を目的の XY 座標に配置します。
プレーヤーがジャンプしている場合は、ユーザーがピースを食べた場所も計算し、その imageIcon も null に設定する必要があります。
AI はまったく同じことを行いますが、AI は再帰関数を使用して XY 座標を計算し、最適な動きを計算します。
主な問題は、プレーヤーがプレーヤーであり、次に AI が計算し、再生し、プロセスの後に両方の結果を一緒に表示することです。AI が計算して再生する前に、画像アイコンを再描画させることは可能ですか? プレイヤーが何をプレイしたか、次に AI が何をプレイしたかをプレイヤーが確認できるようにするため