From 7cbc1373ebd74d4c74648dd0c565836cafbae78f Mon Sep 17 00:00:00 2001 From: DONGHEON LEE <50160282+opdshe@users.noreply.github.com> Date: Sun, 22 Nov 2020 15:16:18 +0900 Subject: [PATCH 01/10] =?UTF-8?q?docs:=20README.md=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index a8ae9b8..be4be2e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,10 @@ # java-chess 체스 게임 저장소 + +### 기능 구현 목록 +- 좌표 변환 기능 +- 체스판 초기화 +- 사용자 입력 받기 +- 사용자 입력 검증 +- 점수 계산 +- 말들의 이동 로직 구현 From fb497612cf3514071c665c5f7e3b817230ee1540 Mon Sep 17 00:00:00 2001 From: opdshe Date: Sun, 22 Nov 2020 21:00:18 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EA=B8=B0=20=EB=B0=8F=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/Application.java | 7 ++++++ src/main/java/controller/ChessGame.java | 18 +++++++++++++++ .../NotSupportedOperationException.java | 9 ++++++++ src/main/java/utils/Validator.java | 13 +++++++++++ src/main/java/view/InputView.java | 22 +++++++++++++++++++ src/main/java/view/OutputView.java | 15 +++++++++++++ 6 files changed, 84 insertions(+) create mode 100644 src/main/java/controller/Application.java create mode 100644 src/main/java/controller/ChessGame.java create mode 100644 src/main/java/exceptions/NotSupportedOperationException.java create mode 100644 src/main/java/utils/Validator.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/OutputView.java diff --git a/src/main/java/controller/Application.java b/src/main/java/controller/Application.java new file mode 100644 index 0000000..176d7bb --- /dev/null +++ b/src/main/java/controller/Application.java @@ -0,0 +1,7 @@ +package controller; + +public class Application { + public static void main(String[] args) { + ChessGame.play(); + } +} diff --git a/src/main/java/controller/ChessGame.java b/src/main/java/controller/ChessGame.java new file mode 100644 index 0000000..1ec0ef5 --- /dev/null +++ b/src/main/java/controller/ChessGame.java @@ -0,0 +1,18 @@ +package controller; + +import view.InputView; +import view.OutputView; + +import java.util.Arrays; + +public class ChessGame { + public static final String OPERATION_START = "start"; + public static final String OPERATION_END = "end"; + public static final String OPERATION_MOVE = "move"; + + public static void play() { + OutputView.printGuideMessage(); + String[] splitOperation = InputView.inputOperation(); + System.out.println(Arrays.toString(splitOperation)); + } +} diff --git a/src/main/java/exceptions/NotSupportedOperationException.java b/src/main/java/exceptions/NotSupportedOperationException.java new file mode 100644 index 0000000..d7f18d6 --- /dev/null +++ b/src/main/java/exceptions/NotSupportedOperationException.java @@ -0,0 +1,9 @@ +package exceptions; + +public class NotSupportedOperationException extends RuntimeException { + private static final String MESSAGE = "지원하지 않는 동작입니다. 가이드 메세지를 확인한 후 다시 입력해 주세요. "; + + public NotSupportedOperationException() { + super(MESSAGE); + } +} diff --git a/src/main/java/utils/Validator.java b/src/main/java/utils/Validator.java new file mode 100644 index 0000000..be80947 --- /dev/null +++ b/src/main/java/utils/Validator.java @@ -0,0 +1,13 @@ +package utils; + +import controller.ChessGame; +import exceptions.NotSupportedOperationException; + +public class Validator { + public static void validateOperation(String[] splitOperation) { + if (!splitOperation[0].equals(ChessGame.OPERATION_START) && !splitOperation[0].equals(ChessGame.OPERATION_END) && + !splitOperation[0].equals(ChessGame.OPERATION_MOVE)) { + throw new NotSupportedOperationException(); + } + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 0000000..217d964 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,22 @@ +package view; + +import exceptions.NotSupportedOperationException; +import utils.Validator; + +import java.util.Scanner; + +public class InputView { + private static final Scanner SCANNER = new Scanner(System.in); + + public static String[] inputOperation() { + String operation = SCANNER.nextLine(); + String[] splitOperation = operation.split(" "); + try{ + Validator.validateOperation(splitOperation); + } catch (NotSupportedOperationException e){ + OutputView.printMessage(e.getMessage()); + splitOperation= inputOperation(); + } + return splitOperation; + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 0000000..e24e3ce --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,15 @@ +package view; + +public class OutputView { + private static String GUIDE_MESSAGE = "체스 게임을 시작합니다.\n게임 시작 : start\n게임 종료 : end\n" + + "게임 이동 :move source위치 target위치 - 예. move b2 b3"; + + public static void printGuideMessage(){ + printMessage(GUIDE_MESSAGE); + } + + public static void printMessage(String message) { + System.out.println(message); + } + +} From 7ec48f71e0a74be052ee85d13f1139ba7c79bbf7 Mon Sep 17 00:00:00 2001 From: opdshe Date: Mon, 23 Nov 2020 21:00:32 +0900 Subject: [PATCH 03/10] =?UTF-8?q?feat:=20=EC=B2=B4=EC=8A=A4=ED=8C=90=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/ChessGame.java | 6 +-- src/main/java/domain/Board.java | 20 ++++++++ src/main/java/domain/Player.java | 23 +++++++++ src/main/java/domain/Position.java | 11 +++++ src/main/java/domain/pieces/Bishop.java | 11 +++++ src/main/java/domain/pieces/King.java | 11 +++++ src/main/java/domain/pieces/Knight.java | 11 +++++ src/main/java/domain/pieces/Pawn.java | 11 +++++ src/main/java/domain/pieces/Piece.java | 13 +++++ src/main/java/domain/pieces/PieceCreator.java | 48 +++++++++++++++++++ src/main/java/domain/pieces/Queen.java | 11 +++++ src/main/java/domain/pieces/Rook.java | 11 +++++ src/main/java/domain/pieces/Team.java | 5 ++ src/main/java/utils/Validator.java | 3 ++ src/main/java/view/InputView.java | 6 +-- src/main/java/view/OutputView.java | 3 +- 16 files changed, 196 insertions(+), 8 deletions(-) create mode 100644 src/main/java/domain/Board.java create mode 100644 src/main/java/domain/Player.java create mode 100644 src/main/java/domain/Position.java create mode 100644 src/main/java/domain/pieces/Bishop.java create mode 100644 src/main/java/domain/pieces/King.java create mode 100644 src/main/java/domain/pieces/Knight.java create mode 100644 src/main/java/domain/pieces/Pawn.java create mode 100644 src/main/java/domain/pieces/Piece.java create mode 100644 src/main/java/domain/pieces/PieceCreator.java create mode 100644 src/main/java/domain/pieces/Queen.java create mode 100644 src/main/java/domain/pieces/Rook.java create mode 100644 src/main/java/domain/pieces/Team.java diff --git a/src/main/java/controller/ChessGame.java b/src/main/java/controller/ChessGame.java index 1ec0ef5..65be6d8 100644 --- a/src/main/java/controller/ChessGame.java +++ b/src/main/java/controller/ChessGame.java @@ -1,18 +1,18 @@ package controller; +import domain.Board; import view.InputView; import view.OutputView; -import java.util.Arrays; - public class ChessGame { public static final String OPERATION_START = "start"; public static final String OPERATION_END = "end"; public static final String OPERATION_MOVE = "move"; public static void play() { + Board board = new Board(); OutputView.printGuideMessage(); String[] splitOperation = InputView.inputOperation(); - System.out.println(Arrays.toString(splitOperation)); + } } diff --git a/src/main/java/domain/Board.java b/src/main/java/domain/Board.java new file mode 100644 index 0000000..4aa6c84 --- /dev/null +++ b/src/main/java/domain/Board.java @@ -0,0 +1,20 @@ +package domain; + +import domain.pieces.PieceCreator; +import domain.pieces.Team; + +public class Board { + private Player white; + private Player black; + + public Board() { + initBoard(); + } + + private void initBoard() { + white = new Player(Team.WHITE); + black = new Player(Team.BLACK); + white.setPieces(PieceCreator.createPieces(white)); + black.setPieces(PieceCreator.createPieces(black)); + } +} diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java new file mode 100644 index 0000000..7a91b5d --- /dev/null +++ b/src/main/java/domain/Player.java @@ -0,0 +1,23 @@ +package domain; + +import domain.pieces.Piece; +import domain.pieces.Team; + +import java.util.List; + +public class Player { + private Team team; + private List pieces; + + public Player(Team team) { + this.team = team; + } + + public void setPieces(List pieces) { + this.pieces = pieces; + } + + public Team getTeam() { + return team; + } +} diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java new file mode 100644 index 0000000..acb88d0 --- /dev/null +++ b/src/main/java/domain/Position.java @@ -0,0 +1,11 @@ +package domain; + +public class Position { + private int y; + private int x; + + public Position(int y, int x) { + this.y = y; + this.x = x; + } +} diff --git a/src/main/java/domain/pieces/Bishop.java b/src/main/java/domain/pieces/Bishop.java new file mode 100644 index 0000000..d179fb6 --- /dev/null +++ b/src/main/java/domain/pieces/Bishop.java @@ -0,0 +1,11 @@ +package domain.pieces; + +import domain.Position; + +public class Bishop extends Piece { + private static final char REPRESENTATION = 'b'; + + public Bishop(Position position) { + super(position, REPRESENTATION); + } +} diff --git a/src/main/java/domain/pieces/King.java b/src/main/java/domain/pieces/King.java new file mode 100644 index 0000000..7218084 --- /dev/null +++ b/src/main/java/domain/pieces/King.java @@ -0,0 +1,11 @@ +package domain.pieces; + +import domain.Position; + +public class King extends Piece { + private static final char REPRESENTATION = 'k'; + + public King(Position position) { + super(position, REPRESENTATION); + } +} diff --git a/src/main/java/domain/pieces/Knight.java b/src/main/java/domain/pieces/Knight.java new file mode 100644 index 0000000..fe16934 --- /dev/null +++ b/src/main/java/domain/pieces/Knight.java @@ -0,0 +1,11 @@ +package domain.pieces; + +import domain.Position; + +public class Knight extends Piece { + private static final char REPRESENTATION = 'n'; + + public Knight(Position position) { + super(position, REPRESENTATION); + } +} diff --git a/src/main/java/domain/pieces/Pawn.java b/src/main/java/domain/pieces/Pawn.java new file mode 100644 index 0000000..a21f68c --- /dev/null +++ b/src/main/java/domain/pieces/Pawn.java @@ -0,0 +1,11 @@ +package domain.pieces; + +import domain.Position; + +public class Pawn extends Piece { + private static final char REPRESENTATION = 'r'; + + public Pawn(Position position) { + super(position, REPRESENTATION); + } +} diff --git a/src/main/java/domain/pieces/Piece.java b/src/main/java/domain/pieces/Piece.java new file mode 100644 index 0000000..fed372e --- /dev/null +++ b/src/main/java/domain/pieces/Piece.java @@ -0,0 +1,13 @@ +package domain.pieces; + +import domain.Position; + +public class Piece { + private Position position; + private char representation; + + public Piece(Position position, char representation) { + this.position = position; + this.representation = representation; + } +} diff --git a/src/main/java/domain/pieces/PieceCreator.java b/src/main/java/domain/pieces/PieceCreator.java new file mode 100644 index 0000000..09c42b1 --- /dev/null +++ b/src/main/java/domain/pieces/PieceCreator.java @@ -0,0 +1,48 @@ +package domain.pieces; + +import domain.Player; +import domain.Position; + +import java.util.ArrayList; +import java.util.List; + +public class PieceCreator { + private static final int MIN_ROW_OF_BOARD = 1; + private static final int MAX_ROW_OF_BOARD = 8; + private static final int WHITE_PAWNS_ROW = 2; + private static final int WHITE_OTHERS_ROW = 1; + private static final int BLACK_PAWNS_ROW = 7; + private static final int BLACK_OTHERS_ROW = 8; + + private PieceCreator() { + } + + public static List createPieces(Player player) { + List pieces = new ArrayList<>(); + if (player.getTeam() == Team.WHITE) { + putPawns(pieces, WHITE_PAWNS_ROW); + putOthers(pieces, WHITE_OTHERS_ROW); + } else { + putPawns(pieces, BLACK_PAWNS_ROW); + putOthers(pieces, BLACK_OTHERS_ROW); + } + return pieces; + } + + private static void putOthers(List pieces, int row) { + pieces.add(new Rook(new Position(row, 1))); + pieces.add(new Knight(new Position(row, 2))); + pieces.add(new Bishop(new Position(row, 3))); + pieces.add(new Queen(new Position(row, 4))); + pieces.add(new King(new Position(row, 5))); + pieces.add(new Bishop(new Position(row, 6))); + pieces.add(new Knight(new Position(row, 7))); + pieces.add(new Rook(new Position(row, 8))); + } + + private static void putPawns(List pieces, int row) { + for (int column = MIN_ROW_OF_BOARD; column < MAX_ROW_OF_BOARD; column++) { + pieces.add(new Pawn(new Position(row, column))); + } + } +} diff --git a/src/main/java/domain/pieces/Queen.java b/src/main/java/domain/pieces/Queen.java new file mode 100644 index 0000000..f6cfcfb --- /dev/null +++ b/src/main/java/domain/pieces/Queen.java @@ -0,0 +1,11 @@ +package domain.pieces; + +import domain.Position; + +public class Queen extends Piece { + private static final char REPRESENTATION = 'q'; + + public Queen(Position position) { + super(position, REPRESENTATION); + } +} diff --git a/src/main/java/domain/pieces/Rook.java b/src/main/java/domain/pieces/Rook.java new file mode 100644 index 0000000..736a96a --- /dev/null +++ b/src/main/java/domain/pieces/Rook.java @@ -0,0 +1,11 @@ +package domain.pieces; + +import domain.Position; + +public class Rook extends Piece { + private static final char REPRESENTATION = 'p'; + + public Rook(Position position) { + super(position, REPRESENTATION); + } +} diff --git a/src/main/java/domain/pieces/Team.java b/src/main/java/domain/pieces/Team.java new file mode 100644 index 0000000..efab91f --- /dev/null +++ b/src/main/java/domain/pieces/Team.java @@ -0,0 +1,5 @@ +package domain.pieces; + +public enum Team { + WHITE, BLACK; +} diff --git a/src/main/java/utils/Validator.java b/src/main/java/utils/Validator.java index be80947..411098a 100644 --- a/src/main/java/utils/Validator.java +++ b/src/main/java/utils/Validator.java @@ -4,6 +4,9 @@ import exceptions.NotSupportedOperationException; public class Validator { + private Validator() { + } + public static void validateOperation(String[] splitOperation) { if (!splitOperation[0].equals(ChessGame.OPERATION_START) && !splitOperation[0].equals(ChessGame.OPERATION_END) && !splitOperation[0].equals(ChessGame.OPERATION_MOVE)) { diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 217d964..3d85795 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -11,11 +11,11 @@ public class InputView { public static String[] inputOperation() { String operation = SCANNER.nextLine(); String[] splitOperation = operation.split(" "); - try{ + try { Validator.validateOperation(splitOperation); - } catch (NotSupportedOperationException e){ + } catch (NotSupportedOperationException e) { OutputView.printMessage(e.getMessage()); - splitOperation= inputOperation(); + splitOperation = inputOperation(); } return splitOperation; } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index e24e3ce..3dcca78 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -4,12 +4,11 @@ public class OutputView { private static String GUIDE_MESSAGE = "체스 게임을 시작합니다.\n게임 시작 : start\n게임 종료 : end\n" + "게임 이동 :move source위치 target위치 - 예. move b2 b3"; - public static void printGuideMessage(){ + public static void printGuideMessage() { printMessage(GUIDE_MESSAGE); } public static void printMessage(String message) { System.out.println(message); } - } From 10426dd6a5a2fdd50a8926e01cd06e75b265fe5e Mon Sep 17 00:00:00 2001 From: opdshe Date: Mon, 23 Nov 2020 22:15:14 +0900 Subject: [PATCH 04/10] =?UTF-8?q?test:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/ChessGame.java | 3 +-- src/main/java/utils/Validator.java | 3 ++- src/test/java/utils/ValidatorTest.java | 33 +++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 src/test/java/utils/ValidatorTest.java diff --git a/src/main/java/controller/ChessGame.java b/src/main/java/controller/ChessGame.java index 65be6d8..2a636a6 100644 --- a/src/main/java/controller/ChessGame.java +++ b/src/main/java/controller/ChessGame.java @@ -12,7 +12,6 @@ public class ChessGame { public static void play() { Board board = new Board(); OutputView.printGuideMessage(); - String[] splitOperation = InputView.inputOperation(); - + InputView.inputOperation(); } } diff --git a/src/main/java/utils/Validator.java b/src/main/java/utils/Validator.java index 411098a..68abefe 100644 --- a/src/main/java/utils/Validator.java +++ b/src/main/java/utils/Validator.java @@ -7,10 +7,11 @@ public class Validator { private Validator() { } - public static void validateOperation(String[] splitOperation) { + public static boolean validateOperation(String[] splitOperation) { if (!splitOperation[0].equals(ChessGame.OPERATION_START) && !splitOperation[0].equals(ChessGame.OPERATION_END) && !splitOperation[0].equals(ChessGame.OPERATION_MOVE)) { throw new NotSupportedOperationException(); } + return true; } } diff --git a/src/test/java/utils/ValidatorTest.java b/src/test/java/utils/ValidatorTest.java new file mode 100644 index 0000000..9f0f8ae --- /dev/null +++ b/src/test/java/utils/ValidatorTest.java @@ -0,0 +1,33 @@ +package utils; + +import exceptions.NotSupportedOperationException; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +public class ValidatorTest { + @Test + public void 지원하지_않는_동작_요청시_예외_발생() { + //given + String notSupportedOperation = "지원하지 않는 동작"; + String[] splitOperation = notSupportedOperation.split(" "); + + //when & then + assertThatExceptionOfType(NotSupportedOperationException.class) + .isThrownBy(() -> Validator.validateOperation(splitOperation)); + } + + @Test + public void 지원하는_동작_요청시_예외_발생하지_않음() { + //given + String supportedOperation = "start"; + String[] splitOperation = supportedOperation.split(" "); + + //when + boolean isValid = Validator.validateOperation(splitOperation); + + //then + assertThat(isValid).isTrue(); + } +} \ No newline at end of file From 319808d1c33f50b5011f013bb61bc288afffa839 Mon Sep 17 00:00:00 2001 From: opdshe Date: Fri, 27 Nov 2020 16:58:08 +0900 Subject: [PATCH 05/10] =?UTF-8?q?clear:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +-- src/main/java/controller/Application.java | 7 --- src/main/java/controller/ChessGame.java | 17 ------- src/main/java/domain/Board.java | 20 -------- src/main/java/domain/Player.java | 23 --------- src/main/java/domain/Position.java | 11 ----- src/main/java/domain/pieces/Bishop.java | 11 ----- src/main/java/domain/pieces/King.java | 11 ----- src/main/java/domain/pieces/Knight.java | 11 ----- src/main/java/domain/pieces/Pawn.java | 11 ----- src/main/java/domain/pieces/Piece.java | 13 ----- src/main/java/domain/pieces/PieceCreator.java | 48 ------------------- src/main/java/domain/pieces/Queen.java | 11 ----- src/main/java/domain/pieces/Rook.java | 11 ----- src/main/java/domain/pieces/Team.java | 5 -- .../NotSupportedOperationException.java | 9 ---- src/main/java/utils/Validator.java | 17 ------- src/main/java/view/InputView.java | 22 --------- src/main/java/view/OutputView.java | 14 ------ 19 files changed, 1 insertion(+), 278 deletions(-) delete mode 100644 src/main/java/controller/Application.java delete mode 100644 src/main/java/controller/ChessGame.java delete mode 100644 src/main/java/domain/Board.java delete mode 100644 src/main/java/domain/Player.java delete mode 100644 src/main/java/domain/Position.java delete mode 100644 src/main/java/domain/pieces/Bishop.java delete mode 100644 src/main/java/domain/pieces/King.java delete mode 100644 src/main/java/domain/pieces/Knight.java delete mode 100644 src/main/java/domain/pieces/Pawn.java delete mode 100644 src/main/java/domain/pieces/Piece.java delete mode 100644 src/main/java/domain/pieces/PieceCreator.java delete mode 100644 src/main/java/domain/pieces/Queen.java delete mode 100644 src/main/java/domain/pieces/Rook.java delete mode 100644 src/main/java/domain/pieces/Team.java delete mode 100644 src/main/java/exceptions/NotSupportedOperationException.java delete mode 100644 src/main/java/utils/Validator.java delete mode 100644 src/main/java/view/InputView.java delete mode 100644 src/main/java/view/OutputView.java diff --git a/README.md b/README.md index be4be2e..34a303b 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,4 @@ 체스 게임 저장소 ### 기능 구현 목록 -- 좌표 변환 기능 -- 체스판 초기화 -- 사용자 입력 받기 -- 사용자 입력 검증 -- 점수 계산 -- 말들의 이동 로직 구현 + diff --git a/src/main/java/controller/Application.java b/src/main/java/controller/Application.java deleted file mode 100644 index 176d7bb..0000000 --- a/src/main/java/controller/Application.java +++ /dev/null @@ -1,7 +0,0 @@ -package controller; - -public class Application { - public static void main(String[] args) { - ChessGame.play(); - } -} diff --git a/src/main/java/controller/ChessGame.java b/src/main/java/controller/ChessGame.java deleted file mode 100644 index 2a636a6..0000000 --- a/src/main/java/controller/ChessGame.java +++ /dev/null @@ -1,17 +0,0 @@ -package controller; - -import domain.Board; -import view.InputView; -import view.OutputView; - -public class ChessGame { - public static final String OPERATION_START = "start"; - public static final String OPERATION_END = "end"; - public static final String OPERATION_MOVE = "move"; - - public static void play() { - Board board = new Board(); - OutputView.printGuideMessage(); - InputView.inputOperation(); - } -} diff --git a/src/main/java/domain/Board.java b/src/main/java/domain/Board.java deleted file mode 100644 index 4aa6c84..0000000 --- a/src/main/java/domain/Board.java +++ /dev/null @@ -1,20 +0,0 @@ -package domain; - -import domain.pieces.PieceCreator; -import domain.pieces.Team; - -public class Board { - private Player white; - private Player black; - - public Board() { - initBoard(); - } - - private void initBoard() { - white = new Player(Team.WHITE); - black = new Player(Team.BLACK); - white.setPieces(PieceCreator.createPieces(white)); - black.setPieces(PieceCreator.createPieces(black)); - } -} diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java deleted file mode 100644 index 7a91b5d..0000000 --- a/src/main/java/domain/Player.java +++ /dev/null @@ -1,23 +0,0 @@ -package domain; - -import domain.pieces.Piece; -import domain.pieces.Team; - -import java.util.List; - -public class Player { - private Team team; - private List pieces; - - public Player(Team team) { - this.team = team; - } - - public void setPieces(List pieces) { - this.pieces = pieces; - } - - public Team getTeam() { - return team; - } -} diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java deleted file mode 100644 index acb88d0..0000000 --- a/src/main/java/domain/Position.java +++ /dev/null @@ -1,11 +0,0 @@ -package domain; - -public class Position { - private int y; - private int x; - - public Position(int y, int x) { - this.y = y; - this.x = x; - } -} diff --git a/src/main/java/domain/pieces/Bishop.java b/src/main/java/domain/pieces/Bishop.java deleted file mode 100644 index d179fb6..0000000 --- a/src/main/java/domain/pieces/Bishop.java +++ /dev/null @@ -1,11 +0,0 @@ -package domain.pieces; - -import domain.Position; - -public class Bishop extends Piece { - private static final char REPRESENTATION = 'b'; - - public Bishop(Position position) { - super(position, REPRESENTATION); - } -} diff --git a/src/main/java/domain/pieces/King.java b/src/main/java/domain/pieces/King.java deleted file mode 100644 index 7218084..0000000 --- a/src/main/java/domain/pieces/King.java +++ /dev/null @@ -1,11 +0,0 @@ -package domain.pieces; - -import domain.Position; - -public class King extends Piece { - private static final char REPRESENTATION = 'k'; - - public King(Position position) { - super(position, REPRESENTATION); - } -} diff --git a/src/main/java/domain/pieces/Knight.java b/src/main/java/domain/pieces/Knight.java deleted file mode 100644 index fe16934..0000000 --- a/src/main/java/domain/pieces/Knight.java +++ /dev/null @@ -1,11 +0,0 @@ -package domain.pieces; - -import domain.Position; - -public class Knight extends Piece { - private static final char REPRESENTATION = 'n'; - - public Knight(Position position) { - super(position, REPRESENTATION); - } -} diff --git a/src/main/java/domain/pieces/Pawn.java b/src/main/java/domain/pieces/Pawn.java deleted file mode 100644 index a21f68c..0000000 --- a/src/main/java/domain/pieces/Pawn.java +++ /dev/null @@ -1,11 +0,0 @@ -package domain.pieces; - -import domain.Position; - -public class Pawn extends Piece { - private static final char REPRESENTATION = 'r'; - - public Pawn(Position position) { - super(position, REPRESENTATION); - } -} diff --git a/src/main/java/domain/pieces/Piece.java b/src/main/java/domain/pieces/Piece.java deleted file mode 100644 index fed372e..0000000 --- a/src/main/java/domain/pieces/Piece.java +++ /dev/null @@ -1,13 +0,0 @@ -package domain.pieces; - -import domain.Position; - -public class Piece { - private Position position; - private char representation; - - public Piece(Position position, char representation) { - this.position = position; - this.representation = representation; - } -} diff --git a/src/main/java/domain/pieces/PieceCreator.java b/src/main/java/domain/pieces/PieceCreator.java deleted file mode 100644 index 09c42b1..0000000 --- a/src/main/java/domain/pieces/PieceCreator.java +++ /dev/null @@ -1,48 +0,0 @@ -package domain.pieces; - -import domain.Player; -import domain.Position; - -import java.util.ArrayList; -import java.util.List; - -public class PieceCreator { - private static final int MIN_ROW_OF_BOARD = 1; - private static final int MAX_ROW_OF_BOARD = 8; - private static final int WHITE_PAWNS_ROW = 2; - private static final int WHITE_OTHERS_ROW = 1; - private static final int BLACK_PAWNS_ROW = 7; - private static final int BLACK_OTHERS_ROW = 8; - - private PieceCreator() { - } - - public static List createPieces(Player player) { - List pieces = new ArrayList<>(); - if (player.getTeam() == Team.WHITE) { - putPawns(pieces, WHITE_PAWNS_ROW); - putOthers(pieces, WHITE_OTHERS_ROW); - } else { - putPawns(pieces, BLACK_PAWNS_ROW); - putOthers(pieces, BLACK_OTHERS_ROW); - } - return pieces; - } - - private static void putOthers(List pieces, int row) { - pieces.add(new Rook(new Position(row, 1))); - pieces.add(new Knight(new Position(row, 2))); - pieces.add(new Bishop(new Position(row, 3))); - pieces.add(new Queen(new Position(row, 4))); - pieces.add(new King(new Position(row, 5))); - pieces.add(new Bishop(new Position(row, 6))); - pieces.add(new Knight(new Position(row, 7))); - pieces.add(new Rook(new Position(row, 8))); - } - - private static void putPawns(List pieces, int row) { - for (int column = MIN_ROW_OF_BOARD; column < MAX_ROW_OF_BOARD; column++) { - pieces.add(new Pawn(new Position(row, column))); - } - } -} diff --git a/src/main/java/domain/pieces/Queen.java b/src/main/java/domain/pieces/Queen.java deleted file mode 100644 index f6cfcfb..0000000 --- a/src/main/java/domain/pieces/Queen.java +++ /dev/null @@ -1,11 +0,0 @@ -package domain.pieces; - -import domain.Position; - -public class Queen extends Piece { - private static final char REPRESENTATION = 'q'; - - public Queen(Position position) { - super(position, REPRESENTATION); - } -} diff --git a/src/main/java/domain/pieces/Rook.java b/src/main/java/domain/pieces/Rook.java deleted file mode 100644 index 736a96a..0000000 --- a/src/main/java/domain/pieces/Rook.java +++ /dev/null @@ -1,11 +0,0 @@ -package domain.pieces; - -import domain.Position; - -public class Rook extends Piece { - private static final char REPRESENTATION = 'p'; - - public Rook(Position position) { - super(position, REPRESENTATION); - } -} diff --git a/src/main/java/domain/pieces/Team.java b/src/main/java/domain/pieces/Team.java deleted file mode 100644 index efab91f..0000000 --- a/src/main/java/domain/pieces/Team.java +++ /dev/null @@ -1,5 +0,0 @@ -package domain.pieces; - -public enum Team { - WHITE, BLACK; -} diff --git a/src/main/java/exceptions/NotSupportedOperationException.java b/src/main/java/exceptions/NotSupportedOperationException.java deleted file mode 100644 index d7f18d6..0000000 --- a/src/main/java/exceptions/NotSupportedOperationException.java +++ /dev/null @@ -1,9 +0,0 @@ -package exceptions; - -public class NotSupportedOperationException extends RuntimeException { - private static final String MESSAGE = "지원하지 않는 동작입니다. 가이드 메세지를 확인한 후 다시 입력해 주세요. "; - - public NotSupportedOperationException() { - super(MESSAGE); - } -} diff --git a/src/main/java/utils/Validator.java b/src/main/java/utils/Validator.java deleted file mode 100644 index 68abefe..0000000 --- a/src/main/java/utils/Validator.java +++ /dev/null @@ -1,17 +0,0 @@ -package utils; - -import controller.ChessGame; -import exceptions.NotSupportedOperationException; - -public class Validator { - private Validator() { - } - - public static boolean validateOperation(String[] splitOperation) { - if (!splitOperation[0].equals(ChessGame.OPERATION_START) && !splitOperation[0].equals(ChessGame.OPERATION_END) && - !splitOperation[0].equals(ChessGame.OPERATION_MOVE)) { - throw new NotSupportedOperationException(); - } - return true; - } -} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java deleted file mode 100644 index 3d85795..0000000 --- a/src/main/java/view/InputView.java +++ /dev/null @@ -1,22 +0,0 @@ -package view; - -import exceptions.NotSupportedOperationException; -import utils.Validator; - -import java.util.Scanner; - -public class InputView { - private static final Scanner SCANNER = new Scanner(System.in); - - public static String[] inputOperation() { - String operation = SCANNER.nextLine(); - String[] splitOperation = operation.split(" "); - try { - Validator.validateOperation(splitOperation); - } catch (NotSupportedOperationException e) { - OutputView.printMessage(e.getMessage()); - splitOperation = inputOperation(); - } - return splitOperation; - } -} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java deleted file mode 100644 index 3dcca78..0000000 --- a/src/main/java/view/OutputView.java +++ /dev/null @@ -1,14 +0,0 @@ -package view; - -public class OutputView { - private static String GUIDE_MESSAGE = "체스 게임을 시작합니다.\n게임 시작 : start\n게임 종료 : end\n" + - "게임 이동 :move source위치 target위치 - 예. move b2 b3"; - - public static void printGuideMessage() { - printMessage(GUIDE_MESSAGE); - } - - public static void printMessage(String message) { - System.out.println(message); - } -} From 6dd1ab525bee165778330a2c59328a73e6fb89d1 Mon Sep 17 00:00:00 2001 From: DONGHEON LEE <50160282+opdshe@users.noreply.github.com> Date: Fri, 27 Nov 2020 17:16:04 +0900 Subject: [PATCH 06/10] =?UTF-8?q?docs:=20README.md=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=ED=95=B4=EC=95=BC=20=ED=95=A0=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 34a303b..cabfa6f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,31 @@ # java-chess 체스 게임 저장소 -### 기능 구현 목록 +### 구현해야 할 기능 구현 목록 +[입력] +- 사용자로부터 커맨드 입력 받기 + - 시작 : start + - 종료 : end + - 이동 : move sourcePosition targetPosition + +- 게임이 끝나면 바로 종료할 지 점수 볼 지 입력 + - 종료 : end + - 점수 및 승자 보기 : status +[게임 과정] +- 체스판 초기화 +- 각 말들의 이동 로직 구현 +- 게임 종료 기능 + - King이 잡히면 종료 +- 점수 계산 기능 + - queen : 9점 + - rook : 5점 + - bishop : 3점 + - knight : 2.5점 + - pawn + - 세로 줄에 같은 색 폰이 있으면 0.5 + - 없으면 1 + +[출력] +- 체스판 출력 기능 +- 점수 및 승자 출력 기능 From 7b1ec7a4def2df70680aee96ffe04be42e8681f8 Mon Sep 17 00:00:00 2001 From: opdshe Date: Sat, 28 Nov 2020 23:08:44 +0900 Subject: [PATCH 07/10] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EB=A1=9C=EB=B6=80=ED=84=B0=20=EC=BB=A4=EB=A7=A8=EB=93=9C=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EA=B8=B0=20=EB=B0=8F=20=EC=BB=A4?= =?UTF-8?q?=EB=A7=A8=EB=93=9C=20=EB=A7=A4=ED=95=91=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/chess/controller/Application.java | 7 +++++ .../chess/controller/ChessGameController.java | 24 +++++++++++++++ .../java/chess/domain/command/Command.java | 5 ++++ .../chess/domain/command/CommandMapper.java | 28 ++++++++++++++++++ .../java/chess/domain/command/EndCommand.java | 13 +++++++++ .../chess/domain/command/MoveCommand.java | 22 ++++++++++++++ .../chess/domain/command/StartCommand.java | 16 ++++++++++ .../chess/domain/command/StatusCommand.java | 13 +++++++++ .../NotSupportedCommandException.java | 9 ++++++ .../chess/validators/CommandValidator.java | 29 +++++++++++++++++++ src/main/java/chess/view/InputView.java | 16 ++++++++++ src/main/java/chess/view/OutputView.java | 17 +++++++++++ src/main/java/utils/CommandSplitter.java | 14 +++++++++ src/test/java/utils/ValidatorTest.java | 2 +- 14 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 src/main/java/chess/controller/Application.java create mode 100644 src/main/java/chess/controller/ChessGameController.java create mode 100644 src/main/java/chess/domain/command/Command.java create mode 100644 src/main/java/chess/domain/command/CommandMapper.java create mode 100644 src/main/java/chess/domain/command/EndCommand.java create mode 100644 src/main/java/chess/domain/command/MoveCommand.java create mode 100644 src/main/java/chess/domain/command/StartCommand.java create mode 100644 src/main/java/chess/domain/command/StatusCommand.java create mode 100644 src/main/java/chess/exceptions/NotSupportedCommandException.java create mode 100644 src/main/java/chess/validators/CommandValidator.java create mode 100644 src/main/java/chess/view/InputView.java create mode 100644 src/main/java/chess/view/OutputView.java create mode 100644 src/main/java/utils/CommandSplitter.java diff --git a/src/main/java/chess/controller/Application.java b/src/main/java/chess/controller/Application.java new file mode 100644 index 0000000..797a125 --- /dev/null +++ b/src/main/java/chess/controller/Application.java @@ -0,0 +1,7 @@ +package chess.controller; + +public class Application { + public static void main(String[] args) { + ChessGameController.play(); + } +} diff --git a/src/main/java/chess/controller/ChessGameController.java b/src/main/java/chess/controller/ChessGameController.java new file mode 100644 index 0000000..6fc79ac --- /dev/null +++ b/src/main/java/chess/controller/ChessGameController.java @@ -0,0 +1,24 @@ +package chess.controller; + +import chess.domain.command.Command; +import chess.domain.command.CommandMapper; +import chess.view.InputView; +import chess.view.OutputView; + +public class ChessGameController { + public static void play() { + OutputView.printGreetingMessage(); + inputCommand(); + } + + private static Command inputCommand() { + Command command = null; + try { + command = CommandMapper.find(InputView.getCommand()); + } catch (Exception e) { + OutputView.printMessageAndNewLine(e.getMessage()); + inputCommand(); + } + return command; + } +} diff --git a/src/main/java/chess/domain/command/Command.java b/src/main/java/chess/domain/command/Command.java new file mode 100644 index 0000000..e238649 --- /dev/null +++ b/src/main/java/chess/domain/command/Command.java @@ -0,0 +1,5 @@ +package chess.domain.command; + +public interface Command { + void execute(); +} diff --git a/src/main/java/chess/domain/command/CommandMapper.java b/src/main/java/chess/domain/command/CommandMapper.java new file mode 100644 index 0000000..c67177d --- /dev/null +++ b/src/main/java/chess/domain/command/CommandMapper.java @@ -0,0 +1,28 @@ +package chess.domain.command; + +import chess.validators.CommandValidator; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Predicate; +import java.util.function.Supplier; + +public class CommandMapper { + private static final Map, Supplier> mapper = new HashMap<>(); + + static { + mapper.put(StartCommand::isStart, StartCommand::new); + mapper.put(EndCommand::isEnd, EndCommand::new); + mapper.put(StatusCommand::isStatus, StatusCommand::new); + } + + public static Command find(String rawCommand) { + CommandValidator.validateCommand(rawCommand); + for (Map.Entry, Supplier> entry : mapper.entrySet()) { + if (entry.getKey().test(rawCommand)) { + return entry.getValue().get(); + } + } + return new MoveCommand(rawCommand); + } +} diff --git a/src/main/java/chess/domain/command/EndCommand.java b/src/main/java/chess/domain/command/EndCommand.java new file mode 100644 index 0000000..1cc0759 --- /dev/null +++ b/src/main/java/chess/domain/command/EndCommand.java @@ -0,0 +1,13 @@ +package chess.domain.command; + +public class EndCommand implements Command { + private static final String COMMAND = "end"; + + public static boolean isEnd(String operation) { + return COMMAND.equals(operation.toLowerCase()); + } + + @Override + public void execute() { + } +} diff --git a/src/main/java/chess/domain/command/MoveCommand.java b/src/main/java/chess/domain/command/MoveCommand.java new file mode 100644 index 0000000..5da85fb --- /dev/null +++ b/src/main/java/chess/domain/command/MoveCommand.java @@ -0,0 +1,22 @@ +package chess.domain.command; + +import utils.CommandSplitter; + +public class MoveCommand implements Command { + private static final String COMMAND = "move"; + private static final int SOURCE_INDEX = 0; + private static final int DESTINATION_INDEX = 1; + + private String source; + private String dest; + + public MoveCommand(String rawCommand) { + String[] splitCommand = CommandSplitter.getSourceAndDest(rawCommand); + source = splitCommand[SOURCE_INDEX]; + dest = splitCommand[DESTINATION_INDEX]; + } + + @Override + public void execute() { + } +} diff --git a/src/main/java/chess/domain/command/StartCommand.java b/src/main/java/chess/domain/command/StartCommand.java new file mode 100644 index 0000000..e30e47c --- /dev/null +++ b/src/main/java/chess/domain/command/StartCommand.java @@ -0,0 +1,16 @@ +package chess.domain.command; + +public class StartCommand implements Command { + private static final String COMMAND = "start"; + + public StartCommand() { + } + + public static boolean isStart(String operation) { + return COMMAND.equals(operation.toLowerCase()); + } + + @Override + public void execute() { + } +} diff --git a/src/main/java/chess/domain/command/StatusCommand.java b/src/main/java/chess/domain/command/StatusCommand.java new file mode 100644 index 0000000..31f1b52 --- /dev/null +++ b/src/main/java/chess/domain/command/StatusCommand.java @@ -0,0 +1,13 @@ +package chess.domain.command; + +public class StatusCommand implements Command { + private static final String COMMAND = "status"; + + public static boolean isStatus(String operation) { + return COMMAND.equals(operation.toLowerCase()); + } + + @Override + public void execute() { + } +} diff --git a/src/main/java/chess/exceptions/NotSupportedCommandException.java b/src/main/java/chess/exceptions/NotSupportedCommandException.java new file mode 100644 index 0000000..da9b0e5 --- /dev/null +++ b/src/main/java/chess/exceptions/NotSupportedCommandException.java @@ -0,0 +1,9 @@ +package chess.exceptions; + +public class NotSupportedCommandException extends RuntimeException { + private static final String message = "지원하지 않는 커맨드입니다. "; + + public NotSupportedCommandException() { + super(message); + } +} diff --git a/src/main/java/chess/validators/CommandValidator.java b/src/main/java/chess/validators/CommandValidator.java new file mode 100644 index 0000000..f1dd743 --- /dev/null +++ b/src/main/java/chess/validators/CommandValidator.java @@ -0,0 +1,29 @@ +package chess.validators; + +import chess.exceptions.NotSupportedCommandException; + +import java.util.HashSet; +import java.util.Set; + +public class CommandValidator { + private static final Set commands = new HashSet<>(); + + static { + commands.add("start"); + commands.add("end"); + commands.add("move"); + commands.add("status"); + } + + public static void validateCommand(String rawCommand) { + String firstIndexOfCommand = getFirstIndex(rawCommand); + String lowercaseFirstIndex = firstIndexOfCommand.toLowerCase(); + if (!commands.contains(lowercaseFirstIndex)) { + throw new NotSupportedCommandException(); + } + } + + private static String getFirstIndex(String rawCommand) { + return rawCommand.split(" ")[0]; + } +} diff --git a/src/main/java/chess/view/InputView.java b/src/main/java/chess/view/InputView.java new file mode 100644 index 0000000..b49d7e5 --- /dev/null +++ b/src/main/java/chess/view/InputView.java @@ -0,0 +1,16 @@ +package chess.view; + +import java.util.Scanner; + +public class InputView { + private static final Scanner SCANNER = new Scanner(System.in); + private static final String INPUT_COMMAND = "명령어를 입력하세요. "; + + private InputView() { + } + + public static String getCommand() { + OutputView.printMessageAndNewLine(INPUT_COMMAND); + return SCANNER.nextLine(); + } +} diff --git a/src/main/java/chess/view/OutputView.java b/src/main/java/chess/view/OutputView.java new file mode 100644 index 0000000..21cc8ce --- /dev/null +++ b/src/main/java/chess/view/OutputView.java @@ -0,0 +1,17 @@ +package chess.view; + +public class OutputView { + private static final String GREETING_MESSAGE = "체스 게임을 시작합니다.\n게임 시작 : start\n게임 종료 : end\n" + + "게임 이동 : move source위치 - target위치 ex)move b2 b3"; + + private OutputView() { + } + + public static void printGreetingMessage() { + printMessageAndNewLine(GREETING_MESSAGE); + } + + public static void printMessageAndNewLine(String message) { + System.out.println(message); + } +} diff --git a/src/main/java/utils/CommandSplitter.java b/src/main/java/utils/CommandSplitter.java new file mode 100644 index 0000000..8c1874c --- /dev/null +++ b/src/main/java/utils/CommandSplitter.java @@ -0,0 +1,14 @@ +package utils; + +public class CommandSplitter { + private static final int SOURCE_INDEX = 1; + private static final int DESTINATION_INDEX = 2; + + private CommandSplitter() { + } + + public static String[] getSourceAndDest(String rawCommand) { + String[] splitCommand = rawCommand.split(" "); + return new String[]{splitCommand[SOURCE_INDEX], splitCommand[DESTINATION_INDEX]}; + } +} diff --git a/src/test/java/utils/ValidatorTest.java b/src/test/java/utils/ValidatorTest.java index 9f0f8ae..8c8a55a 100644 --- a/src/test/java/utils/ValidatorTest.java +++ b/src/test/java/utils/ValidatorTest.java @@ -1,6 +1,6 @@ package utils; -import exceptions.NotSupportedOperationException; +import chess.exceptions.NotSupportedOperationException; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; From cce5e5282a0cb72fee9ed8a1b1f5890fd33483b8 Mon Sep 17 00:00:00 2001 From: opdshe Date: Sun, 29 Nov 2020 15:53:21 +0900 Subject: [PATCH 08/10] =?UTF-8?q?feat:=20a2=EC=99=80=20=EA=B0=99=EC=9D=80?= =?UTF-8?q?=20=ED=98=95=ED=83=9C=EC=9D=98=20=EC=9C=84=EC=B9=98=EB=A5=BC=20?= =?UTF-8?q?=EC=A2=8C=ED=91=9C=ED=8F=89=EB=A9=B4=20=ED=98=95=ED=83=9C?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=ED=99=98=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/chess/utils/LocationConverter.java | 27 +++++++++++++++ .../chess/utils/LocationConverterTest.java | 20 +++++++++++ src/test/java/utils/ValidatorTest.java | 33 ------------------- 3 files changed, 47 insertions(+), 33 deletions(-) create mode 100644 src/main/java/chess/utils/LocationConverter.java create mode 100644 src/test/java/chess/utils/LocationConverterTest.java delete mode 100644 src/test/java/utils/ValidatorTest.java diff --git a/src/main/java/chess/utils/LocationConverter.java b/src/main/java/chess/utils/LocationConverter.java new file mode 100644 index 0000000..08cc330 --- /dev/null +++ b/src/main/java/chess/utils/LocationConverter.java @@ -0,0 +1,27 @@ +package chess.utils; + +import chess.domain.piece.Location; + +public class LocationConverter { + private static final int INT_VALUE_OF_LOWER_A = 97; + private static final int SIZE_OF_CHESS_BOARD = 8; + private static final int FIRST_INDEX = 0; + private static final int SECOND_INDEX = 1; + + private LocationConverter() { + } + + public static Location convertLocation(String rawLocation) { + char[] splitLocation = rawLocation.toCharArray(); + return new Location(convertRow(splitLocation[SECOND_INDEX]), convertColumn(splitLocation[FIRST_INDEX])); + } + + private static int convertColumn(char rawColumn) { + char lowerRawRow = Character.toLowerCase(rawColumn); + return (int) (lowerRawRow) - INT_VALUE_OF_LOWER_A; + } + + private static int convertRow(char rawRow) { + return SIZE_OF_CHESS_BOARD - Character.getNumericValue(rawRow); + } +} diff --git a/src/test/java/chess/utils/LocationConverterTest.java b/src/test/java/chess/utils/LocationConverterTest.java new file mode 100644 index 0000000..41adaaa --- /dev/null +++ b/src/test/java/chess/utils/LocationConverterTest.java @@ -0,0 +1,20 @@ +package chess.utils; + +import chess.domain.piece.Location; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LocationConverterTest { + @Test + public void 위치변환기_동작_테스트() { + //given + String rawLocation = "a2"; + + //when + Location convertedLocation = LocationConverter.convertLocation(rawLocation); + + //then + assertThat(convertedLocation).isEqualTo(new Location(6, 0)); + } +} \ No newline at end of file diff --git a/src/test/java/utils/ValidatorTest.java b/src/test/java/utils/ValidatorTest.java deleted file mode 100644 index 8c8a55a..0000000 --- a/src/test/java/utils/ValidatorTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package utils; - -import chess.exceptions.NotSupportedOperationException; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; - -public class ValidatorTest { - @Test - public void 지원하지_않는_동작_요청시_예외_발생() { - //given - String notSupportedOperation = "지원하지 않는 동작"; - String[] splitOperation = notSupportedOperation.split(" "); - - //when & then - assertThatExceptionOfType(NotSupportedOperationException.class) - .isThrownBy(() -> Validator.validateOperation(splitOperation)); - } - - @Test - public void 지원하는_동작_요청시_예외_발생하지_않음() { - //given - String supportedOperation = "start"; - String[] splitOperation = supportedOperation.split(" "); - - //when - boolean isValid = Validator.validateOperation(splitOperation); - - //then - assertThat(isValid).isTrue(); - } -} \ No newline at end of file From a9bf60d43cee4006b1508e4f39cbe60f10370fe5 Mon Sep 17 00:00:00 2001 From: opdshe Date: Sun, 29 Nov 2020 16:33:15 +0900 Subject: [PATCH 09/10] =?UTF-8?q?feat:=20=EC=B2=B4=EC=8A=A4=ED=8C=90=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chess/controller/ChessGameController.java | 6 +- src/main/java/chess/domain/ChessBoard.java | 14 +++++ src/main/java/chess/domain/piece/Bishop.java | 9 +++ src/main/java/chess/domain/piece/King.java | 9 +++ src/main/java/chess/domain/piece/Knight.java | 9 +++ .../java/chess/domain/piece/Location.java | 27 ++++++++ src/main/java/chess/domain/piece/Pawn.java | 9 +++ src/main/java/chess/domain/piece/Piece.java | 11 ++++ src/main/java/chess/domain/piece/Pieces.java | 11 ++++ .../chess/domain/piece/PiecesCreator.java | 62 +++++++++++++++++++ src/main/java/chess/domain/piece/Queen.java | 9 +++ src/main/java/chess/domain/piece/Rook.java | 9 +++ src/main/java/chess/domain/player/Player.java | 14 +++++ src/main/java/chess/domain/player/Team.java | 5 ++ 14 files changed, 201 insertions(+), 3 deletions(-) create mode 100644 src/main/java/chess/domain/ChessBoard.java create mode 100644 src/main/java/chess/domain/piece/Bishop.java create mode 100644 src/main/java/chess/domain/piece/King.java create mode 100644 src/main/java/chess/domain/piece/Knight.java create mode 100644 src/main/java/chess/domain/piece/Location.java create mode 100644 src/main/java/chess/domain/piece/Pawn.java create mode 100644 src/main/java/chess/domain/piece/Piece.java create mode 100644 src/main/java/chess/domain/piece/Pieces.java create mode 100644 src/main/java/chess/domain/piece/PiecesCreator.java create mode 100644 src/main/java/chess/domain/piece/Queen.java create mode 100644 src/main/java/chess/domain/piece/Rook.java create mode 100644 src/main/java/chess/domain/player/Player.java create mode 100644 src/main/java/chess/domain/player/Team.java diff --git a/src/main/java/chess/controller/ChessGameController.java b/src/main/java/chess/controller/ChessGameController.java index 6fc79ac..5ca2d68 100644 --- a/src/main/java/chess/controller/ChessGameController.java +++ b/src/main/java/chess/controller/ChessGameController.java @@ -8,16 +8,16 @@ public class ChessGameController { public static void play() { OutputView.printGreetingMessage(); - inputCommand(); + getCommand(); } - private static Command inputCommand() { + private static Command getCommand() { Command command = null; try { command = CommandMapper.find(InputView.getCommand()); } catch (Exception e) { OutputView.printMessageAndNewLine(e.getMessage()); - inputCommand(); + getCommand(); } return command; } diff --git a/src/main/java/chess/domain/ChessBoard.java b/src/main/java/chess/domain/ChessBoard.java new file mode 100644 index 0000000..450da34 --- /dev/null +++ b/src/main/java/chess/domain/ChessBoard.java @@ -0,0 +1,14 @@ +package chess.domain; + +import chess.domain.player.Player; +import chess.domain.player.Team; + +public class ChessBoard { + private Player white; + private Player black; + + public ChessBoard() { + white = new Player(Team.WHITE); + black = new Player(Team.WHITE); + } +} diff --git a/src/main/java/chess/domain/piece/Bishop.java b/src/main/java/chess/domain/piece/Bishop.java new file mode 100644 index 0000000..18f3958 --- /dev/null +++ b/src/main/java/chess/domain/piece/Bishop.java @@ -0,0 +1,9 @@ +package chess.domain.piece; + +public class Bishop extends Piece { + private static final char representation = 'b'; + + public Bishop(Location location) { + super(representation, location); + } +} diff --git a/src/main/java/chess/domain/piece/King.java b/src/main/java/chess/domain/piece/King.java new file mode 100644 index 0000000..879a8fd --- /dev/null +++ b/src/main/java/chess/domain/piece/King.java @@ -0,0 +1,9 @@ +package chess.domain.piece; + +public class King extends Piece { + private static final char representation = 'k'; + + public King(Location location) { + super(representation, location); + } +} diff --git a/src/main/java/chess/domain/piece/Knight.java b/src/main/java/chess/domain/piece/Knight.java new file mode 100644 index 0000000..53d862d --- /dev/null +++ b/src/main/java/chess/domain/piece/Knight.java @@ -0,0 +1,9 @@ +package chess.domain.piece; + +public class Knight extends Piece { + private static final char representation = 'n'; + + public Knight(Location location) { + super(representation, location); + } +} diff --git a/src/main/java/chess/domain/piece/Location.java b/src/main/java/chess/domain/piece/Location.java new file mode 100644 index 0000000..afc605c --- /dev/null +++ b/src/main/java/chess/domain/piece/Location.java @@ -0,0 +1,27 @@ +package chess.domain.piece; + +import java.util.Objects; + +public class Location { + private int y; + private int x; + + public Location(int y, int x) { + this.y = y; + this.x = x; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Location location = (Location) o; + return y == location.y && + x == location.x; + } + + @Override + public int hashCode() { + return Objects.hash(y, x); + } +} diff --git a/src/main/java/chess/domain/piece/Pawn.java b/src/main/java/chess/domain/piece/Pawn.java new file mode 100644 index 0000000..f2bc59d --- /dev/null +++ b/src/main/java/chess/domain/piece/Pawn.java @@ -0,0 +1,9 @@ +package chess.domain.piece; + +public class Pawn extends Piece { + private static final char representation = 'p'; + + public Pawn(Location location) { + super(representation, location); + } +} diff --git a/src/main/java/chess/domain/piece/Piece.java b/src/main/java/chess/domain/piece/Piece.java new file mode 100644 index 0000000..9e4a392 --- /dev/null +++ b/src/main/java/chess/domain/piece/Piece.java @@ -0,0 +1,11 @@ +package chess.domain.piece; + +public class Piece { + private char representation; + private Location location; + + public Piece(char representation, Location location) { + this.representation = representation; + this.location = location; + } +} diff --git a/src/main/java/chess/domain/piece/Pieces.java b/src/main/java/chess/domain/piece/Pieces.java new file mode 100644 index 0000000..be0162b --- /dev/null +++ b/src/main/java/chess/domain/piece/Pieces.java @@ -0,0 +1,11 @@ +package chess.domain.piece; + +import java.util.List; + +public class Pieces { + private List pieces; + + public Pieces(List pieces) { + this.pieces = pieces; + } +} diff --git a/src/main/java/chess/domain/piece/PiecesCreator.java b/src/main/java/chess/domain/piece/PiecesCreator.java new file mode 100644 index 0000000..f1d72e6 --- /dev/null +++ b/src/main/java/chess/domain/piece/PiecesCreator.java @@ -0,0 +1,62 @@ +package chess.domain.piece; + +import chess.domain.player.Team; + +import java.util.ArrayList; +import java.util.List; + +public class PiecesCreator { + private static final int WHITE_PAWN_ROW = 6; + private static final int BLACK_PAWN_ROW = 1; + private static final int WHITE_NOBLE_ROW = 7; + private static final int BLACK_NOBLE_ROW = 0; + private static final int MAX_POSITION_OF_CHESS_BOARD = 8; + + private PiecesCreator() { + } + + + public static Pieces createPieces(Team team) { + List pieces = new ArrayList<>(); + addPawns(pieces, team); + addNobles(pieces, team); + return new Pieces(pieces); + } + + private static void addNobles(List pieces, Team team) { + int nobleRow = getNobleRow(team); + pieces.add(new Rook(new Location(nobleRow, 0))); + pieces.add(new Knight(new Location(nobleRow, 1))); + pieces.add(new Bishop(new Location(nobleRow, 2))); + pieces.add(new Queen(new Location(nobleRow, 3))); + pieces.add(new King(new Location(nobleRow, 4))); + pieces.add(new Bishop(new Location(nobleRow, 5))); + pieces.add(new Knight(new Location(nobleRow, 6))); + pieces.add(new Rook(new Location(nobleRow, 7))); + } + + private static void addPawns(List pieces, Team team) { + int pawnRow = getPawnRow(team); + for (int column = 0; column < MAX_POSITION_OF_CHESS_BOARD; column++) { + pieces.add(new Pawn(new Location(pawnRow, column))); + } + } + + private static int getNobleRow(Team team) { + if (isWhite(team)) { + return WHITE_NOBLE_ROW; + } + return BLACK_NOBLE_ROW; + } + + private static int getPawnRow(Team team) { + if (isWhite(team)) { + return WHITE_PAWN_ROW; + } + return BLACK_PAWN_ROW; + } + + private static boolean isWhite(Team team) { + return team == Team.WHITE; + } +} diff --git a/src/main/java/chess/domain/piece/Queen.java b/src/main/java/chess/domain/piece/Queen.java new file mode 100644 index 0000000..9cd7f28 --- /dev/null +++ b/src/main/java/chess/domain/piece/Queen.java @@ -0,0 +1,9 @@ +package chess.domain.piece; + +public class Queen extends Piece { + private static final char representation = 'q'; + + public Queen(Location location) { + super(representation, location); + } +} diff --git a/src/main/java/chess/domain/piece/Rook.java b/src/main/java/chess/domain/piece/Rook.java new file mode 100644 index 0000000..3a059f4 --- /dev/null +++ b/src/main/java/chess/domain/piece/Rook.java @@ -0,0 +1,9 @@ +package chess.domain.piece; + +public class Rook extends Piece { + private static final char representation = 'r'; + + public Rook(Location location) { + super(representation, location); + } +} diff --git a/src/main/java/chess/domain/player/Player.java b/src/main/java/chess/domain/player/Player.java new file mode 100644 index 0000000..35ceb83 --- /dev/null +++ b/src/main/java/chess/domain/player/Player.java @@ -0,0 +1,14 @@ +package chess.domain.player; + +import chess.domain.piece.Pieces; +import chess.domain.piece.PiecesCreator; + +public class Player { + private Team team; + private Pieces pieces; + + public Player(Team team) { + this.team = team; + this.pieces = PiecesCreator.createPieces(team); + } +} diff --git a/src/main/java/chess/domain/player/Team.java b/src/main/java/chess/domain/player/Team.java new file mode 100644 index 0000000..24e9ab5 --- /dev/null +++ b/src/main/java/chess/domain/player/Team.java @@ -0,0 +1,5 @@ +package chess.domain.player; + +public enum Team { + WHITE, BLACK +} From 44c7e407de3de652441dfda2f424357a38837865 Mon Sep 17 00:00:00 2001 From: DONGHEON LEE <50160282+opdshe@users.noreply.github.com> Date: Sun, 29 Nov 2020 16:37:41 +0900 Subject: [PATCH 10/10] =?UTF-8?q?docs:=20READEME.md=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=ED=95=B4=EC=95=BC=20=ED=95=A0=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cabfa6f..009af49 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ - 점수 및 승자 보기 : status [게임 과정] +- a2와 같은 형태의 위치값을 좌표평면 위치로 변환하는 기능 - 체스판 초기화 - 각 말들의 이동 로직 구현 - 게임 종료 기능