chess 라는 schema 를 통해서 실제 게임을 관리합니다
chess_test 라는 schema 를 통해서 테스트를 관리합니다
System.getenv("password");
를 통해서 mysql 패스워드를 관리합니다
env 에 password 로 패스워드를 등록해주세요
script.sql
에 테이블 생성 스크립트가 있습니다
-
view
- 사용자의 id 를 받는다
- 사용자의 게임을 입력받는다
-
controller
- status를 입력할 경우 현재 게임의 상태를 출력한다
- 사용자의 id를 입력받아 해당 id 에 해당하는 thread 를 통해서 게임을 진행한다
-
dao
- 게임을 불러올 수 있다
- move 를 저장할 수 있다
-
command
- move 명령어를 입력받으면, 시작 위치와 끝 위치를 바탕으로 움직이게 한다
- start 명령어를 입력받으면, 게임을 시작한다
- end 명령어를 입력받으면, 게임을 종료한다
-
query
- 현재 게임 기물 위치를 출력한다
- 현재 게임의 점수를 출력한다
-
ScoreCalculator
- 각 팀의 점수를 계산한다
- 같은 file 에 있는 pawn 의 점수를 0.5점으로 계산한다
-
turn
- 턴을 관리한다
-
piece
- piece 에서 king 인지 여부를 확인한다
-
board
- board 에서 king 이 죽었는지 여부를 확인한다
-
chessGame
- 게임이 king 이 죽었을 때, 종료된다
- dao 로부터 move 로부터 받은 정보를 불러올 수 있어야 한다
- Connection 을 관리한다
- 기본적으로 5개의 connection 을 가지고, 매 요청마다 다른 connection을 반환한다
- Thread 를 관리한다
- 기본적으로 5개의 thread 를 가지고, id 마다 하나의 쓰레드를 반환한다
- 쓰레드를 반환하면, 해당 쓰레드는 다시 재사용될 수 있다
- 5개가 넘는 thread 가 사용될 경우, 새로운 쓰레드를 생성한다
- 메인 쓰레드에서 동시에 thread get 요청을 할 수 있으니, lock 을 걸어준다
- GameCommand
- 게임 시작 커맨드는 "start"다.
- 게임 종료 커맨드는 "end"다.
- 체스 기물 이동 요청 커맨드는 "move 시작위치 이동위치" 이다.
- 위치의 첫 번째 인자는 a~h까지 가능하다.
- 위치의 두 번째 인자는 1~8까지 가능하다.
-
InitialPawnState
- 해당 위치에 아무 말이 없다면 앞으로 한 칸 혹은 두 칸을 갈 수 있다.
- 해당 위치에 상대편 말이 있다면 대각 방향으로 한 칸 이동할 수 있다.
-
MovedPawnState
- 해당 위치에 아무 말이 없다면 앞으로 한 칸 갈 수 있다.
- 해당 위치에 상대편 말이 있다면 대각 방향으로 한 칸 이동할 수 있다.
-
KnightState
- 해당 위치에 같은 색의 기물이 없으면 앞으로 한 칸 이동한 후 같은 방향 대각으로 한 칸 이동할 수 있다.
- 다른 piece 가 중간에 있더라도 뛰어넘을 수 있다
-
BishopState
- 해당 위치에 같은 색의 기물이 없으면 대각 방향으로 원하는 만큼 이동할 수 있다.
-
RookState
- 해당 위치에 같은 색의 기물이 없으면 직선 방향으로 원하는 만큼 이동할 수 있다.
-
QueenState
- 해당 위치에 같은 색의 기물이 없으면 직선 방향으로 원하는 만큼 이동할 수 있다.
- 해당 위치에 같은 색의 기물이 없으면 대각 방향으로 원하는 만큼 이동할 수 있다.
-
KingState
- 직선 혹은 대각 방향으로 한 칸 이동할 수 있다.
- 이름을 가진다.
- 피스 타입을 가진다.
- 움직임 전략을 가진다.
- File 과 Rank 를 갖는다.
- 다른 포지션과의 Rank 순서 차이를 구할 수 있다.
- 다른 포지션과의 File 순서 차이를 구할 수 있다.
- 다른 포지션과의 직선 경로 Position 을 얻을 수 있다.
- [예외] 직선이 아니면 예외가 발생한다.
- Piece 들의 위치를 초기화 한다.
- 보드는 자신의 판 정보를 반환할 수 있다.
- 시작 Position 과 목표 Position 를 입력하면 Piece를 움직일 수 있다.
- start 와 end 를 입력 받는다.
- 체스판을 출력한다.