Skip to content

Latest commit

 

History

History
132 lines (96 loc) · 4.52 KB

README.md

File metadata and controls

132 lines (96 loc) · 4.52 KB

기능목록

DB 정보

chess 라는 schema 를 통해서 실제 게임을 관리합니다
chess_test 라는 schema 를 통해서 테스트를 관리합니다

System.getenv("password");

를 통해서 mysql 패스워드를 관리합니다
env 에 password 로 패스워드를 등록해주세요

script.sql
에 테이블 생성 스크립트가 있습니다

2단계

  • 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 을 걸어준다

1단계

컨트롤러

  • GameCommand
    • 게임 시작 커맨드는 "start"다.
    • 게임 종료 커맨드는 "end"다.
    • 체스 기물 이동 요청 커맨드는 "move 시작위치 이동위치" 이다.
      • 위치의 첫 번째 인자는 a~h까지 가능하다.
      • 위치의 두 번째 인자는 1~8까지 가능하다.

도메인

state

  • InitialPawnState

    • 해당 위치에 아무 말이 없다면 앞으로 한 칸 혹은 두 칸을 갈 수 있다.
    • 해당 위치에 상대편 말이 있다면 대각 방향으로 한 칸 이동할 수 있다.
  • MovedPawnState

    • 해당 위치에 아무 말이 없다면 앞으로 한 칸 갈 수 있다.
    • 해당 위치에 상대편 말이 있다면 대각 방향으로 한 칸 이동할 수 있다.
  • KnightState

    • 해당 위치에 같은 색의 기물이 없으면 앞으로 한 칸 이동한 후 같은 방향 대각으로 한 칸 이동할 수 있다.
    • 다른 piece 가 중간에 있더라도 뛰어넘을 수 있다
  • BishopState

    • 해당 위치에 같은 색의 기물이 없으면 대각 방향으로 원하는 만큼 이동할 수 있다.
  • RookState

    • 해당 위치에 같은 색의 기물이 없으면 직선 방향으로 원하는 만큼 이동할 수 있다.
  • QueenState

    • 해당 위치에 같은 색의 기물이 없으면 직선 방향으로 원하는 만큼 이동할 수 있다.
    • 해당 위치에 같은 색의 기물이 없으면 대각 방향으로 원하는 만큼 이동할 수 있다.
  • KingState

    • 직선 혹은 대각 방향으로 한 칸 이동할 수 있다.

piece

  • 이름을 가진다.
  • 피스 타입을 가진다.
  • 움직임 전략을 가진다.

Position

  • File 과 Rank 를 갖는다.
  • 다른 포지션과의 Rank 순서 차이를 구할 수 있다.
  • 다른 포지션과의 File 순서 차이를 구할 수 있다.
  • 다른 포지션과의 직선 경로 Position 을 얻을 수 있다.
    • [예외] 직선이 아니면 예외가 발생한다.

Board

  • Piece 들의 위치를 초기화 한다.
  • 보드는 자신의 판 정보를 반환할 수 있다.
  • 시작 Position 과 목표 Position 를 입력하면 Piece를 움직일 수 있다.

InputView

  • start 와 end 를 입력 받는다.

OutputView

  • 체스판을 출력한다.