2011-12-25 3 views
3

Game of Life 클론을위한 토로 이달 어레이를 만들고 싶습니다. 어떻게하면 환상으로 만들 수 있습니까?토 로이드 배열 만드는 법?

제가 생각할 수있는 최선의 해결책은 첫 번째 행과 열이 마지막 행과 열과 동일하다는 것입니다.

다른 아이디어?

편집 : 일부 사람들은 Game of Life가 무엇인지 모를 수 있습니까? 이것은 배열 된 셀을 가진 작은 게임입니다. 이 세포들은 죽거나 살아있을 수 있으며 서로 반응 할 수 있습니다. 셀이 현재 솔루션의 가장자리에 도달하면 모든 죽은 셀의 행/열로 충돌합니다. 지금 내가하고 싶은 것은 셀이 가장자리에 도달하면 다른 쪽에서 팝업된다는 것입니다.

enter image description here

내 코드는 지금과 같은 어떤 (아래 이미지 참조)

#region check adjacent squares 
     if (grid[x - 1,y - 1] == true) 
      adjacentsquares++;    
     if (grid[x, y - 1] == true) 
      adjacentsquares++;    
     if (grid[x + 1, y -1] == true) 
      adjacentsquares++;    

     if (grid[x - 1, y] == true) 
      adjacentsquares++; 
     if (grid[x + 1, y] == true) 
      adjacentsquares++; 

     if (grid[x - 1, y + 1] == true) 
      adjacentsquares++; 
     if (grid[x, y + 1] == true) 
      adjacentSquares +=1; 
     if (grid[x + 1, y + 1] == true) 
      adjacentSquares +=1; 
#endregion 

지금 필요한 것은 내가 인접 셀을 검사 할 때마다 (즉 밖으로 될 것이다 정규 배열의 경계)에서 다른 쪽을 검사합니다.

위치가 [10,0] 인 경우. 인접한 셀 [9, max], [10, max][11, max]을 확인해야합니다.

+0

입니다. 'maxX == 0'과 'maxY == 0'을 의미합니다. 그렇지 않으면 그 두 점 '== 0'만이 도형이되지 않습니다. – Oded

+0

의사 코드의 그 부분과 관련된 것은 첫 번째 행과 열이 마지막 행과 열과 동일하다는 것입니다. (이것을 더하면 더 명확 해 질 것입니다) –

+0

샘플을 추가하십시오 –

답변

4

나는 내가 바로 당신의 생각을 잘 모르겠지만, 당신은 왜 당신의 배열에 대한 액세스를 캡슐화하는 방법을 작성하지 않고 그 x와 y 모두의 int가 전달됩니다

array[x % max, y % max] 

를 액세스 이 방법에.

조금 더 설명하면 다음과 같습니다.
array[sizeX, sizeY]과 같은 배열이 있다고합시다. 어레이의 첫 번째 위치에 액세스하려는 경우 array[0, 0]라고 말하면 array[0, 0] 또는 array[sizeX, sizeY]과 같이 할 수 있습니다. X 및 Y 치수 (토 로이드 배열)를 감싸기 때문입니다. 따라서 나머지 연산자를 사용할 수 있습니다, 항상 이런 식으로 배열에 액세스 :

array[desiredXPosition % sizeX, desiredYPosition % sizey] 

또는 더 나은 아직, 당신을 위해이 작업을 자동으로 수행하는 방법을 만들 수 있습니다.

+0

좀 더 자세히 설명해 주시겠습니까? 나는 아직도 프로그래밍에 익숙하지 않고 당신이 의미하는 것을 정말로 이해하지 못합니다. –

+0

나는이 권리가 있는지 보자. 이 방법으로 설정할 때 외부 행/열의 셀은 동일한 값을 갖게됩니까? –

+0

당신이 무슨 뜻인지 모르겠지만 대답은 아마도 예입니다.예를 들어 배열 [2, 2]로 구현 된 토 로이드에서 배열 [0, 0]과 배열 [2, 2]는 값을 설정하든 값을 읽든 동일한 요소를 참조해야합니다. 마찬가지로 배열 [3, 2]와 배열 [1, 0]은 동일한 요소를 참조해야합니다.이 경우 "X 축"과 "Y 축"둘 다에서 토 로이드를 돌고 있기 때문입니다. 희망이 도움이! –

4

배열을 인덱싱 할 때마다 모듈을 사용하여 정렬하십시오. 내가 size_x하지 max_x을 그들에게 전화

array[ x % size_x, y % size_ y] 

참고. 허용되는 최대 x 색인은 size_x - 1