ChessLang 언어 완전 가이드

언어 가이드

ChessLang은 다중 레벨 도메인 특화 언어입니다. 필요에 맞는 레벨을 선택하세요:

개요

레벨스타일사용 사례
레벨 1설정간단한 규칙 수정
레벨 2선언적커스텀 기물과 트리거
레벨 3스크립팅복잡한 로직과 AI

레벨 1: Configure (설정)

간단한 수정을 위한 YAML 스타일 구문입니다. 프로그래밍 지식이 필요 없습니다.

chesslang
game: "My Variant"
extends: "Standard Chess"

board:
  zones:
    safe: [d4, d5, e4, e5]

victory:
  add:
    safe_king: King in zone.safe

기능:

  • 게임 정의 및 상속
  • 보드 존
  • 기물 배치 수정
  • 승리 및 무승부 조건
  • 규칙 조정

레벨 1 전체 가이드 →

레벨 2: Compose (조합)

커스텀 기물, 효과, 트리거를 만들기 위한 선언적 DSL입니다.

chesslang
piece Phoenix {
  move: slide(diagonal)
  capture: =move
  state: { lives: 2 }
}

effect fire {
  damages: [any]
  visual: highlight(red)
}

trigger respawn {
  on: capture
  when: captured.type == Phoenix and captured.state.lives > 0
  do: create Phoenix at captured.startPos
}

기능:

  • 커스텀 기물 정의
  • 이동 패턴 (step, slide, leap, hop)
  • 패턴 조합자 (|, +, *)
  • 조건 (where)
  • 보드 효과
  • 이벤트 트리거
  • 상태 관리

레벨 2 전체 가이드 →

레벨 3: Script (스크립트)

복잡한 게임 로직을 위한 JavaScript 스타일 스크립팅입니다.

chesslang
script {
  // 커스텀 유효성 검사
  Coward.validate = function(piece, move) {
    const enemies = board.pieces.filter(p => p.owner != piece.owner);
    for (const enemy of enemies) {
      if (distance(move.to, enemy.pos) < distance(piece.pos, enemy.pos)) {
        return { valid: false, reason: "Coward cannot approach enemies" };
      }
    }
    return { valid: true };
  };

  // 이벤트 핸들러
  game.on("capture", function(event) {
    if (event.piece.type == "Vampire") {
      event.piece.state.hp += event.captured.value;
    }
  });
}

기능:

  • 변수와 함수
  • 제어 흐름 (if/else, for, while)
  • 내장 객체 (board, game, piece)
  • 이벤트 핸들러
  • 커스텀 액션과 유효성 검사
  • AI 평가 함수

레벨 3 전체 가이드 →

레벨 혼합

하나의 파일에서 세 레벨을 모두 결합할 수 있습니다:

chesslang
# 레벨 1: 설정
game: "Advanced Variant"
extends: "Standard Chess"

board:
  zones:
    danger: [d4, d5, e4, e5]

# 레벨 2: 커스텀 기물
piece Vampire {
  move: step(any)
  capture: =move
  state: { hp: 5 }
}

effect poison {
  on_turn: damage occupant by 1
  visual: highlight(green)
}

# 레벨 3: 복잡한 로직
script {
  Vampire.on("capture", function(piece, captured) {
    piece.state.hp += captured.value;
    if (piece.state.hp >= 15) {
      transform(piece, "AncientVampire");
    }
  });
}

# 레벨 1: 설정
setup:
  add:
    White:
      Vampire: [d2]
    Black:
      Vampire: [d7]

올바른 레벨 선택하기

레벨 1을 사용할 때:

  • 간단한 규칙 수정
  • 새로운 승리/무승부 조건 추가
  • 시작 위치 변경
  • King of the Hill이나 Three-Check 같은 변형 만들기

레벨 2를 사용할 때:

  • 커스텀 기물 생성
  • 보드 효과 추가
  • 게임 이벤트에 대한 트리거 설정
  • 기물 상태 관리

레벨 3를 사용할 때:

  • 복잡한 유효성 검사 구현
  • 동적 능력 생성
  • 커스텀 AI 평가 구축
  • 게임 흐름 제어

다음 단계

  • 처음이라면 레벨 1부터 시작하세요
  • 실용적인 적용을 위해 예제를 참고하세요
  • 문법 세부사항은 레퍼런스를 확인하세요