Игра жизни, рекуррентная функция, пробелм - PullRequest
0 голосов
/ 05 апреля 2020

У меня проблема с реализацией моей Игры Жизни в Java.

В GUI У меня есть кнопки, которые определяют начальное состояние игры (осциллятор, планер и т. Д. c), затем, используя Action Listener, я установил первую доску и показал ее.

Затем у меня есть функция, которая подсчитывает соседей моей ячейки и устанавливает цвета моих ячеек. Но у меня есть проблема, когда я хочу повторить игру n раз, потому что я не знаю, как установить интервал времени.

В данный момент я вижу не каждый шаг игры, а только последний.

Ниже мой ActionListener:

private ActionListener buttonsListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
            if (source == button1)area = setButton1(getBoardWidth(), getBoardHeight());
            if (source == glider) area = setGlider(getBoardWidth(), getBoardHeight());
            if (source == oscilator) area = setOscilator(getBoardWidth(), getBoardHeight());

            setBoard(area, board);

        }
    };

Функция setBoard() занимает массив целых чисел с 0 и 1 и преобразование его в массив JButton[][] с цветами.

Я попытался использовать переопределенный метод run(), который включает функцию startTheGame(), которая проверяет окрестность и устанавливает массив целых чисел. Мне нужно сделать это несколько раз, но я не могу установить интервалы времени.

 @Override
    public void run() {
            startTheGame(area);
            setBoard(area, board);
    }

1 Ответ

0 голосов
/ 05 апреля 2020

Вы должны использовать этот таймер расписание .

Таким образом, вы должны определить пользовательский TimerTask следующим образом:

import java.util.TimerTask;

public class UserTimerTask extends TimerTask{
    @Override
    public void run() {
       startTheGame(area);
       setBoard(area, board);
    }
}

И затем оборачивая ваш код следующим образом:

// daemon means, background. If every task is a demon task, the VM will exit
Bolean isDaemon = false;
Timer timer = new Timer("nameOfThread",isDaemon);

TimerTask task = new UserTimerTask();

// Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay
// both parameters are in milliseconds
timer.schedule(task,0,1000);
...