Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1,2,3단계 - 체스] 인비(김태희) 미션 제출합니다. #176

Merged
merged 96 commits into from
Mar 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
d7f1dd5
docs: README.md 업데이트
taehee-kim-dev Mar 16, 2021
8884a61
docs: README.md 업데이트
taehee-kim-dev Mar 16, 2021
f2e65b8
docs: README.md 업데이트
taehee-kim-dev Mar 16, 2021
06bc33d
feat: 게임 시작 안내문 출력 기능 추가
taehee-kim-dev Mar 16, 2021
8dca53e
feat: 플레이어의 선택을 입력받는 기능 구현
taehee-kim-dev Mar 16, 2021
81f1bcc
docs: README.md 업데이트
taehee-kim-dev Mar 16, 2021
83933fb
feat: 백과 흑 플레이어 생성 테스트 추가
taehee-kim-dev Mar 16, 2021
c95a638
docs: README.md 업데이트
taehee-kim-dev Mar 16, 2021
9082b90
refactor: Player 테스트 코드 수정 및 type 패키지명 변경
taehee-kim-dev Mar 16, 2021
39a93f7
feat: 체스판의 열에 해당하는 Rank 열거형 추가
taehee-kim-dev Mar 16, 2021
53ac478
feat: 체스판의 행에 해당하는 File 열거형 추가
taehee-kim-dev Mar 16, 2021
1557700
feat: 체스판의 한 칸에 해당하는 Coordinate VO 추가
taehee-kim-dev Mar 16, 2021
39b6b6a
feat: 고유한 1개 좌표를 가지는 체스판의 한 칸 Cell 추가
taehee-kim-dev Mar 16, 2021
2a34f66
feat: 8 * 8 의 빈 체스 판 싱글톤 생성 기능 추가
taehee-kim-dev Mar 16, 2021
a8a60f6
feat: 체스판에서 사용할 기물들에 대한 기본 기능 구현
taehee-kim-dev Mar 16, 2021
40cc3b4
feat: 이름과 팀 종류를 가진 기물을 생성하는 기능 구현
taehee-kim-dev Mar 17, 2021
b62d0c3
feat: 체스판의 빈 공간에 기물을 놓는 기능 구현
taehee-kim-dev Mar 17, 2021
ae08e7f
feat: 체스판 생성 후 흑백팀의 Pawn들을 배치하는 기능 구현
taehee-kim-dev Mar 17, 2021
af63383
refactor: PlayerType -> TeamType 으로 네이밍 변경
taehee-kim-dev Mar 17, 2021
b8f6ea2
refactor: 8Rank 흑의 초기 기물 배치 기능 구현
taehee-kim-dev Mar 17, 2021
313e0b5
refactor: 1Rank 백의 초기 기물 배치 기능 구현
taehee-kim-dev Mar 17, 2021
4b3b619
docs: README.md 업데이트
taehee-kim-dev Mar 17, 2021
4ad1ee5
feat: 체스 판 전체 출력 기능 구현
taehee-kim-dev Mar 17, 2021
420af5d
refactor: 체스 보드 테스트 중복 제거 및 리팩토링
taehee-kim-dev Mar 17, 2021
e05fb25
refactor: 메소드 이름 변경
taehee-kim-dev Mar 17, 2021
538a102
refactor: 중복 제거 리팩토링
taehee-kim-dev Mar 17, 2021
f59ba5b
refactor: 생성자 닫기
taehee-kim-dev Mar 17, 2021
aaeb18a
fix: 테스트 오류 수정
taehee-kim-dev Mar 17, 2021
8da26ee
docs: README.md 업데이트
taehee-kim-dev Mar 17, 2021
30860f9
docs: README.md 업데이트
taehee-kim-dev Mar 17, 2021
a3ca20c
feat: 플레이어 move 명령어 입력 처리 기능 추가
taehee-kim-dev Mar 17, 2021
48d212f
feat: 유효하지 않은 명령 입력시, 예외 발생 기능 추가
taehee-kim-dev Mar 17, 2021
ba1b270
feat: 현재 위치에 자신의 기물이 없으면, 예외 발생 기능 추가
taehee-kim-dev Mar 17, 2021
47618bc
docs: README.md 업데이트
taehee-kim-dev Mar 17, 2021
96d7c23
feat: 블랙 팀일 때 전진하면 Coordinate는 rank가 1씩 차감되는 기능 구현
taehee-kim-dev Mar 17, 2021
245437a
feat: Rook 이동 기능 구현
taehee-kim-dev Mar 18, 2021
3327ff2
test: Rook 이동 테스트 보완
taehee-kim-dev Mar 18, 2021
4642fd1
feat: Bishop 이동 기능 구현
taehee-kim-dev Mar 18, 2021
49fc792
feat: Queen 이동 기능 구현
taehee-kim-dev Mar 18, 2021
bb920a8
feat: King 이동 기능 구현
taehee-kim-dev Mar 18, 2021
180d074
test: King 테스트 보완
taehee-kim-dev Mar 18, 2021
da5d806
docs: README.md 업데이트
taehee-kim-dev Mar 19, 2021
4167aa1
docs: README.md 업데이트
taehee-kim-dev Mar 19, 2021
ae09633
docs: README.md 업데이트
taehee-kim-dev Mar 19, 2021
c98632a
feat: Knight 이동 기능 구현
taehee-kim-dev Mar 19, 2021
b63fd4e
feat: Pawn 이동 기능 구현 보완
taehee-kim-dev Mar 19, 2021
9b06418
docs: README.md 업데이트
taehee-kim-dev Mar 19, 2021
9ffef35
feat: 점수 계산 기능 구현
taehee-kim-dev Mar 19, 2021
a5d9fba
feat: King이 죽었는지 판단하는 기능 구현
taehee-kim-dev Mar 19, 2021
2a1e00b
feat: 점수 상태 출력 기능, King이 잡혔을시 게임 종료 및 승자 출력 기능 구현
taehee-kim-dev Mar 19, 2021
e5daa82
docs: README.md 업데이트
taehee-kim-dev Mar 19, 2021
6752410
refactor: King이 잡힐 시 게임 종료 버그 수정
taehee-kim-dev Mar 20, 2021
15503d3
refactor: 기물들 추상클래스 Piece로 추상화 (King, Queen, Bishop, Rook) 및 King 체크 …
taehee-kim-dev Mar 20, 2021
264a5a5
refactor: Piece의 방향을 Direction 메서드 호출로 초기화하도록 수정
taehee-kim-dev Mar 20, 2021
bd65ece
refactor: 사용하지 않는 클래스, 함수 및 주석 삭제
taehee-kim-dev Mar 20, 2021
442d943
refactor: Board에 Cell 추가
taehee-kim-dev Mar 20, 2021
5d14681
refactor: 상대 기물 선택 시, 예외 발생
taehee-kim-dev Mar 20, 2021
4ed2f5d
refactor: 사용하지 않는 OTHERS 삭제
taehee-kim-dev Mar 20, 2021
a6da422
refactor: Application 컨벤션에 맞게 수정
taehee-kim-dev Mar 20, 2021
768944a
refactor: OutputView 컨벤션에 맞게 수정
taehee-kim-dev Mar 20, 2021
0a976c9
refactor: King 컨벤션에 맞게 수정
taehee-kim-dev Mar 20, 2021
a729c0e
refactor: Knight 컨벤션에 맞게 수정
taehee-kim-dev Mar 20, 2021
e211ea5
refactor: 기물들 이동 가능 체크 메서드 컨벤션에 맞게 수정
taehee-kim-dev Mar 20, 2021
8eee17d
refactor: 점수 계산 로직 컨벤션에 맞게 수정
taehee-kim-dev Mar 20, 2021
f08de53
refactor: 방향 계산 로직 컨벤션에 맞게 수정
taehee-kim-dev Mar 20, 2021
64553cc
refactor: 컨벤션에 맞게 포맷팅
taehee-kim-dev Mar 20, 2021
dde790f
docs: README.md 업데이트
taehee-kim-dev Mar 21, 2021
b83becf
refactor: 프로덕션 코드 및 테스트 코드 리팩토링
taehee-kim-dev Mar 21, 2021
58c3a06
docs: README.md 업데이트
taehee-kim-dev Mar 21, 2021
ee8e373
test: Pawn이 한 file에 2개 이상 있는 경우 점수 계산 테스트 추가
taehee-kim-dev Mar 21, 2021
e56bf21
fix: Pawn이 한 file에 2개 이상 있는 경우 점수 계산 버그 수정
taehee-kim-dev Mar 21, 2021
4eb5c07
docs: README.md 업데이트
taehee-kim-dev Mar 21, 2021
4dc6128
refactor: 클래스 분리
taehee-kim-dev Mar 21, 2021
c068a17
docs: README.md 업데이트
taehee-kim-dev Mar 21, 2021
06c6e4b
refactor: 패키지 경로 이동
taehee-kim-dev Mar 22, 2021
885f588
test: 명령어 문자열 입력으로 Enum 상수 가져오기 테스트 추가
taehee-kim-dev Mar 22, 2021
aaeabd5
refactor: 불필요한 함수 분리 제거
taehee-kim-dev Mar 22, 2021
1e6fe57
docs: README.md 업데이트
taehee-kim-dev Mar 22, 2021
e67b8b6
refactor: 명령 입력 요청 관련 DTO 추가
taehee-kim-dev Mar 22, 2021
9814246
refactor: DTO를 사용해 Controller, View에서 팀 색상 도메인 제거
taehee-kim-dev Mar 22, 2021
56b51db
refactor: DTO를 사용해 Controller, View에서 점수 도메인 제거
taehee-kim-dev Mar 22, 2021
ccbd664
refactor: DTO를 사용해 Controller, View에서 보드 도메인 제거 및 ChessGame static 제거
taehee-kim-dev Mar 22, 2021
3cc8d51
refactor: 생성자 접근제한자 수정
taehee-kim-dev Mar 22, 2021
8040043
refactor: King이 2개 미만이면 isKingDead()가 true를 반환하도록 수정
taehee-kim-dev Mar 22, 2021
d001eb3
refactor: get의 의미가 드러나도록 getter 이름 수정
taehee-kim-dev Mar 22, 2021
624c541
refactor: 캐싱 클래스들의 생성자 접근제한자를 private로 변경하여 인스턴스화 방지
taehee-kim-dev Mar 22, 2021
a462dff
refactor: 직관적이고, 테스트하기 쉽도록, 테스트 코드 리팩토링
taehee-kim-dev Mar 22, 2021
4e91123
docs: README.md 업데이트
taehee-kim-dev Mar 22, 2021
def1e60
refactor: start 명령어를 입력하지 않은 상태에서, start, end 이외의 명령어를 입력하면, 예외를 발생시키…
taehee-kim-dev Mar 22, 2021
68a7b7b
refactor: 불필요한 참조 객체 선언 부분 삭제
taehee-kim-dev Mar 23, 2021
7ace7e6
refactor: 추상 클래스 생성자의 접근제어자 protected로 변경
taehee-kim-dev Mar 23, 2021
cb664b6
test: 보드 Custom 세팅 객체 생성 에러 테스트 추가
taehee-kim-dev Mar 23, 2021
eaa2bbb
refactor: 보드 기본 세팅 테스트 네이밍 변경
taehee-kim-dev Mar 23, 2021
c0c1afb
test: 보드 세팅 객체 주입 테스트 추가
taehee-kim-dev Mar 23, 2021
f35f9b1
feat: 보드 세팅 객체 주입시, 객체 타입 검사 기능 추가
taehee-kim-dev Mar 23, 2021
e0bef71
feat: Service 추가
taehee-kim-dev Mar 23, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
99 changes: 98 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,99 @@
# java-chess
# java-chess
체스 게임 구현을 위한 저장소

<br>

## 1단계 - 체스판 초기화

- [x] 게임 시작 안내문을 출력한다.
- [x] `end` 를 입력하면 종료한다.
- [x] `start` 를 입력하면 게임을 시작한다.
- [x] `start` 를 입력하지 않은 상태에서, `start`, `end`이외의 명령어를 입력하면, 예외를 발생시킨다.
- [x] 체스 게임 초기화
- [x] 플레이어 생성
- [x] 흑 팀 플레이어 생성
- [x] 백 팀 플레이어 생성
- [x] 체스판 생성
- [x] 각 열을 File, 각 행을 Rank라고 한다.
- [x] 체스판의 위치는 File과 Rank를 가진다.
- [x] 체스판의 1칸은 고유한 1개의 위치를 가진다.
- [x] 위치는 캐싱 되어있다.
- [x] 8 * 8 의 빈 칸들로 이루어진 체스 판을 생성한다.
- [x] 기물 생성
- [x] 기물들을 종류와 색깔 별로 하나씩 생성한다.
- [x] 기물들은 캐싱 되어있다.
- [x] 기물 배치
- [x] 배치 방식은 공식 체스 룰을 따른다.
- [x] 흑의 기물들을 상단에, 백의 기물들을 하단에 배치한다.
- [x] 기물들을 플레이어들에게 나눠준다.
- [x] 기물들을 체스판에 배치한다.
- [x] 체스 판 출력
- [x] 체스 판 전체를 출력한다.
- [x] 흑의 기물들은 대문자로 표기하고, 백의 기물들은 소문자로 표기한다.
- [x] `end` 외의 명령어가 입력 될 때 마다, 체스 판을 출력한다.

<br>

## 2단계 - 말 이동

- [x] `move ${현재위치} ${도착위치}` 를 입력받는다.
- [x] 위의 형식에 맞지 않으면, 예외를 발생시킨다.
- [x] `${현재위치}` 와 `${도착위치}` 의 File, Rank가 유효하지 않으면, 이동할 수 없다.
- [x] `${현재위치}` 에 자신의 기물이 없으면, 예외를 발생시킨다.
- [x] 비어있는 칸인 경우
- [x] 적의 기물이 있는 칸인 경우
- [x] 보드에서 `${현재위치}` 에 있는 기물을 `${도착위치}` 로 이동시킨다.
- [x] 기물이 `${도착위치}` 에 이동할 수 있으면, 이동시킨다.
- [x] 이동할 수 없으면, 예외를 발생시킨다.
- [x] 보드의 기물 상태를 갱신한다.
- [x] 플레이어들의 기물 상태를 갱신한다.
- [x] 말 이동 가능 여부 판단
- [x] 말 이동 방식은 공식 체스 룰을 따른다.
- [x] Rook, Bishop, Queen, King
- [x] `${현재위치}` 부터 `${도착위치}` 까지의 방향(기울기)을 구한다.
- [x] 이동 명령의 방향이, 해당 기물이 이동할 수 없는 방향이면, 예외를 발생시킨다.
- [x] 이동 명령 방향으로 이동할 수 있으면, 한 칸씩 `${도착위치}` 까지 검사한다.
- [x] 이동 경로 중간(`${출발위치}` 다음부터 `${도착위치}` 직전까지)에 기물이 존재하면, 이동할 수 없다.
- [x] `${도착위치}` 에 아군의 기물이 있으면, 이동할 수 없다.
- [x] Knight
- [x] `${현재위치}` 부터 `${도착위치}` 까지의 방향을 구한다.
- [x] 이동 명령의 방향이, 해당 기물이 이동할 수 없는 방향이면, 예외를 발생시킨다.
- [x] 이동 경로 중간(`${출발위치}` 다음부터 `${도착위치}` 직전까지)에 기물이 존재해도, 이동할 수 있다.
- [x] `${도착위치}` 에 아군 기물이 있으면, 이동할 수 없다.
- [x] Pawn
- [x] `${현재위치}` 부터 `${도착위치}` 까지의 방향(기울기)을 구한다.
- [x] 이동 명령의 방향이, 해당 기물이 이동할 수 없는 방향이면, 예외를 발생시킨다.
- [x] 흑 팀일 때 : LEFT_DOWN, DOWN, RIGHT_DOWN
- [x] 백 팀일 때 : LEFT_UP, UP, RIGHT_UP
- [x] 이동 명령 방향이 수직 방향 일 때
- [x] 앞으로 한 칸 이동할 수 있다.
- [x] 처음 위치일 때
- [x] 두 칸 이동할 수 있다.
- [x] 이동 경로 중간(`${출발위치}` 다음부터 `${도착위치}` 직전까지)에 기물이 존재하면, 이동할 수 없다.
- [x] `${도착위치}` 에 기물이 있으면, 이동할 수 없다.
- [x] 이동 명령 방향이 대각선 방향 일 때
- [x] `${도착위치}` 에 적의 기물이 없으면, 이동할 수 없다.

<br>

## 3단계 - 승패 및 점수

- [x] King이 잡힌 경우
- [x] King이 잡히는 팀이 진다.
- [x] 잡히는 즉시, 체스 판을 출력하고, 게임을 종료한다.
- [x] `${승리한 팀}이 이겼습니다.` 를 출력한다.
- [x] King이 잡히지 않은 상태
- [x] `status` 명령 입력
- [x] 각 팀의 현재 점수를 출력한다.
- [x] 점수 계산
- [x] 각 기물의 점수는, King은 0점, Queen은 9점, Rook은 5점, Bishop은 3점, Knight는 2.5점 이다.
- [x] Pawn의 기본 점수는 1점이다. 하지만 한 File(열)에 같은 팀의 Pawn이 있는 경우, 1점이 아닌 0.5점으로 계산한다.
- [x] 각 팀의 점수를 따로 계산한다. (요구사항)
- [x] Pawn을 제외한 기물들 점수 계산
- [x] 기물들의 점수를 모두 더한다.
- [x] Pawn 점수 계산
- [x] 각 File(열)별로 점수를 계산해 합친다.
- [x] 한 File(열)에 Pawn이 2개 이상이면, 각 Pawn의 점수를 0.5점으로 계산한다.
- [x] 그 외에는 각 Pawn의 점수를 1점으로 계산한다.

<br>
19 changes: 19 additions & 0 deletions src/main/java/chess/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package chess;

import chess.controller.ChessController;
import chess.domain.board.setting.BoardDefaultSetting;
import chess.domain.board.setting.BoardSetting;
import chess.domain.game.ChessGame;
import chess.service.ChessService;

public class Application {
public static void main(String[] args) {
BoardSetting boardSetting = new BoardDefaultSetting();
ChessGame chessGame = new ChessGame(boardSetting);

ChessService chessService = new ChessService(chessGame);
ChessController chessController = new ChessController(chessService);

chessController.run();
}
}
7 changes: 3 additions & 4 deletions src/main/java/chess/WebUIChessApplication.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package chess;

import spark.ModelAndView;
import spark.template.handlebars.HandlebarsTemplateEngine;
import static spark.Spark.get;

import java.util.HashMap;
import java.util.Map;

import static spark.Spark.get;
import spark.ModelAndView;
import spark.template.handlebars.HandlebarsTemplateEngine;

public class WebUIChessApplication {
public static void main(String[] args) {
Expand Down
100 changes: 100 additions & 0 deletions src/main/java/chess/controller/ChessController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package chess.controller;

import chess.controller.dto.request.CommandRequestDTO;
import chess.controller.dto.response.ChessGameResponseDTO;
import chess.controller.dto.response.MoveResultResponseDTO;
import chess.service.ChessService;
import chess.view.InputView;
import chess.view.OutputView;

public class ChessController {
private static final String START_COMMAND_INPUT = "start";
private static final String MOVE_COMMAND_INPUT = "move";
private static final String STATUS_COMMAND_INPUT = "status";
private static final String END_COMMAND_INPUT = "end";

private final ChessService chessService;

public ChessController(ChessService chessService) {
this.chessService = chessService;
}

public void run() {
OutputView.printGameStartMessage();
boolean isGameEnd = false;
while (!isGameEnd) {
CommandRequestDTO commandRequestDTO = InputView.getCommandRequest();
ChessGameResponseDTO chessGameResponseDTO
= handleRequestCommandInputAndGetIsGameEnd(commandRequestDTO);
isGameEnd = chessGameResponseDTO.isGameEnd();
}
}

private ChessGameResponseDTO handleRequestCommandInputAndGetIsGameEnd(
CommandRequestDTO commandRequestDTO) {
ChessGameResponseDTO chessGameResponseDTO
= getChessGameResponseWhenRequestStartOrEnd(commandRequestDTO);
if (chessGameResponseDTO != null) {
return chessGameResponseDTO;
}
chessGameResponseDTO = getChessGameResponseWhenRequestMoveOrStatus(commandRequestDTO);
if (chessGameResponseDTO != null) {
return chessGameResponseDTO;
}
throw new IllegalArgumentException("유효하지 않은 명령어 입니다.");
}

private ChessGameResponseDTO getChessGameResponseWhenRequestStartOrEnd(
CommandRequestDTO commandRequestDTO) {
if (START_COMMAND_INPUT.equals(commandRequestDTO.getCommandInput())) {
return getChessGameResponseWhenRequestStartCommand();
}
if (END_COMMAND_INPUT.equals(commandRequestDTO.getCommandInput())) {
return getChessGameResponseWhenRequestEndCommand();
}
return null;
}

private ChessGameResponseDTO getChessGameResponseWhenRequestMoveOrStatus(
CommandRequestDTO commandRequestDTO) {
if (MOVE_COMMAND_INPUT.equals(commandRequestDTO.getCommandInput())) {
return getChessGameResponseWhenRequestMoveCommand(commandRequestDTO);
}
if (STATUS_COMMAND_INPUT.equals(commandRequestDTO.getCommandInput())) {
return getChessGameResponseWhenRequestStatusCommand();
}
return null;
}

private ChessGameResponseDTO getChessGameResponseWhenRequestStartCommand() {
ChessGameResponseDTO chessGameResponseDTO =
chessService.startChessGameAndGetInitialBoardStatus();
OutputView.printBoard(chessGameResponseDTO.getBoardStatusResponseDTO());
return chessGameResponseDTO;
}

private ChessGameResponseDTO getChessGameResponseWhenRequestEndCommand() {
boolean isGameEnd = true;
return new ChessGameResponseDTO(isGameEnd);
}

private ChessGameResponseDTO getChessGameResponseWhenRequestMoveCommand(
CommandRequestDTO commandRequestDTO) {
ChessGameResponseDTO chessGameResponseDTO
= chessService.movePieceAndGetResult(commandRequestDTO);
MoveResultResponseDTO moveResultResponseDTO
= chessGameResponseDTO.getMoveResultResponseDTO();
OutputView.printBoard(moveResultResponseDTO.getBoardStatusResponseDTO());
if (moveResultResponseDTO.isKingDead()) {
OutputView.printWinnerTeamColor(moveResultResponseDTO.getWinnerTeamColor());
return chessGameResponseDTO;
}
return chessGameResponseDTO;
}

private ChessGameResponseDTO getChessGameResponseWhenRequestStatusCommand() {
ChessGameResponseDTO chessGameResponseDTO = chessService.getScores();
OutputView.printScores(chessGameResponseDTO.getScoresResponseDTO());
return chessGameResponseDTO;
}
}
31 changes: 31 additions & 0 deletions src/main/java/chess/controller/dto/request/CommandRequestDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package chess.controller.dto.request;

public class CommandRequestDTO {
private final String commandInput;
private final String startPositionInput;
private final String destinationInput;

public CommandRequestDTO(String commandInput, String startPositionInput,
String destinationInput) {

this.commandInput = commandInput;
this.startPositionInput = startPositionInput;
this.destinationInput = destinationInput;
}

public CommandRequestDTO(String commandInput) {
this(commandInput, null, null);
}

public String getCommandInput() {
return commandInput;
}

public String getStartPositionInput() {
return startPositionInput;
}

public String getDestinationInput() {
return destinationInput;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package chess.controller.dto.response;

import java.util.ArrayList;
import java.util.List;

public class BoardStatusResponseDTO {
private final List<String> cellsStatus;

public BoardStatusResponseDTO(List<String> cellsStatus) {
this.cellsStatus = new ArrayList<>(cellsStatus);
}

public List<String> getCellsStatus() {
return cellsStatus;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package chess.controller.dto.response;

public class ChessGameResponseDTO {
private BoardStatusResponseDTO boardStatusResponseDTO;
private MoveResultResponseDTO moveResultResponseDTO;
private ScoresResponseDTO scoresResponseDTO;
private boolean isGameEnd;

public ChessGameResponseDTO(BoardStatusResponseDTO boardStatusResponseDTO) {
this.boardStatusResponseDTO = boardStatusResponseDTO;
}

public ChessGameResponseDTO(MoveResultResponseDTO moveResultResponseDTO) {
this.moveResultResponseDTO = moveResultResponseDTO;
isGameEnd = moveResultResponseDTO.isKingDead();
}

public ChessGameResponseDTO(ScoresResponseDTO scoresResponseDTO) {
this.scoresResponseDTO = scoresResponseDTO;
}

public ChessGameResponseDTO(boolean isGameEnd) {
this.isGameEnd = isGameEnd;
}

public BoardStatusResponseDTO getBoardStatusResponseDTO() {
return boardStatusResponseDTO;
}

public MoveResultResponseDTO getMoveResultResponseDTO() {
return moveResultResponseDTO;
}

public ScoresResponseDTO getScoresResponseDTO() {
return scoresResponseDTO;
}

public boolean isGameEnd() {
return isGameEnd;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package chess.controller.dto.response;

public class MoveResultResponseDTO {
private final BoardStatusResponseDTO boardStatusResponseDTO;
private final boolean isKingDead;
private final String winnerTeamColor;

public MoveResultResponseDTO(BoardStatusResponseDTO boardStatusResponseDTO,
boolean isKingDead, String winnerTeamColor) {

this.boardStatusResponseDTO = boardStatusResponseDTO;
this.isKingDead = isKingDead;
this.winnerTeamColor = winnerTeamColor;
}

public BoardStatusResponseDTO getBoardStatusResponseDTO() {
return boardStatusResponseDTO;
}

public boolean isKingDead() {
return isKingDead;
}

public String getWinnerTeamColor() {
return winnerTeamColor;
}
}
19 changes: 19 additions & 0 deletions src/main/java/chess/controller/dto/response/ScoresResponseDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package chess.controller.dto.response;

public class ScoresResponseDTO {
private final double blackTeamScore;
private final double whiteTeamScore;

public ScoresResponseDTO(double blackTeamScore, double whiteTeamScore) {
this.blackTeamScore = blackTeamScore;
this.whiteTeamScore = whiteTeamScore;
}

public double getBlackTeamScore() {
return blackTeamScore;
}

public double getWhiteTeamScore() {
return whiteTeamScore;
}
}