icon 추가

This commit is contained in:
2026-09-21 22:34:20 +09:00
parent 274e36d669
commit 6ac67ec59d
842 changed files with 54721 additions and 37620 deletions
+108
View File
@@ -0,0 +1,108 @@
# 한글 십자말풀이 스테이지 생성 규칙 및 가이드라인 (Stage Rules & Guidelines)
본 문서는 **한글 십자말풀이 앱(WordPuzzle)**의 스테이지를 지속적으로 확장(50개, 100개 이상)하기 위한 난이도 설계, 그리드 무결성 룰, 단어 배치 가이드라인 및 JSON 데이터 스키마를 정의합니다.
---
## 1. 스테이지 단계별 구조 및 난이도 진도 설계 (Difficulty Progression Strategy)
초반 스테이지의 진입 장벽을 낮추고 플레이어가 자연스럽게 어휘력을 확장할 수 있도록 완만한 난이도 상승 곡선(Progressive Difficulty Curve)과 풍성한 단어 밀도를 적용합니다.
| 스테이지 구간 | 난이도 (`difficulty`) | 그리드 크기 (`gridSize`) | 배치 단어 수 (`clues.size`) | 주요 단어 구성 및 어휘 특징 |
| :--- | :---: | :---: | :---: | :--- |
| **01 ~ 10** | Level 1 (입문/초보) | 6x6 ~ 7x7 | **6 ~ 8개** | **100% 기초 일상 어휘** (학교, 과일, 가족, 동물, 수영, 구름 등 초등 기초 어휘만 사용, 공간이 비지 않도록 알차게 배치) |
| **11 ~ 20** | Level 1 (초급) | 7x7 | **7 ~ 9개** | 쉬운 일상 단어 + 실생활 고빈도 최고 쉬운 사자성어 1개 (일석이조, 작심삼일, 남녀노소 등) |
| **21 ~ 40** | Level 2 (중급) | 7x7 ~ 8x8 | **8 ~ 10개** | 일반 어휘 + 한국어 교육용 고빈도 사자성어 (127개 핵심 사자성어) + 글로벌 기업 |
| **41 ~ 70** | Level 2~3 (상급) | 8x8 | **9 ~ 11개** | 시사상식, 글로벌 기업 브랜드, 인문학, 고사성어 |
| **71 ~ 100+** | Level 3 (마스터) | 8x8 | **10 ~ 12개** | 고난도 고사성어, 문화/역사/과학 종합 어휘 마스터 |
* **참고 자료**: '한국어 교육용 사자성어 선정 및 사용 양상 분석(진달래, 2020)' 논문의 127개 고빈도 사자성어 목록을 기반으로 사자성어의 난이도를 단계별로 배치했습니다.
---
## 2. 십자말풀이 그리드 및 단어 배치 룰 (Grid Layout & Placement Rules)
모든 스테이지의 `clues` 단어 배치는 다음 수학적/구조적 조건을 반드시 만족해야 합니다.
### ① 좌표계 및 이동 규칙
* **좌표 기준**: 그리드의 좌측 상단이 `(row: 0, col: 0)`입니다.
* **가로 방향 (`ACROSS`)**: `(startRow, startCol)`에서 시작하여 오른쪽으로 `length`만큼 이동합니다.
$$\text{범위}: \text{startCol} + \text{length} \le \text{gridSize}$$
* **세로 방향 (`DOWN`)**: `(startRow, startCol)`에서 시작하여 아래쪽으로 `length`만큼 이동합니다.
$$\text{범위}: \text{startRow} + \text{length} \le \text{gridSize}$$
### ② 단어 및 글자 배치 규칙
* **최소 단어 길이**: 가로나 세로로 나열되는 단어는 최소 2글자 이상이어야 합니다. 1글자짜리 단어는 인정되지 않습니다 (`length >= 2`).
* **공통 글자 공유**: 가로 단어와 세로 단어가 만나는 교차점의 글자는 두 단어 모두에 완벽하게 일치해야 합니다.
* **띄어쓰기 생략**: 두 단어 이상으로 이루어진 복합어나 구절을 답으로 쓸 때는 띄어쓰기 없이 칸을 이어 붙여서 작성합니다.
### ③ 교차점 (Intersection) 및 연결성 (Connectivity)
* **단어 간 교차 필수**: 퍼즐 내의 모든 단어는 최소 1개 이상의 다른 단어와 교차점(같은 한글 문자를 공유하는 좌표)을 형성해야 합니다.
* **서브 퍼즐 허용**: 단어 수가 많고 그리드 공간이 넓을 경우 2개 이상의 유기적 서브 퍼즐로 나누어 구성할 수 있으며, 각 서브 퍼즐은 최소 2개 이상의 단어가 교차해야 합니다. (단독 1개짜리 외딴 단어 배치 금지)
### ④ 인접 글자의 무의미한 단어 조합 방지 규칙
* **의미 없는 유령 단어 조합 지양**: 단어들이 나란히 배치될 때 교차점이 아닌 인접 칸에 글자들이 나란히 놓여, 가로나 세로 방향으로 읽었을 때 의미가 성립되지 않는 불필요한 글자 조합(예: "름기차")이 생기는 배치는 완벽히 차단해야 합니다.
* **방향성 유효성**: 가로나 세로 어떤 방향으로 읽더라도 올바른 정답 단어로만 읽히도록 단어 사이의 공간(검은 칸/빈 공간)을 확보하여 배치합니다.
* **색상 및 시각적 구분**: 게임 화면 내에서 단어별 고유 파스텔 배경 색상 및 테두리로 각 단어의 구획을 확실하게 표시하여 사용자가 혼동하지 않도록 처리합니다.
### ⑤ 퍼즐 독립 구성 및 단독 단어 배치 지양
* **자연스러운 연결성 우선**: 한 스테이지에 1개 이상의 독립된 퍼즐이 구성될 수는 있으나, 이는 필수 조건이 아닙니다.
* **억지 단독 배치 지양**: 연결 고리가 없이 1개의 단어만 따로 떨구어 단독 배치하는 방식으로 억지로 퍼즐 개수를 늘리지 않으며, 교차점을 통해 서로 유기적으로 연결된 완성도 높은 퍼즐 구성을 최우선으로 합니다.
### ⑥ 시작 힌트 문자 50% 이하 제한 규칙
* **단어별 힌트 비율 제한**: 스테이지 시작 시 (또는 문자 새로고침 시) 무작위로 배치되는 시작 힌트 문자는, 어떤 단어이든 그 단어를 구성하는 전체 문자 수(`clue.length`)의 **50% 이하($\le \lfloor \text{length} \times 0.5 \rfloor$)까지만 채워지도록 제한**합니다.
* **과도한 자동 정답 방지**: 2~3글자 단어의 경우 최대 1글자까지만 시작 힌트로 허용하여, 시작하자마자 특정 단어가 통째로 채워지거나 거의 다 풀어져버려 게임의 재미가 반감되는 현상을 근본적으로 차단합니다.
### ⑦ 2글자 이상 부분 문자열 중복 단어 포개짐 금지 규칙
* **2글자 이상 중복 포개짐 금지**: 한 스테이지 안에서 임의의 두 단어가 2글자 이상 동일한 연속 문자열을 공유하는 경우(예: "사랑"과 "사랑방", "기차"와 "기차표", "변호"와 "변호사", "리본"과 "리본끈" 등), 두 단어를 한 스테이지에 동시에 배치하거나 가로/세로 상에 포개어 만드는 구성을 엄격히 금지합니다.
* **단일 교차점 원칙**: 서로 다른 단어 간의 교차점(Intersection)은 오직 **1글자 단일 교차**로만 형성되어야 합니다.
### ⑧ 힌트 보유 제한(최대 5개) 및 일일 무료 시청 제한(3회)
* **최대 보유 제한**: 보유할 수 있는 힌트 개수는 **최대 5개**로 제한됩니다. 보유 힌트가 5개일 경우 광고 시청 버튼이 비활성화되며 추가 힌트 충전이 불가능합니다.
* **일일 무료 시청 제한**: 힌트를 충전하기 위한 일일 무료 광고 시청 한도는 **3회**로 지정됩니다. (매일 자정에 초기화)
### ⑨ 그리드 내 퍼즐 가로/세로 정중앙 배치 규칙
* **중앙 밸런스 배치**: 퍼즐 단어 배치가 그리드의 우측, 좌측, 상단, 하단 등 한쪽 귀퉁이나 구석으로 쏠리는 현상을 완벽히 차단합니다.
* **자동 오프셋 정렬**: 퍼즐 전체 단어들이 차지하는 바운딩 박스(Bounding Box: `min_r, max_r, min_c, max_c`)를 계산한 후, 그리드의 가로/세로 정중앙 중심점과 일치하도록 이동 오프셋($\Delta r, \Delta c$)을 자동 적용하여 시각적 균형감을 극대화합니다.
---
## 3. JSON 스키마 명세 (`stages.json`)
스테이지 데이터는 `app/src/main/assets/data/stages.json`에 저장되며, 다음 스키마를 엄격히 준수합니다.
```json
[
{
"stageNumber": 1,
"title": "첫걸음: 풍성한 쉬운 단어 I",
"gridSize": 6,
"difficulty": 1,
"clues": [
{
"id": "c1_1",
"number": 1,
"direction": "ACROSS",
"word": "생일파티",
"clue": "태어난 날을 축하하기 위해 여는 잔치.",
"startRow": 2,
"startCol": 1,
"length": 4
}
]
}
]
```
---
## 4. 주제 및 단어 데이터 연동 가이드라인 (Theme & Vocabulary)
1. **[words.json](file:///home/gerd/Workspace/AndroidStudioProjects/wordpuzzles/app/src/main/assets/data/words.json) 연동**:
* 퍼즐 단어장에 소속된 단어 카테고리(`"스테이지 단어"`, `"고사성어"`, `"글로벌 기업"`, `"일반"`)를 적극 활용합니다.
2. **다양한 주제 테마 배치**:
* **초반 (01~10)**: 학교, 음식, 가족, 동물, 자연 등 100% 기초 일상어 (단어 6~8개 풍성하게 배치)
* **중반 (11~40)**: 일상어 + 실생활 고빈도 필수 사자성어 + 글로벌 기업 브랜드
* **후반 (41~100)**: 시사상식, 고사성어, 글로벌 기업, 역사/문화 종합 탐구
3. **단어 설명(`clue`)의 명확성**:
* 힌트 문장은 자극적이지 않으며 직관적이고 표준 국어대사전에 기반한 깔끔한 설명을 사용합니다.