2013-02-20 4 views
0

내가 올바른 방향으로 가고 있는지 잘 모르겠다. 나는 모든 "정물"세포 배열, 즉 내 코드를 만들었다. 벌집, 블록, 보트 및 로프. 그러나, 조작되고 세포의 죽음과 출생을 포함한다고 생각되는 준비에 대해서는 문제가 있습니다.Game of Life Problems

지금은 셀을 먼저 만들고 규칙에 해당하는 사람을 죽이는 중입니다 (주변 이웃이 총합이 1보다 작거나 같거나 4보다 큰 경우).

내가 지금 가고있는 일은 그것이 어떻게되는지 잘 작동하지 않습니다. 나는 내 코드 아래에 일부 이미지가 포함됩니다 : 이미지에 관해서는

public class Untitled { 
    public static void main(String[] params){ 
     Life life = new Life(); 
     String[][] list = life.readGame(); 

     life.print(list); 
     System.out.println(); 

     for(int i = 1; i <= 5; i++){ 
      list = life.run(list); 
      life.print(list); 
      System.out.println(); 
     } 
    } 
} 

class Life { 
    public String[][] readGame(){ 
     String[][] array = { 
       { "-","-", "-", "-", "-", "-","-"}, 
       { "-","-", "-", "-", "-", "-","-"}, 
       { "-","-", "-", "x", "-", "-","-"}, 
       { "-","-", "-", "x", "-", "-","-"}, 
       { "-","-", "-", "x", "-", "-","-"}, 
       { "-","-", "-", "-", "-", "-","-"}, 
       { "-","-", "-", "-", "-", "-","-"} 
     }; 
     return array; 
    } 

    public void print(String[][] array){ 
     for(int x = 0; x < array.length; x++){ 
      for(int y = 0; y < array[x].length; y++){ 
       System.out.print(array[x][y]); 
      } 
      System.out.println(); 
     } 
    } 

    public String[][] run(String[][] array){ 
     populateCells(array); 
     System.out.println("Populated:\n"); 
     print(array); 
     killCells(array); 
     System.out.println("Killed:\n"); 
     print(array); 
     return array; 
    } 

    public int amountOfNeighbors(String[][] array, int x, int y){ 
     int amount = 0; 

     for(int x1 = -1; x1 <= 1; x1++){ 
      if(x + x1 >= 0 && x + x1 < array.length){ 
       for(int y1 = -1; y1 <= 1; y1++){ 
        if(y + y1 >= 0 && y + y1 < array[x1 + x].length){ 
         if(!(x1 == 0 && y1 == 0) && !array[x1 + x][y1 + y].equals("-")){ 
          amount++; 
         } 
        } 
       } 
      } 
     } 
     return amount; 
    } 

    public void populateCells(String[][] array){ 
     int neighbours; 

     for(int x = 0; x < array.length; x++){ 
      for(int y = 0; y < array[x].length; y++){ 
       neighbours = amountOfNeighbors(array,x,y); 

       if(neighbours == 3){ 
        array[x][y] = "x"; 
       } 
      } 
     } 
    } 

    public void killCells(String[][] array){ 
     int neighbours; 

     for(int x = 0; x < array.length; x++){ 
      for(int y = 0; y < array[x].length; y++){ 
       neighbours = amountOfNeighbors(array,x,y); 

       if(neighbours <= 1 || neighbours >= 4){ 
        array[x][y] = "-"; 
       } 
      } 
     } 
    } 
} 

을, 여기에 간단한 깜박이 구조의 어떤 세포의 인구 및 삭제 후 발생합니다

1

2

3

+0

생명의 경기 (콘웨이의 게임)의 중복 가능성을 알고 - 방법 세포 이웃에 대한 확인] (http://stackoverflow.com/questions/8364301/the-game-of-lifeconways-game-how-to-check-for-cell-neighbours) –

답변

4

run()에 전화 할 때마다 원래 보드의 복사본을 만들어 원본 보드에있는 셀을 수정할 때 해당 복사본을 사용하여 각 셀의 상태를 확인하십시오.

그렇지 않으면 셀을 업데이트 할 때마다 의도하지 않게 셀 주변의 상태가 변경됩니다.

이 생명의 게임처럼 게임 보드를 포함하는 시뮬레이션에서 매우 일반적인 버그입니다 - 그래서 지금 당신이 그것을 조심 :)

+3

또는 3 및 4 상태를 보드에 표시는 제거되거나 추가되어야 함. – Dukeling

+1

^이것도 작동하며 기본적으로는 같습니다 (+1). 필자는 사용자 정의 상태 스왑 코드를 작성하는 대신 내장 된 배열 복사 기능을 사용할 수 있기 때문에 여러 상태를 갖는 대신에 복사를 권장합니다. – Cam

+0

"원래 보드의 셀을 수정할 때 각 셀의 상태를 확인하십시오"라는 의미를 명확히 할 수 있습니까? – user123

관련 문제