본문으로 건너뛰기

Dev.

규칙 문서 기반 정답지를 이용한 지뢰찾기 제작

원본 앱이 없는 조건에서 규칙 문서 도출 사례 24건과 확인용 프로그램을 정답지로 두고 지뢰찾기 GMines 를 제작하였다. 정답 24건과 교차 비교 3,000판이 모두 일치하였다.

2026. 10. 30

개요

이 개발일지는 1편에서 정리한 정답지 비교 개발 방식을 두 번째 프로그램인 지뢰찾기에 적용한 과정을 기록한다. 새 프로그램 이름은 GMines 로 정하였다.

1편의 계산기와 다른 점은 정답지를 얻는 방법이다. 사용자 PC 에 지뢰찾기 앱이 설치되어 있지 않아, 공개된 규칙 문서와 별도로 만든 확인용 프로그램을 정답지로 사용하였다.

그림 1은 GMines 의 기능 목록과 구현 여부를 나타낸다. 그림 2는 작업 순서와 날짜를 나타낸다.

가지를 누르면 아래 단계가 펼쳐지고 다시 누르면 접힘 · 번호는 「핵심 1-2」 꼴
    • 1왼쪽 열기·오른쪽 표시
    • 2가운데 클릭 주변 열기
    • 3숫자 칸 클릭 주변 열기
    • 4F2 새 게임
    • 5양쪽 동시 클릭
    • 1최고 기록
    • 2통계
    • 3어두운 테마
    • 4키보드 칸 이동
GMines구현 14 / 202026.10.30. 기준
    • 1초급·중급·고급 판
    • 2사용자 지정 판 화면
    • 3첫 클릭 빈 칸 보장
    • 4빈 칸 연쇄 열기
    • 5주변 지뢰 수 숫자
    • 1깃발
    • 2물음표·켜고 끄기
    • 3지뢰 카운터
    • 4시간 999초
    • 5패배 표시
    • 6승리 자동 깃발
1구현1미구현초록 가지 게임 규칙 · 파란 가지 부가 기능 · 항목 출처 docs/parity.md · 숫자는 2차 기준 구현 수/전체
그림 1. GMines 기능 마인드맵 (2026.10.30. 기준, 20항목 중 14항목 구현)

묶음 작업 이름을 누르면 하위 작업이 펼쳐짐 · 막대에 마우스를 올리면 기간과 상태 표시
지난 기간
오늘 10.30
ID
작업 이름
기간
시작
완료
진행률
선행
2026.10.10.262026.11.11.0211.09

1
1일
10.30
10.30
100%
✓ 해결 완료
1.1
규칙 조사·정답 24건
1일
10.30
10.30
100%
✓ 해결 완료
1.2
규칙 구현·교차 검증
1일
10.30
10.30
100%
1.1
✓ 해결 완료
1.3
egui 화면·Windows 빌드
1일
10.30
10.30
100%
1.2
✓ 해결 완료
M1
다음 범위 결정
0일
10.31
10.31
0%
다음 범위 결정
2
v1.0.0.1 사용자 지정·기록(안)
5일
11.02
11.06
0%
M1
계획(안)
완료(해결된 지난 작업)진행게시 대기계획(안)결정 시점묶음 작업지난 기간
그림 2. GMines 개발 시퀀스 (오늘 이후 작업은 계획(안))
목적
원본 앱이 없어 정답을 직접 수집할 수 없는 경우에도 정답지 비교 개발 방식을 쓸 수 있는지 확인한다.
계획
  1. 지뢰찾기 규칙 조사와 원본 앱 설치 여부 확인
  2. 정답지 두 가지 준비(규칙 도출 사례, 확인용 프로그램)
  3. GCalc 저장소 틀을 그대로 복사하여 시작
  4. 규칙 구현과 정답 비교
  5. 화면 구현과 Windows 실행 파일·설치 파일 생성
체크리스트 7/9
  • ☑ 규칙 조사와 원본 앱 미설치 확인 (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 의 비교 관계를 나타낸다.

정답지 1. 규칙 도출 사례공개 규칙 문서에서 손으로 24건정답지 2. 확인용 프로그램판 전체를 반복해 검사하는 단순 계산GMines 게임 규칙 모듈열기·표시·주변 열기·승패24건 판 모양 비교무작위 3,000판 교차 비교결과가 다르면 실패
그림 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는 사례 하나를 나타낸다.

누르기 전 (회색 점은 숨은 지뢰)오른쪽 위 칸을 누른 뒤23332파란 테두리 칸 열기
그림 4. 사례 flood-boundary. 가운데 세로줄에 지뢰 5개가 있는 5×5 판에서 오른쪽 위 칸을 연 결과

오른쪽 위 칸은 주변에 지뢰가 없어 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은 지뢰를 밟아 패배한 화면이다. 패배하면 누른 지뢰는 붉은 칸, 나머지 지뢰는 검은 점, 잘못 꽂은 깃발은 붉은 ✕ 로 표시된다.

GMines 첫 클릭 화면
그림 5. 초급 판 첫 클릭 후 화면
GMines 패배 화면
그림 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칸을 비울 수 없을 때 첫 칸만 비우는 처리는 가정 원본 앱 확인

참고문헌

  1. Wikipedia, “Minesweeper (video game)”. https://en.wikipedia.org/wiki/Minesweeper_(video_game)
  2. Wikipedia, “Microsoft Minesweeper”. https://en.wikipedia.org/wiki/Microsoft_Minesweeper
  3. ArtCraft Team, “PhotoCraft AGENTS.md”, GitHub storytold/photocraft, 2026. https://github.com/storytold/photocraft

ABOUT AUTHOR

shind

shind

소개글이 아직 없습니다.

댓글 남기기

Your email address will not be published. Required fields are marked *