在面板阵列-Java上的象棋游戏中突出“法律动作”

时间:2015-02-14 21:46:13

标签: java swing multidimensional-array jpanel

这更像是一个逻辑问题,而不是语法,但我确信你们有比我更好的方法。所以我在一个板上有一些棋子(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;中的同一地点下方。

0 个答案:

没有答案