Skip to content

woowacourse-code-review-study/java-chess

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e870575 · Mar 25, 2023

History

45 Commits
Feb 7, 2022
Mar 25, 2023
Feb 7, 2022
Mar 25, 2023
Mar 22, 2023
Feb 7, 2022
Feb 7, 2022
Feb 7, 2022
Mar 25, 2023

Repository files navigation

기능목록

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

  • 체스판을 출력한다.

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 81.4%
  • HTML 18.6%