개요
이 개발일지는 1편에서 정리한 정답지 비교 개발 방식을 두 번째 프로그램인 지뢰찾기에 적용한 과정을 기록한다. 새 프로그램 이름은 GMines 로 정하였다.
1편의 계산기와 다른 점은 정답지를 얻는 방법이다. 사용자 PC 에 지뢰찾기 앱이 설치되어 있지 않아, 공개된 규칙 문서와 별도로 만든 확인용 프로그램을 정답지로 사용하였다.
그림 1은 GMines 의 기능 목록과 구현 여부를 나타낸다. 그림 2는 작업 순서와 날짜를 나타낸다.
-
- 1왼쪽 열기·오른쪽 표시
- 2가운데 클릭 주변 열기
- 3숫자 칸 클릭 주변 열기
- 4F2 새 게임
- 5양쪽 동시 클릭
-
- 1최고 기록
- 2통계
- 3어두운 테마
- 4키보드 칸 이동
-
- 1초급·중급·고급 판
- 2사용자 지정 판 화면
- 3첫 클릭 빈 칸 보장
- 4빈 칸 연쇄 열기
- 5주변 지뢰 수 숫자
-
- 1깃발
- 2물음표·켜고 끄기
- 3지뢰 카운터
- 4시간 999초
- 5패배 표시
- 6승리 자동 깃발
- 지뢰찾기 규칙 조사와 원본 앱 설치 여부 확인
- 정답지 두 가지 준비(규칙 도출 사례, 확인용 프로그램)
- GCalc 저장소 틀을 그대로 복사하여 시작
- 규칙 구현과 정답 비교
- 화면 구현과 Windows 실행 파일·설치 파일 생성
- ☑ 규칙 조사와 원본 앱 미설치 확인 (1절)
- ☑ 규칙 도출 정답 24건 작성 (3.2절)
- ☑ 확인용 프로그램과 3,000판 교차 비교 (3.4절)
- ☑ 규칙 구현, 정답 24건 일치 (3.3~3.4절)
- ☑ 화면 구현 (3.5절)
- ☑ Windows 실행 파일과 설치 파일 생성 (3.6절)
- ☑ 기능 마인드맵과 개발 시퀀스 작성 (개요)
- ☐ 원본 앱 결과와 직접 비교 (4절)
- ☐ 사용자 지정 판 화면, 최고 기록 (4절)
1. 정보수집
1.1 지뢰찾기 규칙 조사
지뢰찾기는 판 위에 숨겨진 지뢰를 밟지 않고 나머지 칸을 모두 여는 게임이다. 칸을 열면 그 칸을 둘러싼 8칸 안의 지뢰 수가 숫자로 나온다.
규칙은 Wikipedia 의 지뢰찾기 문서 두 편에서 조사하였다. 표 1은 GMines 에 채택한 규칙과 근거를 나타낸다.
표 1 채택한 규칙
| 규칙 | 내용 |
|---|---|
| 판 크기 | 초급 9×9 지뢰 10개, 중급 16×16 지뢰 40개, 고급 30×16 지뢰 99개 |
| 첫 클릭 | 처음 누른 칸과 그 주변 8칸에는 지뢰를 두지 않음 (Windows Vista 이후 방식) |
| 숫자 | 열린 칸 주변 8칸의 지뢰 수 |
| 연쇄 열기 | 숫자가 0 인 칸을 열면 주변 칸을 이어서 연다 |
| 표시 | 오른쪽 클릭마다 없음, 깃발, 물음표, 없음 순서로 바뀜 |
| 주변 열기 | 숫자 칸 주변의 깃발 수가 숫자와 같으면 깃발 없는 주변 칸을 한 번에 연다 |
| 지뢰 카운터 | 지뢰 수에서 깃발 수를 뺀 값. 깃발이 많으면 음수 |
| 승리·패배 | 지뢰가 아닌 칸을 모두 열면 승리. 지뢰를 열면 패배하고 모든 지뢰와 잘못 꽂은 깃발을 보여 줌 |
자료 Wikipedia 「Minesweeper (video game)」, 「Microsoft Minesweeper」 (참고문헌 1, 2)
1.2 원본 앱 설치 여부
사용자 PC 에서 지뢰찾기 앱을 찾았으나 설치되어 있지 않았다. Windows 10 과 11 에서 지뢰찾기는 기본 앱이 아니며 앱 스토어에서 따로 받아야 한다.
따라서 계산기처럼 원본 앱에 같은 입력을 넣어 정답을 수집하는 방법은 쓸 수 없었다.
2. 전략수립
2.1 정답지 두 가지
원본 앱 대신 정답지 두 가지를 준비하였다. 그림 3은 두 정답지와 GMines 의 비교 관계를 나타낸다.
첫째 정답지는 규칙 문서에서 손으로 도출한 사례 24건이다. 지뢰 위치를 정해 둔 작은 판에서 어떤 칸을 누르면 판이 어떻게 보여야 하는지를 적었다.
둘째 정답지는 확인용 프로그램이다. 확인용 프로그램은 판 전체를 처음부터 끝까지 반복해서 검사하는 단순한 방식으로 열린 칸을 계산한다. GMines 와 다른 방식으로 같은 규칙을 계산하므로, 두 결과가 다르면 어느 한쪽에 오류가 있다.
자세한 정보
확인용 프로그램을 두는 방법은 1편의 ArtCraft 사례에서 가져왔다. ArtCraft 는 느리지만 단순한 CPU 그림 합성기를 기준으로 두고 빠른 GPU 그림 합성기의 결과를 비교한다.
규칙 도출 사례는 사람이 직접 적은 기대값이므로 사람의 실수가 섞일 수 있다. 이번 작업에서도 지뢰 8개로 둘러싸인 3×3 판의 기대값을 처음에 잘못 적었다. 가운데 칸을 열면 승리하여 지뢰 8개에 깃발이 꽂혀야 하는데, 깃발 없이 적었다. 실행 전에 발견하여 고쳤다.
2.2 GCalc 저장소 틀 재사용
GCalc 의 저장소 틀을 그대로 복사하여 시작하였다. 표 2는 재사용한 항목과 바꾼 항목을 나타낸다.
표 2 GCalc 에서 재사용한 항목
| 항목 | GCalc | GMines |
|---|---|---|
| 규칙 문서 | AGENTS.md | 같은 문서에서 정답지와 금지 항목만 수정 |
| 계층 | 3계층(수, 계산 규칙, 화면) | 2계층(게임 규칙, 화면) |
| 점검 도구 | 계층 검사, 점수표 생성 | 같은 도구에서 정답 파일 이름과 비교 항목만 수정 |
| 하한선 | 62건 | 24건 |
| 창 없는 실행 | –keys “1/7=” | –size 5×5 –mines “0,0” –actions “L4,4” |
| 설치 파일 | NSIS 스크립트 | 같은 스크립트에서 이름만 변경 |
2.3 화면 모양
원본 지뢰찾기의 웃는 얼굴 단추와 숫자판 그림은 복제하지 않았다. 화면은 GCalc 와 같은 밝은 색을 쓰고, 단추와 글자는 「새 게임」, 「지뢰 010」, 「시간 001」처럼 한글로 표시하였다.
3. 예시. 지뢰찾기 제작 과정과 결과
3.1 작업공간 준비
GCalc 작업공간을 복사하여 GMines 작업공간을 만들었다. 게임 규칙 모듈(gmines-core), 화면 모듈(gmines-app), 점검 도구(xtask)의 세 부분으로 나누었다.
3.2 규칙 도출 정답 24건 작성
사례마다 판 크기, 지뢰 위치, 누르는 순서, 기대하는 판 모양, 게임 상태, 지뢰 카운터를 한 줄로 적었다. 그림 4는 사례 하나를 나타낸다.
오른쪽 위 칸은 주변에 지뢰가 없어 0 이므로 주변 칸이 이어서 열린다. 지뢰 줄에 붙은 칸에는 2 또는 3 이 표시되고, 지뢰 줄 왼쪽은 닫힌 채로 남는다.
자세한 정보
표 3 정답 24건의 분류
| 분류 | 건수 | 예 |
|---|---|---|
| 열기와 연쇄 열기 | 6 | flood-win, flood-boundary, step-win |
| 깃발과 물음표 | 6 | flag, question, mark-cycle, flag-blocks-open |
| 패배 표시 | 5 | open-mine, wrong-flag-shown, lose-shows-mines |
| 주변 열기 | 4 | chord-win, chord-wrong-flag, chord-short |
| 숫자 | 2 | number-three, eight |
| 범위 밖 입력 | 1 | out-of-range |
3.3 규칙 구현
판, 열기, 표시, 주변 열기, 승리와 패배 판정을 게임 규칙 모듈에 구현하였다. 화면 모듈은 마우스 클릭을 명령 4가지(열기, 표시, 주변 열기, 새 게임)로 바꾸어 규칙 모듈에 전달한다.
지뢰는 첫 클릭 뒤에 배치한다. 처음 누른 칸과 주변 8칸을 제외한 칸에서 무작위로 고른다.
3.4 정답 비교 결과
규칙 도출 정답 24건을 실행하여 24건 모두 일치하였다. 하한선은 24로 정하였다.
확인용 프로그램과는 무작위 판 3,000개에서 열린 칸을 비교하여 모두 일치하였다. 판 크기는 가로 5~30칸, 세로 5~24칸이고 지뢰 수는 칸 수의 4분의 1 이하이다.
표 4 GMines v1.0.0.0 시험 결과
| 시험 | 결과 |
|---|---|
| 규칙 도출 정답 | 24건 중 24건 일치 |
| 확인용 프로그램 교차 비교 | 무작위 판 3,000개 일치 |
| 첫 클릭 보호 | 초급·중급·고급 399판에서 첫 칸이 빈 칸 |
| 무작위 명령 시험 | 300판 × 300번 입력, 멈춤 0건, 시간 999초 이하 |
| 계층 검사·정적 검사 | 위반 0건, 경고 0건 |
| 기능 목록 | 20항목 중 14항목 구현 |
3.5 화면 구현
그림 5는 초급 판에서 첫 칸을 연 화면이고, 그림 6은 지뢰를 밟아 패배한 화면이다. 패배하면 누른 지뢰는 붉은 칸, 나머지 지뢰는 검은 점, 잘못 꽂은 깃발은 붉은 ✕ 로 표시된다.


3.6 Windows 실행 파일과 설치 파일
실행 파일 GMines.exe(약 4.3 MB)와 설치 파일 GMines_v1.0.0.0_Setup.exe(약 2.1 MB)를 만들어 PC 의 GMines_v1.0.0.0 폴더에 저장하였다.
4. 결과 및 남은 일
본 작업에서는 원본 앱이 없는 조건에서 규칙 도출 사례와 확인용 프로그램을 정답지로 두고 지뢰찾기 GMines 를 제작하였다.
규칙 도출 정답 24건이 모두 일치하였고, 확인용 프로그램과의 비교 3,000판도 모두 일치하였다. GCalc 의 저장소 틀을 그대로 재사용하여 규칙 문서, 점검 도구, 설치 파일 스크립트를 새로 만들지 않았다.
원본 앱과 직접 비교하지 못한 점은 한계로 남는다. 사용자 지정 판의 크기 범위와 첫 클릭 보호의 예외 처리는 가정한 값이다.
표 5 열린 항목
| 번호 | 내용 | 다음 작업 |
|---|---|---|
| G-01 | 원본 앱 결과와 비교하지 못함 | 앱 설치 후 고정 판 재현 방법 조사 |
| G-02 | 사용자 지정 판 범위(가로 9~30, 세로 9~24)는 가정 | 원본 앱 범위 확인 |
| G-03 | 지뢰가 많아 주변 8칸을 비울 수 없을 때 첫 칸만 비우는 처리는 가정 | 원본 앱 확인 |
참고문헌
- Wikipedia, “Minesweeper (video game)”. https://en.wikipedia.org/wiki/Minesweeper_(video_game)
- Wikipedia, “Microsoft Minesweeper”. https://en.wikipedia.org/wiki/Microsoft_Minesweeper
- ArtCraft Team, “PhotoCraft AGENTS.md”, GitHub storytold/photocraft, 2026. https://github.com/storytold/photocraft