2012-01-04 14 views
1

我正在用java編寫一個Conway的Game of Life程序,並試圖將它從命令行版本更改爲GUI。在命令行中,我剛剛打印了一個顯示世代的數組(像block和blinkers這樣的對象顯示爲一系列1和0,它們是空白的,在GUI中,我將它顯示爲正方形(白色方框表示爲空白和藍色的正方形)但是當我製作另一種方法(取代了打印數組的方法)時,如果存在一個零,那麼方格會從白色到藍色,反之亦然,康威的人生規則是在獨立的一個單獨的課程中處理的,而且所有這些方法都是在規則改變了這個方法後檢查它的數組後才做的。在一個類中的方法中,GUI組件在另一個類中完成,但由於我需要兩個實例,我將如何去做這件事?,將兩個類(所有的GUI類合併到Life中,embe d他們一些如何,我完全被卡住就做什麼我該如何着手製作java中的這個Conways 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

這是用於家庭作業嗎? – asawyer 2012-01-04 16:40:28

+1

你能不能把數組傳給你的GUI,然後在繪圖時讀取它?或者在Rules類上有一個getter來獲取數組,然後在GUI類中訪問它。 – 2012-01-04 16:41:07

+0

發佈您迄今爲止的一些代碼,我們可能能夠更好地指出您朝着正確的方向發展。這聽起來像是你正確的方式,但只是陷入如何獲得信息到GUI層。 – cdeszaq 2012-01-04 16:47:02

回答

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。

顯然你需要添加一些代碼來阻止它:)

相關問題