Проблемы логики оператора IF + перемещение узла в сетке - PullRequest
0 голосов
/ 03 ноября 2019

В настоящее время я создаю головоломку со слайдами изображений 4x4, используя двумерный массив кнопок, размещаемых в Gridpane. Мой метод «скользить» по частям при щелчке - это вызов процедуры, которую я назвал buttonClick (), и использование операторов if для проверки, есть ли рядом с ней пустая кнопка. Если это так, позиции сетки этих двух меняются местами. Однако у меня возникли проблемы с правильной работой операторов IF. Я пытался использовать индексы Row и Column, чтобы определить, где находится пробел в сетке и нажата ли она рядом с кнопкой, но моя логика явно ошибочна. Некоторые части отказываются перемещаться, некоторые, которые не должны двигаться, заканчивают тем, что двигаются, и т.д. Что мне по существу нужно, это некоторые новые операторы IF, так что нажатие кнопки рядом с пробелом перемещается. * примечание - мои x и y противоположны тому, чем они должны быть по какой-то причине. Таким образом, х вертикальный, а у горизонтальный. Вот что у меня было для моей процедуры:

 public void buttonClick(Button[][] arr, int x, int y, WritableImage[][] newImage) {

    int temp;

    System.out.println("Button " + GridPane.getRowIndex(arr[x][y]) + "," + GridPane.getColumnIndex(arr[x][y]));
    System.out.println("Blank : " + GridPane.getRowIndex(arr[3][3]) + "," + GridPane.getColumnIndex(arr[3][3]));



    if (setWin == false) {


        if (x < 3) {
            if (GridPane.getColumnIndex(arr[x + 1][y]).equals(GridPane.getColumnIndex(arr[3][3]))) { //arr[3][3] = blank button
                System.out.println("run1");
                temp = GridPane.getRowIndex(arr[x][y]);
                GridPane.setRowIndex(arr[x][y], GridPane.getRowIndex(arr[3][3]));
                GridPane.setRowIndex(arr[3][3], temp);
            }
        }


        if (y < 3) {
            if (GridPane.getRowIndex(arr[x][y + 1]).equals(GridPane.getRowIndex(arr[3][3]))) {
                System.out.println("run2");
                temp = GridPane.getColumnIndex(arr[x][y]);
                GridPane.setColumnIndex(arr[x][y], GridPane.getColumnIndex(arr[3][3]));
                GridPane.setColumnIndex(arr[3][3], temp);
            }
        }

    }
}
...