장기 AI 개발은 복잡해 보일 수 있지만, FEN(Forsyth-Edwards Notation) 문자열, UCI(Universal Chess Interface) 좌표 체계, 그리고 기물 표기법에 대한 정확한 이해만 있다면 한결 수월해집니다. 이 가이드는 장기판 이미지를 FEN 문자열로 변환하고, Fairy Stockfish AI 엔진으로부터 UCI 형식의 최적 수를 해석하는 데 필요한 모든 핵심 규칙을 명확하게 정의합니다.
1. 장기 기물 표준 표기법
장기 기물은 FEN 및 UCI 표기법에서 특정 알파벳 문자로 표현됩니다. 팀을 구분하기 위해 한(Han) 나라는 대문자를, 초(Cho) 나라는 소문자를 사용합니다.
한나라 (大文字):
- 차: R
- 마: N
- 상: B
- 사: A
- 궁: K
- 포: C
- 병: P
초나라 (小文字):
- 차: r
- 마: n
- 상: b
- 사: a
- 궁: k
- 포: c
- 졸: p
2. 장기 FEN 문자열 생성 지침: 선수 판단 및 보드 정렬
장기 FEN 문자열을 생성할 때, 다음 규칙에 따라 누가 선수를 두는지(활성 팀)와 보드를 어떻게 정렬(뒤집을지 말지)할지 결정해야 합니다.
핵심 원칙: FEN 문자열은 항상 한나라 궁('K')의 시점에서 위에서 아래로 행을 읽으며 작성됩니다.
선수(활성 팀) 판단 기준:
- 판의 아래쪽에 위치한 궁을 가진 팀이 선수가 됩니다.
FEN 문자열 생성 규칙:
- 한나라 궁('K')이 이미지/실제 판에서 아래쪽에 있는 경우:
- 선수 (활성 팀):
w
(white, 백). 이는 한나라가 선수를 둔다는 의미입니다. - 보드 정렬: 보드를 뒤집지 않고 FEN 문자열을 생성합니다. 이미지의 맨 위 행이 FEN의 첫 번째 행이 됩니다. FEN은 기본적으로 한나라 시점을 기준으로 작성되므로, 이미지가 이미 한나라 시점이라면 그대로 사용합니다.
- 예시 FEN:
rnba1a1br/4k4/1c3n1c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/4K4/RNBA1ANBR w - - 0 1
- 선수 (활성 팀):
- 초나라 궁('k')이 이미지/실제 판에서 아래쪽에 있는 경우:
- 선수 (활성 팀):
b
(black, 흑). 이는 초나라가 선수를 둔다는 의미입니다. - 보드 정렬: FEN은 항상 한나라 시점을 기준으로 작성되어야 하므로, 이미지에서 인식된 장기판 배열을 180도 뒤집어서 (회전시켜서) FEN 문자열을 구성해야 합니다.
- 예시 FEN:
rnba1anbr/4k4/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/4K4/RNBA1ANBR b - - 0 1
- 선수 (활성 팀):
3. Fairy Stockfish 장기 모드 bestmove
(UCI) 좌표 지침
Fairy Stockfish Janggi 모드에서 반환하는 bestmove
(예: a1b1
)는 UCI (Universal Chess Interface) 형식을 따릅니다. 이 4자리 문자열은 [출발 열][출발 행][도착 열][도착 행]
으로 구성됩니다.
핵심 원칙: Fairy Stockfish 엔진이 반환하는 bestmove
의 UCI 좌표는 언제나 FEN 문자열이 정의된 방식, 즉 한나라 궁('K')이 아래에 있다고 가정한 표준적인 장기판 시점을 기준으로 합니다.
UCI 좌표계 정의 (공통 적용):
- 열 (Column): 왼쪽에서 오른쪽으로
a, b, c, d, e, f, g, h, i
(총 9개) - 행 (Row): 아래에서 위로
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
(총 10개)- 즉, FEN 상에서 첫 번째 행(가장 위쪽)은
10
이 되고, 마지막 행(가장 아래쪽, 한나라 궁이 있는 곳)은1
이 됩니다.
- 즉, FEN 상에서 첫 번째 행(가장 위쪽)은
bestmove
해석 시 고려사항:
- 한나라 궁('K')이 이미지/실제 판에서 아래쪽에 있는 경우 (한나라 선수의 시점):
- 이것이 표준적인 FEN 및 UCI 표기의 기준이며, Fairy Stockfish에서 반환된
bestmove
는 현재 보이는 판의 좌표와 직접 매핑됩니다. - 예시:
a1
은 한나라 쪽 맨 왼쪽 아래 칸,i10
은 초나라 쪽 맨 오른쪽 위 칸을 나타냅니다.
- 이것이 표준적인 FEN 및 UCI 표기의 기준이며, Fairy Stockfish에서 반환된
- 초나라 궁('k')이 이미지/실제 판에서 아래쪽에 있는 경우 (초나라 선수의 시점):
- FEN은 초나라 궁이 아래에 있어도 180도 뒤집어 한나라 시점으로 변환하여 생성합니다.
- Fairy Stockfish가
bestmove
를 반환할 때, 이 UCI 좌표는 이미 180도 뒤집혀 한나라 시점으로 변환된 가상의 판을 기준으로 합니다. - 예시: a1은 맨 오른쪽 위 칸, i10은 맨 왼쪽 아래 칸을 나타냅니다.
'Stockfish(장기)' 카테고리의 다른 글
NDK 없이 안드로이드에서 Fairy-Stockfish 빌드 성공기: Termux 하나면 충분! (3) | 2025.06.18 |
---|---|
Fairy-Stockfish와 함께하는 장기 AI 프로젝트: 엔진 설정부터 API 활용까지 (2) | 2025.06.05 |