14장
셀프체크
처음 클릭한 위치에 지뢰가 있다면 지뢰를 다른 곳으로 옮깁니다. 다른 곳에 옮기는 방법은 여러 가지입니다. 지뢰를 처음 만나는 빈칸에 넣을 수도 있고, 무작위로 칸을 찾아 보낼 수도 있습니다. 이 책에서는 조금 어렵게 처음 클릭한 위치의 주변 8칸 중 빈칸으로 보냅니다. 주변 8칸이 모두 지뢰라면 다시 주변 8칸을 탐색합니다. 재귀 함수를 배웠으니 재귀 함수를 이용해 찾겠습니다.
재귀 함수를 사용할 때는 항상 호출 스택의 최대 크기를 초과하지 않게 조심하세요. 또한, 연산량이 늘어나지 않도록 코드를 잘 짜야 합니다. 가로 10줄, 세로 10줄, 지뢰 99개로 시작할 때 문제없이 작동하면 성공입니다.
transferMine() 함수에 들어 있는 앞의 if 문 3개는 연산량을 줄이기 위한 장치입니다. 각각 이미 빈칸을 찾았는지(normalCellFound), rowIndex와 cellIndex가 범위를 초과하지는 않았는지, 이미 한 번 조사한 칸인지(searched)를 검사합니다.