我如何在java中制作这个Conways Life程序

时间:2012-01-04 16:37:56

标签: java conways-game-of-life

我正在用Java制作一个Conway的生命游戏程序,我正在尝试将它从命令行版本更改为GUI。从命令行我刚刚打印出一个显示代数的数组(块和闪烁的对象显示为一系列的1和0是空白的,在GUI中我将它显示为正方形(白色方块为它不是空白和蓝色方块。但我陷入困境的是当我制作另一个方法(它取代了打印数组的方法)来检查网格数组时,如果有零则则方形从Conway的Life规则在一个独立的类中处理,并且所有这个方法都是在规则改变了这个方法检查它的数组之后。

白色到蓝色,反之亦然。

规则在一个类中的方法中完成,GUI组件在另一个类中完成。但是既然我需要两个实例,我将如何去做呢?将这两个类合并(所有的GUI类都进入了Life类,将它们嵌入一些,我完全坚持做什么

public void runGUI() {
    int x = getX(), y = getY();

    x /= squareSize;
    y /= squareSize;
    for (int i = 0; i < LifeData.grid.length; i++) {
        for (int j = 0; j < LifeData.grid[i].length; j++) {
            if (LifeData.grid[i][j] == 0)
                l.setCell(x, y, l.getCell(x, y) + 1);
            else
                l.setCell(x, y, l.getCell(x, y) - 1);
            this.repaint();
        }
    }
}

这就是我现在改变它的原因但是在编译它时说“非静态变量grid无法从静态上下文引用”而且“非静态方法runGUI()无法引用来自静态背景“。尝试运行该方法时。

1 个答案:

答案 0 :(得分:0)

创建一个单独的线程来执行生命游戏并更新GUI。

像这样的东西

public class GameExecutor implements Runnable {

  private static final int DELAY = 1000;

  private GameOfLife game;
  private boolean stop = false;
  private Gui gui;

  public GameExecutor(Gui gui, GameOfLife game) {
    this.gui = gui;
    this.game = game;
  };

  public void run(){
    game.start();

    while (!stop) {
      game.step(); //execute a step
      gui.update(game.getState());
      try {
        Thread.sleep(DELAY);
      } catch (InterruptedException e) {}
    }
  }

}

在启动时在线程中启动它并将其传递给你的gui。不要忘记在正确的Swing线程中更新gui。

显然你还需要添加一些代码来阻止它:)