第一次询问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中。
答案 0 :(得分:1)
如果setCoordinates正在更改getX()
和getY()
返回的内容,则以下语句的顺序错误:
gameArray[x][y].setCoordinades(x,y);
gameArray[active.getX()][active.getY()]=null;