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 并要求 GUI 在 x,y 位置放置一个代表 X 类型棋子的按钮。我使用网格布局从 8x8 按钮矩阵中添加按钮。

好吧..这听起来对我有用..但它没有:S 照原样,当 A 吃 B 时,B 从板上消失了,但 A 永远不会被放置而不是 B.. 它保持不变.. 但是如果再次单击 A,显示可能运动的绿色按钮看起来好像 A 实际上在 B 中。

4

1 回答 1

1

如果 setCoordinates 改变了什么getX()getY()返回,那么以下语句的顺序是错误的:

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