Я создаю игру, чтобы скользить кусочки головоломки по доске. Прямо сейчас у меня есть список кнопок, и я заполняю его al oop, все остальные функции работают, однако после однократного перемещения плитки, когда я нажимаю на нее снова, я получаю исходный индекс сетки, а не обновленный индекс.
Я думаю, что это связано с тем, что требуется tmp каждый раз, когда я нажимаю кнопку, а не ее текущий обновленный индекс из списка. Я попытался изменить tmp в обработчиках событий на puzzle.indexOf (button), но тогда индекс каждой кнопки становится равным 31.
public class Main extends Application {
Stage game;
Scene scene;
GridPane grid;
List<Button> tiles;
Button button;
@Override
public void start(Stage primaryStage) throws Exception {
game = primaryStage;
GridPane board = new GridPane();
List<Button> puzzle = new ArrayList<>();
for(int i = 0; i < 32; i++) {
puzzle.add(button = new Button(String.valueOf(i+1)));
button.setPrefSize(150,150);
int tmp = i;
button.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
if(nextToEmpty(puzzle, tmp) == true){
swapButton(puzzle, puzzle.get(tmp), puzzle.get(findEmptyTile(puzzle)));
} else {
System.out.println("Error");
}
}
});
}