这更像是一个逻辑问题,而不是语法,但我确信你们有比我更好的方法。所以我在一个板上有一些棋子(JLabel)(JPanel上的11x11 JPanels网格)。我试图强调可能的动作"对于这些作品(例如,他们可以在移动中穿过多少个面板)非常类似于许多在线国际象棋游戏。我有一个逻辑,检查运动是否遵循规则,并且它运作完美,我似乎无法弄清楚如何立即找到所有这些合法行动并使用它们。
这是我用来检查移动是否合法的代码:
public void movePieces(MouseEvent me)
{
MouseEvent e = me;
if (turnCount%2 == 1 && pieceCheck[(e.getY()/yInc)][(e.getX()/xInc)])
{
if (playerOne && (logic[(e.getY()/yInc)][(e.getX()/xInc)] == 0 || logic[(e.getY()/yInc)][(e.getX()/xInc)] == 2 || logic[(e.getY()/yInc)][(e.getX()/xInc)] == 4))
{
otherCount = logic[(e.getY()/yInc)][(e.getX()/xInc)];
tempX = e.getX();
tempY = e.getY();
paintPossible(tempX, tempY);
turnCount++;
}
if (!playerOne && (logic[(e.getY()/yInc)][(e.getX()/xInc)] == 1 || logic[(e.getY()/yInc)][(e.getX()/xInc)] == 3 || logic[(e.getY()/yInc)][(e.getX()/xInc)] == 5))
{
otherCount = logic[(e.getY()/yInc)][(e.getX()/xInc)];
tempX = e.getX();
tempY = e.getY();
turnCount++;
}
}
else if ((turnCount%2 == 0 && logic[(e.getY()/yInc)][(e.getX()/xInc)] == -1 && !pieceCheck[(e.getY()/yInc)][(e.getX()/xInc)]) && (Math.abs(tempX - e.getX()) <= xInc && (Math.abs(tempY - e.getY()) <= yInc) || ((Math.abs(tempX - e.getX()) <= 2*xInc) && (Math.abs(tempY - e.getY()) < yInc/4)) || ((Math.abs(tempX - e.getX()) < xInc/4) && (Math.abs(tempY - e.getY()) <= 2*yInc))))
{
panels[(e.getY()/yInc)][(e.getX()/xInc)].add(pieces[otherCount]);
logic[(e.getY()/yInc)][(e.getX()/xInc)] = otherCount;
pieceCheck[(e.getY()/yInc)][(e.getX()/xInc)] = true;
pieceCheck[tempY/yInc][tempX/xInc] = false;
panels[tempY/yInc][tempX/xInc].setBackground(veryDarkGray);
panels[tempY/yInc][tempX/xInc].setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
playerOne = !playerOne;
turnCount++;
}
....
}
基本上是第一个if语句,当你第一次点击一个片段时,里面是什么,然后如果轮到你了,那么它会把那个片段设置为下一个要放下的片段,并抓住它的XY坐标。 其他 - 如果然后由于我的turnCount的旋转而在下次点击时激活,并确保没有你点击的部分,并且该空间在某个像素的#像素范围内在你搬家之前。
我需要在你可以移动的地方进行相同的有效性检查,并将其应用于一个单独的方法,该方法将循环遍历作为我的板的JPDnel的2D阵列并为有效的移动着色。该方法将被称为&#34; paintPossible(tempX,tempY)&#34;是,并且在&#34; if&#34;中的同一地点下方。