Доступ к методу в классе, который создал класс, в котором вы сейчас находитесь - PullRequest
0 голосов
/ 08 апреля 2020

Здесь немного проблем. Итак, у меня есть два класса: GUIBuilder и класс, который имитирует игру жизни Конвея с использованием 2D-массивов. GUI создает сетку квадратов для выбранных пользователем размеров, а затем позволяет им выбрать, какие квадраты "живы" и "мертвы", чтобы начать, затем они указывают, сколько поколений будет работать симуляция, и запускают симуляцию запуска. кнопка. Сетка квадратов обновится, чтобы отразить новые границы, а также то, какие квадраты теперь «живы», а какие «мертвы» для каждого поколения.

Изначально я настроил класс жизни игры Конвея для распечатки. 2D-массив, который он создает для каждого поколения в качестве выходных данных, но теперь я хочу вызвать класс в GUI Builder, чтобы обновить сетку GUI квадратов, причем каждый квадрат имеет свой цвет, чтобы показать его статус вместо этих вывод на печать. В GUI нажимается кнопка для вызова класса Conway со спецификациями для моделирования, затем класс Conway запускает приостановку моделирования в конце каждого поколения, чтобы обновить GUI, чтобы отразить новое состояние моделирования.

Class Interaction I'm Thinking Of

Каждый раз, когда вызывается метод обновления в классе построителя GUI, возникает пауза, чтобы показать ход симуляции.

Я также использую JavaFX для создания GUI

Итак, вот код для события кнопки Start Simulation. Он вызовет метод в Conway, передавая 2D-массив всей стартовой вселенной

startSimulationButton.setOnAction(new EventHandler<ActionEvent>()
    {
        public void handle(ActionEvent event)
        {
            if(validateTextBox(genTextField))
            {
                int[][] universe = convertTo2DArray(simulationPane);
                int generations = Integer.parseInt(genTextField.getText());
                ConwayLife simStart = new ConwayLife();
                simStart.getGeneration(universe, generations);
            }
            else
            {
                instructionLabel.setText("Didn't put numbers in ya silly billy");
            }
        }
    });

Вот метод обновления GUI, который я хочу вызывать из класса Conway

private void updateSimulationPane(int[][] universe, int xUpdate, int yUpdate) throws InterruptedException
{
    clearSimulationGrid(simulationPane);
    int[] flatUniverse = Stream.of(universe).flatMapToInt(IntStream::of).toArray();
    for(int counter = 0; counter < (xUpdate*yUpdate); counter++)
    {
        Rectangle rect = new Rectangle(0, 0, squareDimensions, squareDimensions);
        if(flatUniverse[counter] == 1)
        {
            rect.setFill(Color.DARKGREEN);
        }
        else
        {
            rect.setFill(Color.GREY);
        }
        simulationPane.add(rect, (counter) % xInput, (counter) / xInput);
    }

    double leftAnchor = (xWindow / 2) - ((squareDimensions * xInput) / 2);          
    gridAnchorPane.setTopAnchor(simulationPane, 100d);
    gridAnchorPane.setLeftAnchor(simulationPane, leftAnchor);
    Thread.sleep(5000);
}

и, наконец, вот точка в классе Конвея, которую я хотел бы обновить GUI

    if(deadCells == i * j) //if there are no more alive cells
        {
            int[][] emptyArray = new int[0][0];
            /*
            //******Last Generation plus Empty set output*********
            System.out.println("Generation: " + counter);
            for(int elcounto = 0; elcounto < oldGeneration.length; elcounto++)
            {
                System.out.println(Arrays.toString(oldGeneration[elcounto]));
            }
            System.out.println("Generation: " + (counter + 1) + "\nSociety died out");
            System.out.println(Arrays.deepToString(emptyArray));
            //****************************************************
            */

            //call updateSimulationPane here 

            return emptyArray; //return an empty set to show that the society died out


        }
        /*
        //******Generation Check Output*********
        System.out.println("Generation: " + counter);
        for(int elcounto = 0; elcounto < oldGeneration.length; elcounto++)
        {
            System.out.println(Arrays.toString(oldGeneration[elcounto]));
        }
        System.out.println();
        //**************************************
        */

        //call updateSimulationPane here 

        oldGeneration = newGeneration; //make the new generation the old generation to show passing of a generation
        newGeneration = new int[oldGeneration.length + bounds][oldGeneration[0].length + bounds]; //em
    }
    return trim(oldGeneration);

Сторона Конвея сейчас довольно груба, но пока я могу перезвонить и обновить GUI Я смогу отработать все перегибы на этом конце. В основном просто хочу исправить взаимодействие с классом. Надеюсь, этого достаточно, чтобы понять, что я пытаюсь сделать.

...