我有一个8乘8的棋盘,我正在尝试实施八皇后拼图。在我的游戏中,我已经制作了一个功能,可以检查女王的移动,一旦按下按钮,我的棋盘上就会有特定女王可以移动的所有行和列被关闭,这样就没有两个女王互相攻击。我陷入困境,但试图弄清楚如何在我的代码中关闭所有对角线按钮。
private JButton[][] Squares = new JButton[8][8];
for (int i = 0; i < Squares.length; i++) {
for (int j = 0; j < Squares[i].length; j++) {
if(Squares[i][j].getModel().isPressed()){
for (int x=0; x<8; x++){
Squares[i][x].setEnabled(false); //turns off column buttons
Squares[x][j].setEnabled(false); //turns off row buttons
//Squares[i][j+1].setEnabled(false);
//Squares[i+1][j-1].setEnabled(false);
}
一旦女王被放置在棋盘上,我需要做什么才能禁用所有对角线按钮?
编辑:我注意到如果我Squares[x][x].setEnabled(false);
那么它会给我两个对角线中的一个,但这只给对角线一次,点击第二个按钮后一切都会断开。
答案 0 :(得分:0)
您从[i][j]
开始,并在两行并行上继续前进(使用循环变量x
)。唯一棘手的部分是如何避免掉落板边缘。请注意,与行/列不同,您的对角线不一定有8个方块
使用与x
相同的基本循环来实现此目的的一种方法是 -
if (i+x < Squares.length && j+x < Squares[i].length)
Squares[i+x][j+x].setEnabled(false);
if (i-x >= 0 && j-x >= 0)
Squares[i-x][j-x].setEnabled(false);
if (i-x >= 0 && j+x < Squares[i].length)
Squares[i-x][j+x].setEnabled(false);
if (i+x < Squares.length && j-x >=0)
Squares[i+x][j-x].setEnabled(false);
答案 1 :(得分:0)
我不确定我是否收到你的问题。如果您正在寻找一种方法来选择所有对角线单元格,那么就知道那些单元格会出现在|i-j|
中(即绝对值)。这是一个代码,只要按下Squares[indx1,indx2]
,就会对对角线单元做一些事情......这有意义吗?
public static void pressed(int indx1,int indx2){
// Squares[indx1][indx2] is pressed
// Assign 1 to diagonal cells
for(int i=0;i<Squares.length;i++)
for(int j=0;j<Squares.length;j++)
if(Math.abs(indx1-i)==Math.abs(indx2-j))
Squares[i][j]=1;
}