java - 八皇后 - 对角线运动

标签 java algorithm n-queens

我有一个 8 x 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); 然后它会给我两个对角线之一,但是这只给对角线一次在点击第二个按钮后,一切都崩溃了。

最佳答案

我最近回答了一个关于 SO 的类似问题。

您可以查看我的代码以响应 the similar question here .

但基本上,如果您的女王的位置是[a][b]。 并且您想检查另一个位置的坐标 [x][y] 是否在对角线上。

  • y-x == b-a 如果单元格在同一条右对角线上。
  • x+y == a+b 如果您的单元格在同一条左对角线上。

希望这对您有所帮助。

关于java - 八皇后 - 对角线运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26938198/

相关文章:

algorithm - 如何在AMPL中写入 "not equal to"或设置变量参数的条件?

python - 我的 N-Queens 解决方案有什么问题?

prolog - 提示了解解决皇后区的精彩程序

java - 是否可以在返回类型上添加注释

java - 'Static' 关键字有什么作用?

java - android中的日期选择器显示问题

java - Android MVP 发布 Presenter 的正确方法

c++ - 为什么 MCARDS 中需要前突变

javascript - 为什么 Array.isArray 算法是 ES5 执行类型检查?

java - 带有一维数组的 Java 中的 N 皇后拼图