【问题标题】:<Java> Chessboard pieces movement [closed]<Java> 棋盘棋子移动 [关闭]
【发布时间】:2012-11-19 18:36:04
【问题描述】:

第一次询问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 坐标,并检查是否没有活动片段;如果是这样,则选择 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 中一样。

【问题讨论】:

  • 欢迎 SO,不知道,为了更好的帮助,请尽快发布 SSCCE,简短,可运行,可编译
  • 这段代码无法编译。 gameArray[x][y] 几乎每一行都有不同的类型。
  • .setCoordinades 拼写错误...除非任何对象类型的方法也拼写错误...
  • @thatidiotguy:这取决于active 的类型。但是……是的。
  • @durron597 啊,这可以解释。然而,这是一个相当本地化的问题。我会建议更积极的调试。

标签: java swing chess


【解决方案1】:

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

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

【讨论】:

  • 我写了长篇演讲,有光!哦,我现在看到了哈哈哈:P
  • @IñakiGuastalli 看起来您将新的棋子位置设置为空,而不是旧位置。
  • 是的..现在纠正它,我会看看之后问题如何发展,谢谢!
  • 它实际上立即纠正了问题!非常感谢!
  • +1 用于阅读不可编译的代码并找到解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多