/java-chess

체스 게임 구현을 위한 저장소

Primary LanguageJava

java-chess

  • 체스판을 초기화한다.
    • 말의 위치 값은 가로 위치는 왼쪽부터 a ~ h이고, 세로는 아래부터 위로 1 ~ 8로 구현한다.
    • 각 진영은 검은색(대문자)과 흰색(소문자) 편으로 구분한다.
RNBQKBNR  8 (rank 8)
PPPPPPPP  7
........  6
........  5
........  4
........  3
pppppppp  2
rnbqkbnr  1 (rank 1)

abcdefgh

기능 요구사항

  • 빈 판을 생성한다.

    • 체스말들을 생성한다.
    • 체스말들을 초기 위치에 놓는다.
    • 콘솔 출력
  • 체스 말이 이동할 수 있도록 구현한다.

    • move source위치 target위치을 실행해 이동한다.
    • King
      • 전방향 1칸 이동
      • start와 target의 (x좌표 끼리의 차이)^2와 (y좌표 끼리의 차이)^2의 합이 2 이하
    • Queen
      • 전방향 무제한 이동
      • Rook or Bishop
    • Rook
      • 상하좌우 무제한 이동
      • start와 target의 x좌표 끼리의 차이 또는 y좌표 끼리의 차이 중하나가 0
    • Bishop
      • 대각선 무제한 이동
      • start와 target의 x좌표 끼리의 차이와 y좌표 끼리의 차이 절대값이 같음
    • Knight
      • 상하좌우 1칸 + 대각선 1칸 이동
      • 다른 말 건너뛰기 가능
      • start와 target의 (x좌표 끼리의 차이)^2와 (y좌표 끼리의 차이)^2의 합이 5
    • Pawn
      • 전방 1칸 이동
      • target의 y좌표 - start의 y좌표가 WHITE면 1, BLACK이면 -1
      • 초기 위치에 있을 시에만 2칸 이동 가능
  • King이 잡혔을 때 게임을 종료해야 한다.

  • "status" 명령을 입력하면 각 진영의 점수를 출력하고 어느 진영이 이겼는지 결과를 볼 수 있어야 한다.

    • 각 말의 점수는 queen은 9점, rook은 5점, bishop은 3점, knight는 2.5점이다.
    • pawn의 기본 점수는 1점이다. 세로줄에 같은 색의 폰이 있는 경우 1점이 아닌 0.5점을 준다.
    • king은 잡히는 경우 경기가 끝나기 때문에 점수가 없다.
    • 한 번에 한 쪽의 점수만을 계산해야 한다.