지뢰찾기(MineSweeper) with JavaFX

2018. 7. 20. 00:06Programming/Java

지뢰찾기(MineSweeper)

1. 제품 설명

지뢰찾기를 한 번도 실행시켜보지 않은 사람은 아마 없을 것이라 봅니다. (요즘 어린 친구들은 뭔지 모를수도 있습니다..)

가려져있는 타일을 하나씩 누르면서 지뢰를 찾아가는 게임인데, 게임 이름은 지뢰찾기인 주제에 진짜로 지뢰를 클릭하면 게임 오버가 됩니다. 정식 이름은 MineSweeper로, 올바른 번역은 "지뢰제거"입니다.

지뢰는 전부 랜덤하게 숨겨져 있으며, 좌클릭으로 타일을 까볼 수 있고, 우클릭으로 해당 타일이 지뢰일지 아닐지를 표시해둘 수 있습니다. 지뢰가 아닐 것 같은 공간은 좌클릭을, 지뢰라고 의심되는 공간은 우클릭을 해가면서 지정된 개수의 지뢰를 전부 찾아낼 때까지 반복합니다. 지뢰 근처에 있는 타일은 모두 숫자를 표시합니다. 이 숫자는 해당 타일에 인접해 있는 지뢰가 몇개 매장되어 있는가를 의미합니다.

현재 (2018. 08. 14) 기준 ver 0.12

2. 제작 계기

심심할 때 가끔 지뢰찾기를 하는 편인데, 원래 윈도우 기본게임이었던 지뢰찾기가 윈도우 7을 기점으로 기본게임에서 빠지게 되었죠. 윈도우 스토어에서 MineSweeper라는 앱을 받아야만 할 수 있었는데, 급기야 이 놈이 부분유료화까지 되어버립니다. 1회성 구매 방식도 아니고, 광고 하나 차단하자고 한달에 7500원 정도를 내라니, 말도 안 되는 처사라고 생각했습니다. (차라리 구매방식이면 구매라도 했을 텐데요)

프로젝트를 뭐라도 해야하는 시기였는데, 이렇게 되니 JavaFX로 지뢰찾기를 만들어봐도 좋겠다 싶었습니다. 게임의 알고리즘 자체는 간단하니 시도해볼만 하다 싶더군요. 그래서 만들었습니다. 전반적으로 윈도우의 기본 지뢰찾기와 거의 유사하며, 몇가지 점들(제가 일일이 재연하기 귀찮았던 부분들..)을 제외하고선 어느 정도 게임의 구실을 합니다.

3. 사용법

저 말고도 이미 다른 사람들이 지뢰찾기를 만들기도 했고, 윈XP 시절의 지뢰찾기도 어렵지 않게 구할 수 있으므로 따로 배포할 수 있도록 빌드하지 않았습니다. 그래도 지금보다 버전이 좀 업그레이드 되면 jar로 만들어서 업로드하는 것도 고려하고 있습니다.

하단의 링크에서 소스코드 확인이 가능합니다. 별 거 없는 코드입니다만 혹시 참조하고 싶으신 분들은 확인해보세요.

4. 후기

나름 MVC라는 제작 패턴을 따라해보고 싶었는데, 이런 공학적 요소에 약한지라 만들다보니 점점 MVC의 원칙이 깨졌습니다. 모델은 데이터의 처리를 담당해야 맞는데, 어쩌다보니 컨트롤러까지 자꾸 건드리고 있더군요. 결과적으로 코드는 이상없이 돌아가는데, 어떻게 해야 완벽한 MVC 패턴에 맞출 수 있을지 잘 모르겠습니다. 공부가 더 필요한 부분이라 봅니다.

5. 다운로드

https://github.com/zerobell-lee/MineSweeperJavaFX (소스코드)

MineSweeperJavaFX.jar

(실행파일)

주의사항 : PC에 JAVA가 설치되어 있어야만 합니다. 권장 버전은 최소 1.8입니다.