<java>棋盘片运动</java>

时间:2012-11-19 18:36:04

标签: java swing chess

第一次询问n.n

我正在为拼贴做国际象棋(很早就上演),我在移动棋子方面遇到了问题。我会复制似乎给我带来麻烦的代码并解释:

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 coordinades,并检查是否没有活动的部分;如果是这样的话,选择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中。

1 个答案:

答案 0 :(得分:1)

如果setCoordinates正在更改getX()getY()返回的内容,则以下语句的顺序错误:

gameArray[x][y].setCoordinades(x,y);
gameArray[active.getX()][active.getY()]=null;