繁体   English   中英

如何使用Java制作此Conways Life程序

[英]How do I go about making this Conways Life program in java

我正在用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() ”。 尝试运行该方法时。

制作一个单独的线程来执行生活游戏并更新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。

显然,您也需要添加一些代码来停止它:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM