Получить содержимое ячейки на Gridpane - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь сделать настольную игру с использованием JavaFX.Игра - Carcassone.

Я решил использовать GridPane для рисования доски, чтобы я мог получить доступ с координатами x, y к каждой плитке, и это имеет смысл с логической доской, которая является HashMap, поэтомудля каждой позиции x, y я добавляю плитку в логическую доску, и она также добавляется в доску рисования (область сетки).

Но для каждой плитки, добавленной в GridPane, я хочу добавить "voidплитка "в соседних плитках, которые пусты.Давайте предположим, что зеленые плитки - это играемые плитки, синий - это смежные, а белый - остальная часть области сетки, в которой она пуста (пустое значение):

enter image description here Итак, новые плитки (зеленые) могут быть добавлены только к синим позициям, и для каждой зеленой зеленой плитки, если соседние пустые, они получают "синий".

Так что проблема в том, как узнать, пуста ли соседняя плитка.Я нашел эту функцию:

private boolean tileEmpty(int row, int column, GridPane gridPane) {
    Node result = null;
    ObservableList<Node> childrens = gridPane.getChildren();

    for (Node node : childrens) {
        if(GridPane.getRowIndex(node) == row && GridPane.getColumnIndex(node) == column) {
            result = node;
            break;
        }
    }
    return (result == null);
}

Но она дает мне исключение NullPointerException при создании сетки таким образом:

private void crearTauler() {
    GridPane _taulerVisual = new GridPane();
    _taulerVisual.setPrefSize(800,600);
    _taulerVisual.setAlignment(Pos.CENTER);
    _taulerVisual.setGridLinesVisible(true);
    _taulerVisual.setHgap(4);
    _taulerVisual.setVgap(3);
}

И это функция сумматора плиток, котораяв том же классе, что и другие функции:

public class myTile extends Imageview {...}

.

public void addVisualTile(myTile r, int x, int y) {
    myVisualTile rV = new myVisualTile(r);
    myVisualTile add = new myVisualTile();
    _taulerVisual.add(rV, x, y);

    // And this is the code I'd to make work:
    if (tileEmpty(x-1, y, _taulerVisual)) {
        _taulerVisual.add(add, x-1, y);
    }
    else if (tileEmpty(x+1, y, _taulerVisual)) {
        _taulerVisual.add(add, x+1, y);
    }
    else if (tileEmpty(x, y-1, _taulerVisual)) {
        _taulerVisual.add(add, x, y-1);
    }
    else if (tileEmpty(x, y+1, _taulerVisual)) {
        _taulerVisual.add(add, x, y+1);
    }
}

Так что дело в том, что я не могу выполнять итерации в области сетки, поскольку все дочерние элементы, кроме некоторых, пусты.Любая идея, чтобы решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...