2013-10-28 3 views
3

나는 지뢰 찾기 게임을 디자인하고 있는데, 보드 열림 방법에 대한 알고리즘을 찾을 수 없습니다. Minesweeper를 사용한 적이 있다면, 처음 클릭하면 타일이 많이 표시됩니다. 그 뒤에있는 알고리즘은 무엇입니까?지뢰 찾기 보드 "열림"

+0

그냥 좋은 '회귀. 사용자가 square (x, y)를 클릭합니까? 'show (x, y)'. 함수 내에서 사각형을 보여줍니다. * 사각형이 비어 있으면 *,'show (x-1, y)','show (x + 1, y)','show (x, y-1))'와'show (x, y + 1)'를 사용한다. (대각선도 가능 합니다만, 지금은 기억이 안납니다.) –

+0

영원한 루프에주의하십시오. – ChronoTrigger

답변

3

flood-fill과 유사하지만 주변 폭탄이없는 셀 ("0"또는 값 없음)과 주변 셀에만 해당됩니다.

일부 의사 코드 :이가 '정상'홍수 채우기 알고리즘 다른 방법

floodFill(cell) 
    if !cell.isOpen 
    cell.open() 
    if cell.hasNeighbouringBombs 
     for each neighbour n of cell 
     floodFill(n) 

참고 :

floodFill(cell) 
    if cell.hasNeighbouringBombs && !cell.isOpen 
    cell.open() 
    for each neighbour n of cell 
     floodFill(n) 

의 차이에 대한 이유는 예에서 볼 수 있습니다. 을 감안할 때 : 따라서 우리는 우리가 현재 셀을 연 후에 만 ​​hasNeighbouringBombs을 확인해야합니다,

1 1 2 
2 0 3 
1 2 3 

정상적인 일 만 0 채울 것이다, 그러나 우리는 위의 모든 채우려. 이 위의 알고리즘의 처리 될 것 - 0이 아닌 값 셀에 클릭을 시작하면, 다른 세포는 (적어도 게임의 대부분의 버전에) 개방되지 않도록

참고.

+0

그리고 광산을 클릭하기 시작하면 광산이 다른 위치로 이동하므로 처음 클릭 할 때 죽지 않습니다. – Teepeemm

+0

@Teepeemm 게임에 따라 시작하려면 광산을 클릭하게되어 기쁘게 생각합니다. 그러나 첫 번째 클릭을 기반으로 게임을 생성하는 것이 더 나은 아이디어처럼 보입니다 (그러나 분명히 더 복잡합니다). – Dukeling

+0

@Dukeling''오픈 '이란 무엇을 의미하는지 잘 모르겠다. psuedocode에서'open'의 다른 용도에 대해 자세히 설명해 주시겠습니까? – LazySloth13

관련 문제