0

我正在尝试制作一款名为ratsuk的游戏。它就像国际象棋,但仅限于骑士。我对骑士自动取款机的移动有疑问。有时,当我按下按钮时,其他骑士会出现它不应该(我不想这样做)我很确定它的动作侦听器有问题,它的运行方法一次不止一次。但我就是想不通。我很绝望,请帮助我。我对Java真的很陌生。

这是我需要帮助的部分。

public void caballo(final int row, final int column) {

    final JButton current = mesa[row][column];

    current.setIcon(image);
    panel.repaint();

    acciones(row, column, current);
}

public void acciones(final int row, final int column, final JButton current) {

    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < WIDTH; j++) {
            mesa[i][j].addActionListener(e(row, column, current));
        }
    }
}

public ActionListener e(final int row, final int column,
        final JButton current) {
    return new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            if (tienebotton(row + 2, column + 1)) {
                if (e.getSource() == mesa[row + 2][column + 1]) {

                    current.setIcon(null);
                    caballo(row + 2, column + 1);
                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row + 2, column - 1)) {
                if (e.getSource() == mesa[row + 2][column - 1]) {

                    current.setIcon(null);
                    caballo(row + 2, column - 1);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row - 2, column - 1)) {
                if (e.getSource() == mesa[row - 2][column - 1]) {

                    current.setIcon(null);
                    caballo(row - 2, column - 1);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row - 2, column + 1)) {
                if (e.getSource() == mesa[row - 2][column + 1]) {

                    current.setIcon(null);
                    caballo(row - 2, column + 1);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }

            if (tienebotton(row + 1, column + 2)) {
                if (e.getSource() == mesa[row + 1][column + 2]) {

                    current.setIcon(null);
                    caballo(row + 1, column + 2);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row - 1, column + 2)) {
                if (e.getSource() == mesa[row - 1][column + 2]) {

                    current.setIcon(null);
                    caballo(row - 1, column + 2);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row + 1, column - 2)) {
                if (e.getSource() == mesa[row + 1][column - 2]) {

                    current.setIcon(null);
                    caballo(row + 1, column - 2);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row - 1, column - 2)) {
                if (e.getSource() == mesa[row - 1][column - 2]) {

                    current.setIcon(null);
                    caballo(row - 1, column - 2);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
        }

    };
}

欢迎任何形式的建议。

这是我放的 tienebotton,所以它没有给我 Array Index Out of Bounds Exception :

public boolean tienebotton(int row, int column) {
        return (row >= 0 && row < HEIGHT && column >= 0 && column < WIDTH);

    }
}
4

1 回答 1

0

一个改进将是每个后续的 if 声明之后

if (tienebotton(row+2, column+1)) {...}

改成

else if ...

这将确保只有其中一个被解雇。

于 2013-06-20T21:56:38.807 回答