java - 我该如何用java制作这个Conways Life程序

标签 java conways-game-of-life

我正在用java制作康威的生命游戏程序,并试图将其从命令行版本更改为GUI。从命令行,我刚刚打印了一个显示世代的数组( block 和闪光灯等对象显示为一系列 1 和 0,其中空白,在 GUI 中我将其显示为正方形(白色正方形为但我遇到困难的是,当我创建另一种方法(替换打印数组的方法)来检查网格数组时,如果有零,则正方形会从白色到蓝色,反之亦然。康威的生命规则在一个独立的单独类中处理,该方法所做的只是在规则更改数组后,该方法检查它。

规则在一个类的方法中完成,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。

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

关于java - 我该如何用java制作这个Conways Life程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8730373/

相关文章:

java - 获取图片位置 - Phonegap 相机

python - Pygame 生命游戏运行缓慢

C++:一个类可以有它自己类型的对象吗?

c - hashlife alg 如何在 Golly 永远持续下去?

java - java 按日期分组

java - StringUtils.isBlank() 与 String.isEmpty()

java - Spring 中使用 Pagination/Page 的表别名中的 JPA 未知列

java - 如何测试执行另一个可运行的可运行

C++/Linux - 绘制到窗口

c - (生命游戏)如何在不检查矩阵外部的情况下循环遍历矩阵的外层,同时检查邻居?