2012-10-04 111 views
0

所以即時編程康威在GUI形式的生活遊戲。輸出不正確,我不知道爲什麼。這是處理「下一代」的代碼。編程康威的生命遊戲

for(int i=0; i < ROW; i++) { 
    for(int j=0; j < COL; j++) { 
     if(i > 0 && i < ROW-1 && j > 0 && j < COL -1) { 
      if(grid.getButton(i-1, j-1).getBackground() == Color.BLUE) liveNeighbor++; 
      if(grid.getButton(i-1, j).getBackground() == Color.BLUE) liveNeighbor++; 
      if(grid.getButton(i-1, j+1).getBackground() == Color.BLUE) liveNeighbor++; 
      if(grid.getButton(i, j-1).getBackground() == Color.BLUE) liveNeighbor++; 
      if(grid.getButton(i, j+1).getBackground() == Color.BLUE) liveNeighbor++; 
      if(grid.getButton(i+1, j-1).getBackground() == Color.BLUE) liveNeighbor++; 
      if(grid.getButton(i+1, j).getBackground() == Color.BLUE) liveNeighbor++; 
      if(grid.getButton(i+1, j+1).getBackground() == Color.BLUE) liveNeighbor++; 

      if(grid.getButton(i, j).getBackground() == Color.WHITE) { 
       if(liveNeighbor == 3) 
        newGrid.getButton(i, j).setBackground(Color.BLUE); 
       } else { 
        if(liveNeighbor > 3 || liveNeighbor < 2) 
         newGrid.getButton(i, j).setBackground(Color.WHITE); 
      } 
      liveNeighbor=0; 
     } 
    } 
} 

也許我錯過了一些東西,但我很確定這是正確的。有什麼建議麼?

+0

btw,藍色是活的,白色是死的。 getButton(i,j)方法也從2d數組列表[i] [j]中獲取JButton。 grid和newGrid是GridLayout窗體中的自定義JPanel,並添加了JButton。 – user1459976

+0

我看到你處理出生病例,但死亡病例呢? –

回答

3

這就是問題所在:

if(grid.getButton(i, j).getBackground() == Color.WHITE) { 
    if(liveNeighbor == 3) 
     newGrid.getButton(i, j).setBackground(Color.BLUE); 
    } else { 
     if(liveNeighbor > 3 || liveNeighbor < 2) 
      newGrid.getButton(i, j).setBackground(Color.WHITE); 
} 

您的代碼設置顏色,如果當前瓦片已經死了。如果它還活着,它永遠不會死。這裏的「商業邏輯」應該不知道什麼顏色 -

boolean currentlyAlive = grid.getButton(i, j).getBackground() == Color.BLUE; 
boolean aliveNextStep = (liveNeighbour == 3) || 
         (currentlyAlive && liveNeighbor == 2); 
newGrid.getButton(i, j).setBackground(aliveNextStep ? Color.BLUE : Color.WHITE); 

我還分開顯示部分的邏輯數據(布爾值的網格):我會爲寫這篇文章。

+0

我沒有使用你的建議解決方案,但我得到它的基礎上你的評論工作,不得不添加另一個在其他設置爲藍色。感謝您的反饋 – user1459976

+0

@ user1459976:出於興趣,您爲什麼不使用我的建議?我認爲閱讀起來更簡單,更容易,並且沿着從UI部分分離出「業務」部分的道路開始。 –

+0

我想我喜歡我使用的代碼是多一點線性?我覺得它錯過了一小塊,所以我想找到它,而不是取代整個事情。我也很少使用布爾變量。但我同意你的代碼更優雅一些,我想 – user1459976