장기 · 象棋
왕을 먼저 잡는 쪽이 이긴다
방을 만들고 링크를 보내면 친구가 상대로 앉아요.
Janggi / 象棋 Xiangqi / 韓國象棋 — 한 뿌리에서 갈라진 두 '장기'를 한 판에서, 정식 규칙으로
장기와 象棋(샹치)는 9줄 × 10줄 판의 선이 만나는 점 위에 말을 놓고, 번갈아 한 수씩 움직여 상대의 장(將)을 잡을 수밖에 없게 만드는 쪽이 이기는 게임입니다. 상대 장을 노리는 수를 '장군', 어떻게 피해도 잡히는 상태를 '외통'이라고 부릅니다.
아래 줄에는 지금까지의 기보가 표준 표기로 쌓입니다. 장기는 초 진영을 아래에 둔 좌표로 79졸78(7줄 9칸의 졸이 7줄 8칸으로)처럼, 象棋는 炮二平五(紅 포가 2번 줄에서 5번 줄로 옆걸음)처럼 적습니다. 영어·스페인어·포르투갈어 화면에서는 象棋를 WXF 표기(C2=5)로 보여 줍니다. 판이 끝나면 복기로 한 수씩 다시 보고, 기보를 링크로 공유할 수 있습니다.
象棋는 '코끼리 장기'라는 뜻의 象戲에서 이름이 왔습니다. 오늘날과 같은 모양 — 9 × 10 판, 가운데의 강, 포(砲)가 들어간 32개 말 — 은 중국 송(宋)나라 무렵에 자리를 잡았다고 보는 것이 일반적입니다. 판 가운데 강에 적힌 楚河 漢界는 진나라가 무너진 뒤 항우의 초(楚)와 유방의 한(漢)이 천하를 다툰 초한 전쟁에서 온 말이고, 그래서 두 진영을 초·한이라고 부르는 전통이 생겼습니다.
이 놀이는 한반도로 건너와 장기가 되었습니다. 들어온 정확한 시기는 기록이 엇갈리지만, 조선 시대에는 사랑방과 장터에서 누구나 두는 놀이로 자리 잡았습니다. 갈라진 뒤 두 게임은 각자의 방향으로 바뀌었습니다. 장기는 판에서 강을 지웠고, 말을 팔각형으로 만들어 장·차포마상·사졸을 크기로 구분했으며, 장(將)을 궁성 한가운데에 세우고 궁성의 대각선을 길로 쓰게 했습니다. 象棋는 둥근 말 하나의 크기에 글자만 다르게 새기는 모양을 지켰습니다.
지금도 象棋는 중국과 대만, 홍콩, 동남아 화교 사회에서 가장 널리 두는 판 게임 중 하나이고, 대만에서는 공원 나무 그늘 아래에서 상을 펴 놓고 두는 모습을 쉽게 볼 수 있습니다. 같은 판을 보고도 한국 사람은 장기를, 대만 사람은 象棋를 떠올리는 셈이라, 이 게임은 두 규칙을 한 화면에서 고를 수 있게 만들었습니다.
| 항목 | 장기 | 象棋 |
|---|---|---|
| 판 가운데 | 강 없음 | 강(楚河 漢界) — 상·사는 못 건넘 |
| 먼저 두는 쪽 | 초(楚, 초록) | 紅(빨강) |
| 장의 시작 자리 | 궁성 한가운데 | 궁성 맨 아랫줄 가운데 |
| 궁성 대각선 | 장·사·차·포·졸이 모두 따라 움직임 | 사(仕·士)만 대각으로 |
| 상(象) | 곧게 1칸 + 대각 2칸, 두 곳 모두 비어야 | 대각 2칸, 가운데(눈)가 비어야 |
| 포(包·炮) | 움직일 때도 잡을 때도 꼭 한 말을 넘음 · 포는 넘지도 잡지도 못함 | 움직일 때는 차처럼, 잡을 때만 한 말을 넘음 |
| 졸·병 | 처음부터 앞·옆, 적 궁성 대각선 앞으로 | 강을 건너기 전엔 앞만, 건넌 뒤 앞·옆 |
| 장끼리 마주보기 | 빅장 — 둘 수 있고, 다음 수에 풀지 않으면 점수로 승부 | 금지 — 그렇게 되는 수는 둘 수 없음 |
| 차례 넘기기 | 장군이 아니면 한 수 쉼 가능 | 불가 |
| 둘 수가 없을 때 | (쉴 수 있으니 생기지 않음) | 궁지(困斃) = 둘 차례인 쪽 패 |
| 승부가 안 날 때 | 점수 계산(한 +1.5 덤) | 무승부 |
표의 내용은 이 게임의 판정기가 그대로 지키는 규칙입니다. 판정기는 독립적으로 짠 두 번째 규칙 구현과 무작위 국면 1만 5천여 개에서 둘 수 있는 수를 하나하나 맞대어 보고, 象棋 시작 국면의 수 갈래 수(1수 44가지, 2수 1,920가지, 3수 79,666가지)가 널리 알려진 값과 같은지 확인했습니다.
장기에서 승부가 수 제한·반복·빅장으로 끝나면 남은 말의 점수를 셉니다. 차 13 · 포 7 · 마 5 · 상 3 · 사 3 · 졸(병) 2이고, 한 진영의 처음 합은 차 둘 26 + 포 둘 14 + 마 둘 10 + 상 둘 6 + 사 둘 6 + 졸 다섯 10 = 72점입니다. 먼저 두는 초가 유리하기 때문에 뒤에 두는 한에게 1.5점의 덤을 얹어 72 대 73.5로 시작합니다. 덤에 0.5가 들어 있어 점수가 같아질 수 없고, 그래서 점수로 끝나는 판에는 무승부가 없습니다.
점수가 이렇게 벌어지는 이유는 움직일 수 있는 점의 수를 보면 보입니다. 빈 판 가운데의 차는 한 줄로 끝까지 가므로 가로 8점 + 세로 9점, 17개 점에 닿습니다. 마는 아무리 좋아도 8곳, 장기의 상은 8곳, 사와 장은 궁성 안 몇 칸이 전부입니다. 차 하나가 판 전체를 가로질러 장군을 부르고, 동시에 다른 말을 노리는 '양수겸장'을 만들 수 있다는 뜻입니다. 그래서 차를 공짜로 내주면 대개 판이 기웁니다.
象棋에서도 흔히 차 9 · 포 4.5 · 마 4 · 사 2 · 상 2 · 병 1(강을 건넌 뒤 2)처럼 매기고, 차 하나가 다른 큰 말 둘에 버금간다고 봅니다. 다만 끝판에는 수비 말이 다 모인 진영을 차 하나로 깨기 어렵다는 '單車難破士象全(차 하나로는 사·상이 다 있는 진영을 깨기 어렵다)'이라는 말이 있을 만큼, 수비 말의 값도 끝판으로 갈수록 커집니다.
포는 반대로 판이 비어 갈수록 약해집니다. 넘을 말(포다리)이 있어야 움직이고 잡을 수 있기 때문입니다. 이 게임의 AI 도 판에 남은 말이 많을수록 포에 점수를 더 주고, 말이 줄어들면 깎아서 계산합니다.
대회마다 세부 규정은 조금씩 다릅니다. 象棋 공식 규정에는 장군 말고도 같은 말을 계속 쫓는 '장착(長捉)'을 따지는 긴 조항이 있는데, 이 게임은 그중 가장 널리 쓰이는 반복 장군 금지만 적용하고 쫓기 판정은 하지 않습니다. 빅장도 협회·지역마다 처리가 달라, 여기서는 '풀지 않으면 점수 계산'이라는 흔한 방식을 따랐습니다.
象棋에서 가장 많이 두는 첫 수는 포를 가운데 줄로 옮기는 當頭炮(炮二平五)입니다. 가운데 병을 노리면서 상대 장의 줄을 겨누기 때문입니다. 받는 쪽은 두 마를 앞으로 내 가운데 병을 지키는 屏風馬(馬8進7·馬2進3)가 대표적이고, 병을 한 칸 밀어 마의 길을 여는 仙人指路, 상을 먼저 올리는 飛相局처럼 조용히 시작하는 길도 있습니다.
장기는 상차림부터 수 싸움입니다. 대체로 처음 몇 수 안에 차의 길을 열고, 마를 먼저 내고, 상대 포가 넘어올 '포다리'가 될 자리에 내 말을 함부로 세우지 않는 것이 기본입니다. 장기의 졸은 처음부터 옆으로 갈 수 있어서, 졸을 한 칸 옆으로 비켜 마와 차의 길을 터 주는 수가 자주 나옵니다.
끝판에는 몇 가지 알아 둘 사실이 있습니다. 象棋에서 포 하나만으로는 외통을 만들 수 없습니다 — 넘을 말이 필요하기 때문입니다. 장기에서는 궁성 대각선 덕분에 차·포·졸이 궁 안으로 비스듬히 들어와 장군을 부를 수 있어, 궁 귀퉁이의 사를 지키는 일이 象棋보다 훨씬 중요합니다. 그리고 象棋에서는 상대 장이 움직일 곳이 없으면 장군이 아니어도 이기므로(궁지), 끝판에 장의 숨 쉴 자리를 하나씩 막는 것이 그대로 승리가 됩니다.
엔진은 알파-베타 탐색을 한 단계씩 깊게 반복하고(반복 심화), 수가 끝난 자리에 잡고 잡히는 수가 남아 있으면 그것까지 따라가 보는 정지 탐색, 같은 국면을 다시 계산하지 않는 치환표, 좋은 수를 먼저 보게 하는 킬러·히스토리 순서, 장군 연장 같은 표준 기법을 씁니다. 계산은 화면과 다른 스레드(Web Worker)에서 돌아 판이 멈추지 않습니다.
단계 차이는 실제로 붙여 보고 정했습니다. 장기·象棋를 반씩, 진영을 번갈아 40판씩 둔 결과 보통은 쉬움을 상대로 39승 1무, 어려움은 보통을 상대로 38승 2패, 고수는 어려움을 상대로 31승 1무 8패였습니다. 위로 갈수록 차이가 줄어드는 것은 자연스러운 일입니다 — 몇 수를 더 읽어도, 양쪽 모두 큰 실수를 하지 않는 판에서는 승부가 쉽게 갈리지 않기 때문입니다. 이 하네스는 AI 끼리 200판을 끝까지 두면서 매 수를 독립 구현으로 검사해, 규칙에 어긋난 수가 하나도 없음을 확인합니다.