1

Java で Conway の Game of Life プログラムを作成しており、コマンド ライン バージョンから GUI に変更しようとしています。コマンドラインから、世代を示す配列を印刷しました (ブロックやウィンカーなどのオブジェクトは、空白の一連の 1 と 0 として表示され、GUI では四角として表示されます (白い四角は空白とそうでない場所の青い四角.しかし、私が立ち往生しているのは、グリッド配列をチェックする別のメソッド(配列を出力するメソッドを置き換える)を作成するときです.ゼロがある場合、四角形は白から青、およびその逆. コンウェイの生命規則は、独立した別のクラスで処理され、このメソッドが行うのは、規則によって配列が変更された後、このメソッドがチェックすることだけです。

ルールはあるクラスのメソッドで実行され、GUI コンポーネントは別のクラスで実行されます。しかし、私は両方のインスタンスが必要なので、どうすればそれを行うことができますか?

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()は静的コンテキストから参照できません」と表示されます。メソッドを実行しようとしたとき。

4

1 に答える 1

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 を更新することを忘れないでください。

明らかに、それを停止するコードも追加する必要があります:)

于 2012-01-04T16:46:45.657 に答える