Stockfish(장기)

Fairy Stockfish 장기 모드: FEN 및 UCI 좌표 해석의 모든 것

모과나무99 2025. 6. 30. 21:29

장기 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이 됩니다.

bestmove 해석 시 고려사항:

  • 한나라 궁('K')이 이미지/실제 판에서 아래쪽에 있는 경우 (한나라 선수의 시점):
    • 이것이 표준적인 FEN 및 UCI 표기의 기준이며, Fairy Stockfish에서 반환된 bestmove현재 보이는 판의 좌표와 직접 매핑됩니다.
    • 예시: a1은 한나라 쪽 맨 왼쪽 아래 칸, i10은 초나라 쪽 맨 오른쪽 위 칸을 나타냅니다.
  • 초나라 궁('k')이 이미지/실제 판에서 아래쪽에 있는 경우 (초나라 선수의 시점):
    • FEN은 초나라 궁이 아래에 있어도 180도 뒤집어 한나라 시점으로 변환하여 생성합니다.
    • Fairy Stockfish가 bestmove를 반환할 때, 이 UCI 좌표는 이미 180도 뒤집혀 한나라 시점으로 변환된 가상의 판을 기준으로 합니다.
    • 예시: a1은 맨 오른쪽 위 칸, i10은 맨 왼쪽 아래 칸을 나타냅니다.