/java-chess

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

Primary LanguageJava

체스 미션

실행 방법

  1. 도커 실행
cd docker
docker-compose -p chess up -d
  1. 테이블 정보
docker/db/mysql/init/init.sql
  1. 포트번호
http://localhost:8082/

웹 기능 목록

  • 방 번호를 입력받아 새로운 체스 게임을 시작한다.

    • 게임이 존재하는 경우, 이전 게임에 이어서 게임을 진행한다.
    • 게임이 존재하지 않는 경우, 빈 체스판을 보여준다.
  • start버튼을 누르면 체스판을 초기화 한다.

    • 게임 진행중 start 버튼을 누르면 게임을 다시 진행할 수 있다.
  • 게임이 진행되는 동안 마우스 드래그로 체스말을 움직인다.

  • 게임 중 end버튼을 누르면 게임은 종료된다.

    • 킹이 하나 죽어도 게임은 종료된다.
  • 게임 중 status 버튼을 눌러 현재 게임 상태를 확인할 수 있다.

    • 킹이 죽지 않으면 승자는 알 수 없다.
    • 킹이 죽으면 승자를 알 수 있다.
  • exit 버튼을 누르면 방이 사라지며 대기실로 이동한다.

콘솔 구현 기능 목록

  • 'start'를 입력받아 새로운 체스 게임을 시작한다.

  • 체스 게임이 시작되면 체스판을 초기화한다.

    • 각 행은 아래부터 1~8행으로 구성된다.
    • 각 열은 좌측부터 a~h열로 구성된다.
    • 백색 진영은 아래쪽에, 흑색 진영은 위쪽에 위치한다.
    • 2행과 7행은 각각 8개의 폰(Pawn)들로 구성된다.
    • 1행과 8행은 각각 2개의 룩(Rook), 2개의 나이트(Knight), 2개의 비숍(Bishop), 퀸(Queen)과 킹(King)으로 구성된다.
  • 체스 게임이 진행되는 동안 move source위치 target위치 형식으로 입력받아 체스 말을 이동시킨다.

    • move source위치에 해당되는 체스 말이 없는 경우 예외가 발생한다.
    • 체스 말의 이동 가능 범위에 target위치가 포함되어 있지 않은 경우 예외가 발생한다.
  • target위치에 다른 색의 체스 말이 존재하는 경우 해당 말을 잡을 수 있다.

    • 체스말이 path를 가지면서, 이동하려는 위치 사이 path에 체스 말이 존재하는 경우 예외가 발생한다.
    • target위치에 같은 색의 체스 말이 존재하는 경우 예외가 발생한다.
  • 킹이 잡히는 경우 즉시 게임이 종료된다.

  • 사용자는 게임이 진행되는 동안 'end'를 입력하여 게임을 강제 종료할 수 있다.

    • 게임을 강제종료 하려는 경우, 승자는 알 수 없다.
    • 단, 점수는 출력한다.
  • 게임 종료 후 'status'를 입력받으면 각 진영의 점수와 승리자 정보를 출력한다.

    • 퀸은 9점, 룩은 5점, 비숍은 3점, 나이트는 2.5점, 폰은 1점으로 계산한다.
    • 같은 색의 폰이 복수로 존재하는 경우, 해당 폰은 전부 0.5점으로 계산한다.
    • 승리자는 점수와 상관없이 킹을 잡은 진영이다.
  • 게임 종료 후 'end'를 입력받으면 프로그램을 종료한다.

체스판 초기화

♖♘♙♕♔♙♘♖ 8 (rank 8)
♗♗♗♗♗♗♗♗ 7
........ 6
........ 5
........ 4
........ 3
♝♝♝♝♝♝♝♝ 2
♜♞♟♛♚♟♞♜ 1 (rank 1)

abcdefgh (files)