ChessLang 방향 시스템 완전 레퍼런스
방향 레퍼런스
방향은 기물이 보드를 가로질러 이동하는 방법을 정의합니다. ChessLang은 절대 및 상대 방향 시스템을 모두 제공합니다.
절대 방향
절대 방향은 어떤 플레이어가 이동하든 동일합니다.
직선 방향
| 방향 | 벡터 | 설명 |
|---|---|---|
N | (0, +1) | 북 (랭크 8 방향) |
S | (0, -1) | 남 (랭크 1 방향) |
E | (+1, 0) | 동 (파일 h 방향) |
W | (-1, 0) | 서 (파일 a 방향) |
chesslang
piece Rook {
move: slide(N) | slide(S) | slide(E) | slide(W)
}대각선 방향
| 방향 | 벡터 | 설명 |
|---|---|---|
NE | (+1, +1) | 북동 |
NW | (-1, +1) | 북서 |
SE | (+1, -1) | 남동 |
SW | (-1, -1) | 남서 |
chesslang
piece Bishop {
move: slide(NE) | slide(NW) | slide(SE) | slide(SW)
}방향 그룹
| 그룹 | 포함 | 설명 |
|---|---|---|
orthogonal | N, S, E, W | 모든 직선 방향 |
diagonal | NE, NW, SE, SW | 모든 대각선 방향 |
any | 모두 8 | 모든 방향 |
chesslang
piece Queen {
move: slide(orthogonal) | slide(diagonal)
# 다음과 동일: slide(any)
}
piece King {
move: step(any)
}상대 방향
상대 방향은 어떤 플레이어가 이동하는지에 따라 달라집니다. 흑에게는 자동으로 뒤집힙니다.
플레이어 기준 방향
| 방향 | 백 | 흑 | 설명 |
|---|---|---|---|
forward | N | S | 상대 쪽으로 |
backward | S | N | 자기 쪽으로 |
left | W | E | 플레이어의 왼쪽 |
right | E | W | 플레이어의 오른쪽 |
chesslang
piece Pawn {
move: step(forward) # 백은 N, 흑은 S
capture: step(forward-left) | step(forward-right)
}상대 대각선 방향
| 방향 | 백 | 흑 | 설명 |
|---|---|---|---|
forward-left | NW | SE | 앞 왼쪽 |
forward-right | NE | SW | 앞 오른쪽 |
backward-left | SW | NE | 뒤 왼쪽 |
backward-right | SE | NW | 뒤 오른쪽 |
chesslang
piece Pawn {
capture: step(forward-left) | step(forward-right)
}방향 시각화
백 플레이어 기준
text
NW N NE
↖ ↑ ↗
W ← [P] → E
↙ ↓ ↘
SW S SE흑 플레이어 기준
text
SE S SW
↖ ↑ ↗
E ← [P] → W
↙ ↓ ↘
NE N NW참고: 상대 방향은 뒤집혀서 forward는 항상 상대를 향합니다.
패턴과 방향 사용
step
고정된 수의 칸을 이동합니다:
chesslang
# 모든 방향으로 1칸
step(any)
# 앞으로 2칸
step(forward, 2)
# 대각선으로 1칸
step(diagonal)slide
막힐 때까지 여러 칸을 이동합니다:
chesslang
# 직선 방향으로 슬라이드 (룩)
slide(orthogonal)
# 대각선으로 슬라이드 (비숍)
slide(diagonal)
# 모든 방향으로 슬라이드 (퀸)
slide(any)방향 조합
|를 사용하여 여러 방향을 조합합니다:
chesslang
# 룩 이동
move: slide(N) | slide(S) | slide(E) | slide(W)
# 다음과 동일
move: slide(orthogonal)방향 수정자
거리
step으로 정확한 거리를 지정합니다:
chesslang
step(N) # 북으로 1칸
step(N, 2) # 북으로 2칸
step(N, 3) # 북으로 3칸최대 거리
슬라이드 거리를 제한합니다:
chesslang
slide(orthogonal, 3) # 최대 3칸 슬라이드커스텀 방향
표준 방향에 맞지 않는 이동은 leap을 사용합니다:
chesslang
# 나이트의 L자형
leap(2, 1) # 8가지 회전 모두 포함
# 캐멀
leap(3, 1)
# 제브라
leap(3, 2)
# 기린
leap(4, 1)leap 함수는 자동으로 모든 대칭 위치를 생성합니다:
- (2, 1), (-2, 1), (2, -1), (-2, -1)
- (1, 2), (-1, 2), (1, -2), (-1, -2)
예시
표준 기물
chesslang
# 킹 - 모든 방향으로 1칸
piece King {
move: step(any)
traits: [royal]
}
# 퀸 - 모든 방향으로 슬라이드
piece Queen {
move: slide(any)
}
# 룩 - 직선으로 슬라이드
piece Rook {
move: slide(orthogonal)
}
# 비숍 - 대각선으로 슬라이드
piece Bishop {
move: slide(diagonal)
}
# 나이트 - L자형 점프
piece Knight {
move: leap(2, 1)
traits: [jump]
}
# 폰 - 앞으로 이동
piece Pawn {
move: step(forward) where empty
move: step(forward, 2) where first_move and clear
capture: step(forward-left) | step(forward-right)
traits: [promote]
}페어리 기물
chesslang
# 아마존 - 퀸 + 나이트
piece Amazon {
move: slide(any) | leap(2, 1)
}
# 챈슬러 - 룩 + 나이트
piece Chancellor {
move: slide(orthogonal) | leap(2, 1)
}
# 대주교 - 비숍 + 나이트
piece Archbishop {
move: slide(diagonal) | leap(2, 1)
}
# 캐멀 - (3,1) 점프
piece Camel {
move: leap(3, 1)
traits: [jump]
}
# 제브라 - (3,2) 점프
piece Zebra {
move: leap(3, 2)
traits: [jump]
}커스텀 이동
chesslang
# 베를리나 폰 - 대각선 이동, 앞으로 잡기
piece BerolinaPawn {
move: step(forward-left) | step(forward-right) where empty
capture: step(forward) where enemy
traits: [promote]
}
# 그리폰 - 대각선 후 직선
piece Gryphon {
move: step(diagonal) + slide(orthogonal)
}
# 와지르 - 직선으로 1칸
piece Wazir {
move: step(orthogonal)
}
# 페르즈 - 대각선으로 1칸
piece Ferz {
move: step(diagonal)
}