0

nnの周りに初めて尋ねる

私はコラージュのためにチェスをしています(まだかなり初期段階です)が、ピースの移動に問題があります..問題を引き起こしていると思われるコードをコピーして説明します:

public void choosePiece(int x, int y){
    GUI.recolour();
    if(active==null){
        if(gameArray[x][y].isWhite()==whiteActive){
            active=gameArray[x][y];
            GUI.displayMoves(showMoves(active));
        }
    }else{
        if(gameArray[x][y]==null){
            gameArray[x][y]=active;
            gameArray[x][y].setCoordinades(x,y);
            gameArray[active.getX()][active.getY()]=null;
            active=null;
        }else if(gameArray[x][y].isWhite()==whiteActive){
            active=gameArray[x][y];
            GUI.displayMoves(showMoves(active));
        }else{
            if(whiteActive)
                blackDied.add(gameArray[x][y]);
            else
                whiteDied.add(gameArray[x][y]);
            gameArray[x][y]=active;
            gameArray[x][y].setCoordinades(x,y);
            gameArray[active.getX()][active.getY()]=null;
            active=null;
        }
        guiRefresh();
    }
}

ユーザーはボード上のピース (JButton グリッド) をクリックすると想定されており、GUI クラスはその JButton の座標を使用して GameHandler クラスを呼び出します。

このコードは、JButton グリッドからこれらの x;y 座標を取得し、アクティブな部分がないかどうかをチェックすることになっています。その場合、gameArray[x][y] (ピースの配列からのピース) をアクティブなピースとして選択し、JButton グリッドで JButton の背景を緑に変更して利用可能な動きを表示します。

アクティブなピースが既にある場合は、x;y ターゲットが空であるか、別のピースであるかを確認する必要があります。

最初のケースでは、アクティブなピースを空のスペースに配置します。ターゲット x;y に別のピースがある場合、そのピースが他の色のものかどうかを確認します。

同じ色の場合、アクティブな駒が変わり、その動きが表示されます。それが他の色の場合、そのピースを「殺し」、アクティブなピースに置き換えます。

ピースによって到達可能なもの以外の他のすべての空のボタンは無効になっていることに注意してください。最後の guiRefresh() メソッドは、gameArray 全体を通過し、X 型のピースを表すボタンを x、y 位置に配置するよう GUI に要求します。8x8 ボタン マトリックスからボタンを追加するグリッド レイアウトを使用しました。

ええと..それは私にはうまくいくように聞こえます..それでもうまくいきません:S 現状では、A が B を食べると、B はボードから消えますが、B の代わりに A が配置されることはありません..同じままです..しかし、 A をもう一度クリックすると、A が実際に B にあるかのように、可能な動きを示す緑色のボタンが表示されます。

4

1 に答える 1

1

setCoordinates が whatgetX()getY()return を変更している場合、次のステートメントの順序が間違っています。

gameArray[x][y].setCoordinades(x,y);
gameArray[active.getX()][active.getY()]=null;
于 2012-11-19T18:47:30.467 に答える