2017-11-14 6 views
-1

Im 지뢰 찾기 게임에서의 프로그래밍. 끝 부분에 꽤 귀엽다. 마지막 부분에만 문제가 있습니다.이웃을 찾는 지뢰 찾기 알고리즘?

게임에서 (그림 참조) 왼쪽 상단 필드를 클릭하면 광산이없는 곳의 필드가 바뀌고 테두리에는 숫자가 표시됩니다.

이 필드를 찾고 주위를 돌리거나 표시하는 알고리즘은 무엇입니까? 녹색 원의 필드 알고리즘입니까? 나는 처음부터 설계를하고있는 중이 야

MineSweeper

+5

나는 [Flood fill] (https://en.wikipedia.org/wiki/Flood_fill) 알고리즘과 비슷한 것으로 추측합니다. –

+0

도움을 주셔서 감사합니다. 더 쉬운 알고리즘이 있는지 알고 계십니까? – naikjones

+0

이 문제를 해결하기 위해 [this] (https://en.wikipedia.org/wiki/Flood_fill#Stack-based_recursive_implementation_.28fourway.29)보다 간단한 알고리즘을 찾기가 어려울 것입니다. – SirGuy

답변

1

, 나는 당신이 도움이되기를 바랍니다. ,

1 1 1 
1 9 1 
1 1 1 
다음

9 폭탄을 나타냅니다 :

내 게임 분야는 정수의 NXN 행렬 인 경우

,

0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

나는 이러한 3 × 3 행렬을 적용하여 해당 행렬에 폭탄을 배치 모델링 할 수 있습니다 아마 더 큰 정수를 사용해야 할 것입니다. 그리고 제가 적용을 말할 때, 나는 위치를 선택하고 그 3x3 행렬의 숫자로 그것을 증가시킵니다. 그럼 1 폭탄을 두자.

0 1 1 1 0 
0 1 9 1 0 
0 1 1 1 0 
0 0 0 0 0 
0 0 0 0 0 

첫 번째 폭탄 옆에 다른 폭탄을 놓자. 그리고의 조금 영리하게하고 세포의 초기 값이

0 1 2 2 1 
0 1 9 9 1 
0 1 2 2 1 
0 0 0 0 0 
0 0 0 0 0 

9.의 어딘가에 아래 다른이 시간을 배치하자 때 위치를 증가시키지.

0 1 2 2 1 
0 1 9 9 1 
0 1 3 3 2 
0 0 1 9 1 
0 0 1 1 1 

그래서 오른쪽 하단에서 숫자를 공개하려고합니다. 내 알고리즘은 무엇이되어야합니까?

function revealCell(location) 
{ 
    if(cellValueIsRevealed(location)) { 
     return; 
    } 
    var value = revealValueOfCell(location); 
    if(value > 0) 
    { 
     return; 
    } 

    foreach(neighbor in neighbors) 
    { 
     revealCell(neighbor); 
    } 
} 

하나의 방법은 논리 값의 매트릭스를 구현하는 것, cellValueIsRevealed 메소드를 구현하려면 : 여기에 내 걸릴 것입니다.

+0

인접한 두 개 이상의 0이있을 때 무한 재귀에 대한 보호를 추가합니다. – interjay

+0

@interjay 무한 재귀를 피하기위한 바로 가기 동작을 추가했습니다. –