From 441d96b6dbc1770ba8a530da684321ab24c19772 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 17:06:00 +0900 Subject: [PATCH 01/53] =?UTF-8?q?=EC=B2=B4=EC=8A=A4=EB=A7=90=EC=9D=B4=20Bl?= =?UTF-8?q?ank=EC=9D=BC=20=EB=95=8C,=20'.'=EC=9D=B4=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EB=90=98=EB=8A=94=EC=A7=80=20=ED=99=95=EC=9D=B8=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/pieces/PieceTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/chess/pieces/PieceTest.java b/src/test/java/chess/pieces/PieceTest.java index 15b09c351..a2e0637d8 100644 --- a/src/test/java/chess/pieces/PieceTest.java +++ b/src/test/java/chess/pieces/PieceTest.java @@ -28,6 +28,14 @@ public void createPieces() { verifyWhitePiece(Piece.createWhiteKing(), Type.KING); verifyBlackPiece(Piece.createBlackKing(), Type.KING); + + Piece blank = Piece.createBlank(); + assertAll( + () -> assertThat(blank.isWhite()).isEqualTo(false), + () -> assertThat(blank.isBlack()).isEqualTo(false), + () -> assertThat(blank.getColor()).isEqualTo(Color.NO_COLOR), + () -> assertThat(blank.getRepresentation()).isEqualTo(Type.BLANK.getWhiteRepresentation()) + ); } private void verifyWhitePiece(Piece piece, Type type) { From 0132e1a57607d096c865c37493d9198eafb50d57 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 17:07:24 +0900 Subject: [PATCH 02/53] =?UTF-8?q?=EC=B2=B4=EC=8A=A4=ED=8C=90=EC=9D=98=20?= =?UTF-8?q?=EB=B9=88=20=EC=B9=B8=EC=97=90=20'.'=EC=9D=84=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?createBlank=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Piece.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index 8f1ea145e..e1805dff7 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -72,4 +72,6 @@ public static Piece createWhiteKing() { public static Piece createBlackKing() { return new Piece(Color.BLACK, Type.KING); } + + public static Piece createBlank() { return new Piece(Color.NO_COLOR, Type.BLANK); } } From 3ac08a192a14f32721793feb13df08101b09e93b Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 17:07:54 +0900 Subject: [PATCH 03/53] =?UTF-8?q?NO=5FCOLOR=20=ED=95=AD=EB=AA=A9=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80.=20BLANK=20=EC=9D=BC=20=EB=95=8C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Color.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/chess/pieces/Color.java b/src/main/java/chess/pieces/Color.java index cd684a9f5..0af8da97f 100644 --- a/src/main/java/chess/pieces/Color.java +++ b/src/main/java/chess/pieces/Color.java @@ -2,5 +2,6 @@ public enum Color { WHITE, - BLACK + BLACK, + NO_COLOR } From 43153c3ff59f18cac973dd90414062b8cf3870d7 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 17:08:14 +0900 Subject: [PATCH 04/53] =?UTF-8?q?BLANK=20=ED=95=AD=EB=AA=A9=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80.=20BLANK=20=EC=9D=BC=20=EB=95=8C=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Type.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/chess/pieces/Type.java b/src/main/java/chess/pieces/Type.java index e28fd853c..48e6eb5f5 100644 --- a/src/main/java/chess/pieces/Type.java +++ b/src/main/java/chess/pieces/Type.java @@ -6,7 +6,8 @@ public enum Type { KNIGHT('n'), BISHOP('b'), QUEEN('q'), - KING('k'); + KING('k'), + BLANK('.'); private final char representation; From a357c1cf08e238c87f6ef36a82119fca4d05325a Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 17:30:32 +0900 Subject: [PATCH 05/53] =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=A0=9C=EA=B1=B0=EB=A5=BC=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?=EC=83=89=EC=83=81=EB=B3=84=20create=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Piece.java | 32 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index e1805dff7..bc03a65f6 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -25,52 +25,60 @@ public char getRepresentation() { return color == Color.WHITE ? type.getWhiteRepresentation() : type.getBlackRepresentation(); } + private static Piece createWhite(Type type) { + return new Piece(Color.WHITE, type); + } + + private static Piece createBlack(Type type) { + return new Piece(Color.BLACK, type); + } + public static Piece createWhitePawn() { - return new Piece(Color.WHITE, Type.PAWN); + return createWhite(Type.PAWN); } public static Piece createBlackPawn() { - return new Piece(Color.BLACK, Type.PAWN); + return createBlack(Type.PAWN); } public static Piece createWhiteRook() { - return new Piece(Color.WHITE, Type.ROOK); + return createWhite(Type.ROOK); } public static Piece createBlackRook() { - return new Piece(Color.BLACK, Type.ROOK); + return createBlack(Type.ROOK); } public static Piece createWhiteKnight() { - return new Piece(Color.WHITE, Type.KNIGHT); + return createWhite(Type.KNIGHT); } public static Piece createBlackKnight() { - return new Piece(Color.BLACK, Type.KNIGHT); + return createBlack(Type.KNIGHT); } public static Piece createWhiteBishop() { - return new Piece(Color.WHITE, Type.BISHOP); + return createWhite(Type.BISHOP); } public static Piece createBlackBishop() { - return new Piece(Color.BLACK, Type.BISHOP); + return createBlack(Type.BISHOP); } public static Piece createWhiteQueen() { - return new Piece(Color.WHITE, Type.QUEEN); + return createWhite(Type.QUEEN); } public static Piece createBlackQueen() { - return new Piece(Color.BLACK, Type.QUEEN); + return createBlack(Type.QUEEN); } public static Piece createWhiteKing() { - return new Piece(Color.WHITE, Type.KING); + return createWhite(Type.KING); } public static Piece createBlackKing() { - return new Piece(Color.BLACK, Type.KING); + return createBlack(Type.KING); } public static Piece createBlank() { return new Piece(Color.NO_COLOR, Type.BLANK); } From 8a7c7f02e3f72a34664776295527fe1c8749d155 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:01:48 +0900 Subject: [PATCH 06/53] =?UTF-8?q?=ED=83=80=EC=9E=85=EA=B3=BC=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=AC=EB=A5=BC=20=EB=8C=80=EC=A1=B0=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=ED=95=B4=EB=B3=B4=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 2 ++ src/main/java/chess/pieces/Piece.java | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 src/main/java/chess/Rank.java diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java new file mode 100644 index 000000000..055860e6e --- /dev/null +++ b/src/main/java/chess/Rank.java @@ -0,0 +1,2 @@ +package chess;public class Rank { +} diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index bc03a65f6..177b6c8ad 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -13,6 +13,10 @@ public Color getColor() { return this.color; } + public Type getType(){ + return this.type; + } + public boolean isWhite() { return getColor() == Color.WHITE; } @@ -25,6 +29,10 @@ public char getRepresentation() { return color == Color.WHITE ? type.getWhiteRepresentation() : type.getBlackRepresentation(); } + public boolean matchColorAndType(Color color, Type type) { + return getColor()==color && getType()==type; + } + private static Piece createWhite(Type type) { return new Piece(Color.WHITE, type); } From 05d5a5ff073d3b9e671d4c71171e12eef502a080 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:02:48 +0900 Subject: [PATCH 07/53] =?UTF-8?q?printBoard=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20-=20=EB=9D=84=EC=96=B4=EC=93=B0?= =?UTF-8?q?=EA=B8=B0=20=EA=B3=A0=EC=A0=95=20=EB=B0=8F=20rank=EC=99=80=20fi?= =?UTF-8?q?le=EC=9D=98=20=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/BoardTest.java | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/test/java/chess/BoardTest.java b/src/test/java/chess/BoardTest.java index 9a1baeffc..012473a54 100644 --- a/src/test/java/chess/BoardTest.java +++ b/src/test/java/chess/BoardTest.java @@ -1,5 +1,7 @@ package chess; +import chess.pieces.Color; +import chess.pieces.Type; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -20,18 +22,22 @@ void initBoard() { @DisplayName("체스판의 초기화가 정상적으로 이루어졌는지 확인한다.") void printBoard() { board.initialize(); - String blankRank = StringUtils.addNewLine("........"); + String blankRank = ". . . . . . . ."; final int TOTAL_PIECES_COUNT = 32; assertAll( () -> assertThat(TOTAL_PIECES_COUNT).isEqualTo(board.totalPiecesCount()), - () -> assertThat(StringUtils.addNewLine("RNBQKBNR") + - StringUtils.addNewLine("PPPPPPPP") + - blankRank + blankRank + blankRank + blankRank + - StringUtils.addNewLine("pppppppp") + - StringUtils.addNewLine("rnbqkbnr")) - .isEqualTo(board.getChessBoard()) + () -> assertThat(StringUtils.addNewLine("R N B Q K B N R 8") + + StringUtils.addNewLine("P P P P P P P P 7") + + StringUtils.addNewLine(blankRank + " 6") + + StringUtils.addNewLine(blankRank + " 5") + + StringUtils.addNewLine(blankRank + " 4") + + StringUtils.addNewLine(blankRank + " 3") + + StringUtils.addNewLine("p p p p p p p p 2") + + StringUtils.addNewLine("r n b q k b n r 1") + + StringUtils.getNewLine() + + StringUtils.addNewLine("a b c d e f g h")) + .isEqualTo(board.getChessBoard()) ); - } } From 83caa7ba7d7be0551a2063cf4a2a8500071bfce9 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:03:33 +0900 Subject: [PATCH 08/53] =?UTF-8?q?=ED=8A=B9=EC=A0=95=20=EC=9D=B8=EB=8D=B1?= =?UTF-8?q?=EC=8A=A4=EC=9D=98=20=EC=B2=B4=EC=8A=A4=EB=A7=90=EC=9D=84=20?= =?UTF-8?q?=EC=B0=BE=EB=8A=94=20finePiece=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/BoardTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/java/chess/BoardTest.java b/src/test/java/chess/BoardTest.java index 012473a54..292ac0d3e 100644 --- a/src/test/java/chess/BoardTest.java +++ b/src/test/java/chess/BoardTest.java @@ -40,4 +40,21 @@ void printBoard() { .isEqualTo(board.getChessBoard()) ); } + + @Test + void findPiece() { + board.initialize(); + + verifyPieceColorAndType(Color.BLACK, Type.ROOK, "a8"); + verifyPieceColorAndType(Color.BLACK, Type.ROOK, "h8"); + verifyPieceColorAndType(Color.WHITE, Type.ROOK, "a1"); + verifyPieceColorAndType(Color.WHITE, Type.ROOK, "h1"); + } + + void verifyPieceColorAndType(Color color, Type type, String index) { + assertAll( + () -> assertThat(type).isEqualTo(board.findPiece(index).getType()), + () -> assertThat(color).isEqualTo(board.findPiece(index).getColor()) + ); + } } From 7a3f85f7c0f3c9bc988a04b12df32b1e9089b175 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:06:20 +0900 Subject: [PATCH 09/53] =?UTF-8?q?Rank=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index 055860e6e..858a19b7f 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -1,2 +1,4 @@ -package chess;public class Rank { +package chess; + +public class Rank { } From d27247a43053e02da404431b838dd32ac98a7e5f Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:07:18 +0900 Subject: [PATCH 10/53] =?UTF-8?q?Piece=EB=A5=BC=20=EB=8B=B4=EB=8A=94=20pie?= =?UTF-8?q?ces=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index 858a19b7f..681790677 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -1,4 +1,11 @@ package chess; +import chess.pieces.Piece; + +import java.util.ArrayList; +import java.util.List; + public class Rank { + + private List pieces = new ArrayList<>(Board.BOARD_SIZE); } From 3c9c07bc969200458297460a7cf6eead20729a05 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:08:47 +0900 Subject: [PATCH 11/53] =?UTF-8?q?=EA=B8=B0=EB=B3=B8=EC=A0=81=EC=9D=B8=20ge?= =?UTF-8?q?t=EB=A9=94=EC=84=9C=EB=93=9C=EC=99=80=20add=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80.=20-=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=EB=8A=94=20getPieces,=20=EC=B2=B4=EC=8A=A4=EB=A7=90=EC=9D=84?= =?UTF-8?q?=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20getPiece,=20=EC=B2=B4?= =?UTF-8?q?=EC=8A=A4=EB=A7=90=20=EA=B3=BC=20=EA=B3=B5=EB=B0=B1=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=98=EB=8A=94=20add?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index 681790677..621269c59 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -1,6 +1,8 @@ package chess; +import chess.pieces.Color; import chess.pieces.Piece; +import chess.pieces.Type; import java.util.ArrayList; import java.util.List; @@ -8,4 +10,40 @@ public class Rank { private List pieces = new ArrayList<>(Board.BOARD_SIZE); + + public List getPieces() { + return pieces; + } + + public Piece getPiece(int rankIndex) { + return pieces.get(rankIndex); + } + + public void addWhitePieces(Piece piece) { + if (piece.isWhite()) { + pieces.add(piece); + return; + } + getAddErrorMessage(); + } + + public void addBlackPieces(Piece piece) { + if (piece.isBlack()) { + pieces.add(piece); + return; + } + getAddErrorMessage(); + } + + public void addBlank(Piece piece) { + if (piece.getType() == Type.BLANK) { + pieces.add(piece); + return; + } + getAddErrorMessage(); + } + private void getAddErrorMessage(){ + System.out.println("알 수 없는 color의 piece입니다."); + System.out.println("add에 실패하였습니다."); + } } From 837f717b2e4bca547968f8111de2b5902873a0d6 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:09:42 +0900 Subject: [PATCH 12/53] =?UTF-8?q?=EA=B8=B0=EB=B3=B8=EC=84=B8=ED=8C=85?= =?UTF-8?q?=EC=9D=84=20=EB=8B=B4=EB=8B=B9=ED=95=98=EB=8A=94=20initialize?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=93=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 53 +++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index 621269c59..f3c31330d 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -46,4 +46,57 @@ private void getAddErrorMessage(){ System.out.println("알 수 없는 color의 piece입니다."); System.out.println("add에 실패하였습니다."); } + + public static Rank initializeWhitePieces() { + Rank rank = new Rank(); + rank.addWhitePieces(Piece.createWhiteRook()); + rank.addWhitePieces(Piece.createWhiteKnight()); + rank.addWhitePieces(Piece.createWhiteBishop()); + rank.addWhitePieces(Piece.createWhiteQueen()); + rank.addWhitePieces(Piece.createWhiteKing()); + rank.addWhitePieces(Piece.createWhiteBishop()); + rank.addWhitePieces(Piece.createWhiteKnight()); + rank.addWhitePieces(Piece.createWhiteRook()); + + return rank; + } + + public static Rank initializeWhitePawns() { + Rank rank = new Rank(); + for (int i = 0; i < Board.BOARD_SIZE; i++) { + rank.addWhitePieces(Piece.createWhitePawn()); + } + return rank; + } + + public static Rank initializeBlackPieces() { + Rank rank = new Rank(); + rank.addBlackPieces(Piece.createBlackRook()); + rank.addBlackPieces(Piece.createBlackKnight()); + rank.addBlackPieces(Piece.createBlackBishop()); + rank.addBlackPieces(Piece.createBlackQueen()); + rank.addBlackPieces(Piece.createBlackKing()); + rank.addBlackPieces(Piece.createBlackBishop()); + rank.addBlackPieces(Piece.createBlackKnight()); + rank.addBlackPieces(Piece.createBlackRook()); + + return rank; + } + + public static Rank initializeBlackPawns() { + Rank rank = new Rank(); + for (int i = 0; i < Board.BOARD_SIZE; i++) { + rank.addBlackPieces(Piece.createBlackPawn()); + } + return rank; + } + + public static Rank initializeBlank() { + Rank rank = new Rank(); + for (int i = 0; i < Board.BOARD_SIZE; i++) { + rank.addBlank(Piece.createBlank()); + } + return rank; + } + } From 28c452503edd5fc131e9b43af7f8b08ca2212553 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:10:48 +0900 Subject: [PATCH 13/53] =?UTF-8?q?=EC=BB=AC=EB=9F=AC=EC=99=80=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EC=B2=B4=EC=8A=A4?= =?UTF-8?q?=EB=A7=90=EC=9D=84=20=ED=99=95=EC=9D=B8=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EA=B0=9C=EC=88=98=EB=A5=BC=20=EC=84=B8=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index f3c31330d..7e3f7a15b 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -99,4 +99,15 @@ public static Rank initializeBlank() { return rank; } + public int getCountPieceByColorAndType(Color color, Type type) { + int countPiece = 0; + + for (Piece piece : pieces){ + if(piece.matchColorAndType(color,type)){ + countPiece += 1; + } + } + + return countPiece; + } } From 11ecf6e9456766e738a7dbceba4b840ba18710fe Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:13:34 +0900 Subject: [PATCH 14/53] =?UTF-8?q?=EC=83=89=EC=83=81=EB=B3=84=EB=A1=9C=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EB=90=98=EC=96=B4=EC=9E=88=EB=8D=98=20pieces?= =?UTF-8?q?=20List=EB=A5=BC=20=EC=88=98=EC=A0=95=ED=95=98=EC=97=AC=20Piece?= =?UTF-8?q?s=EB=A5=BC=20=EB=8B=B4=EB=8A=94=20Rank=EB=A5=BC=20=EA=B0=96?= =?UTF-8?q?=EB=8A=94=20files=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 105 +-------------------------------- 1 file changed, 1 insertion(+), 104 deletions(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 37322ae5e..22e30de05 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -11,110 +11,7 @@ public class Board { public static final int BOARD_SIZE = 8; - private final List whitePieces = new ArrayList<>(); - private final List blackPieces = new ArrayList<>(); + private final List files = new ArrayList<>(BOARD_SIZE); - public void addWhitePieces(Piece piece) { - if (piece.isWhite()) { - whitePieces.add(piece); - return; - } - getAddErrorMessage(); - } - public void addBlackPieces(Piece piece) { - if (piece.isBlack()) { - blackPieces.add(piece); - return; - } - getAddErrorMessage(); - } - - private void getAddErrorMessage(){ - System.out.println("알 수 없는 color의 piece입니다."); - System.out.println("add에 실패하였습니다."); - } - - public int totalPiecesCount() { - return whitePieces.size() + blackPieces.size(); - } - - private void appendChessPieceToSort(StringBuilder stringBuilder, Piece piece){ - stringBuilder.append(piece.getRepresentation()); - if (stringBuilder.length() == BOARD_SIZE) { - stringBuilder.append(StringUtils.getNewLine()); - } - } - - private String getPiecesSort(Color color) { - StringBuilder sb = new StringBuilder(); - switch (color) { - case WHITE: - for (Piece piece : whitePieces) { - appendChessPieceToSort(sb, piece); - } - return sb.toString(); - - case BLACK: - for (Piece piece : blackPieces) { - appendChessPieceToSort(sb, piece); - } - return sb.toString(); - - default: - return ""; - } - } - - public void initialize() { - initializeBlackPieces(); - initializeWhitePieces(); - } - - private void initializeWhitePieces() { - for (int i = 0; i < BOARD_SIZE; i++) { - addWhitePieces(Piece.createWhitePawn()); - } - - addWhitePieces(Piece.createWhiteRook()); - addWhitePieces(Piece.createWhiteKnight()); - addWhitePieces(Piece.createWhiteBishop()); - addWhitePieces(Piece.createWhiteQueen()); - addWhitePieces(Piece.createWhiteKing()); - addWhitePieces(Piece.createWhiteBishop()); - addWhitePieces(Piece.createWhiteKnight()); - addWhitePieces(Piece.createWhiteRook()); - } - - private void initializeBlackPieces() { - - addBlackPieces(Piece.createBlackRook()); - addBlackPieces(Piece.createBlackKnight()); - addBlackPieces(Piece.createBlackBishop()); - addBlackPieces(Piece.createBlackQueen()); - addBlackPieces(Piece.createBlackKing()); - addBlackPieces(Piece.createBlackBishop()); - addBlackPieces(Piece.createBlackKnight()); - addBlackPieces(Piece.createBlackRook()); - - for (int i = 0; i < BOARD_SIZE; i++) { - addBlackPieces(Piece.createBlackPawn()); - } - } - - public String getChessBoard() { - StringBuilder boardRank = new StringBuilder(); - String blank = "........"; - - boardRank.append(StringUtils.addNewLine(getPiecesSort(Color.BLACK))); - - boardRank.append(StringUtils.addNewLine(blank)); - boardRank.append(StringUtils.addNewLine(blank)); - boardRank.append(StringUtils.addNewLine(blank)); - boardRank.append(StringUtils.addNewLine(blank)); - - boardRank.append(StringUtils.addNewLine(getPiecesSort(Color.WHITE))); - - return boardRank.toString(); - } } \ No newline at end of file From 996a4d458bb7807fab90ae3f8f4a5d242dfbfb84 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:14:19 +0900 Subject: [PATCH 15/53] =?UTF-8?q?=EC=83=89=EC=83=81=EA=B3=BC=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20=EB=B3=84=EB=A1=9C=20=EC=B2=B4=EC=8A=A4=EB=A7=90?= =?UTF-8?q?=EC=9D=98=20=EA=B0=9C=EC=88=98=EB=A5=BC=20=EC=84=B8=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=98=EC=97=AC,=20total=20=EA=B0=9C=EC=88=98=EB=A5=BC=20?= =?UTF-8?q?=EC=84=B8=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=8F=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 22e30de05..320055ccf 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -13,5 +13,33 @@ public class Board { private final List files = new ArrayList<>(BOARD_SIZE); + public int totalPiecesCount() { + int count = 0; + + count += countPieceByColorAndType(Color.WHITE, Type.PAWN); + count += countPieceByColorAndType(Color.WHITE, Type.ROOK); + count += countPieceByColorAndType(Color.WHITE, Type.KNIGHT); + count += countPieceByColorAndType(Color.WHITE, Type.BISHOP); + count += countPieceByColorAndType(Color.WHITE, Type.QUEEN); + count += countPieceByColorAndType(Color.WHITE, Type.KING); + + count += countPieceByColorAndType(Color.BLACK, Type.PAWN); + count += countPieceByColorAndType(Color.BLACK, Type.ROOK); + count += countPieceByColorAndType(Color.BLACK, Type.KNIGHT); + count += countPieceByColorAndType(Color.BLACK, Type.BISHOP); + count += countPieceByColorAndType(Color.BLACK, Type.QUEEN); + count += countPieceByColorAndType(Color.BLACK, Type.KING); + + return count; + } + + public int countPieceByColorAndType(Color color, Type type){ + int countPiece = 0; + for(Rank rank : files) { + countPiece += rank.getCountPieceByColorAndType(color, type); + } + + return countPiece; + } } \ No newline at end of file From a7189244ed01f3abbbbcded1c4f8730d1279ba13 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:15:01 +0900 Subject: [PATCH 16/53] =?UTF-8?q?=ED=8A=B9=EC=A0=95=20=EC=9C=84=EC=B9=98?= =?UTF-8?q?=EC=97=90=20=EC=9E=88=EB=8A=94=20=EC=B2=B4=EC=8A=A4=EB=A7=90?= =?UTF-8?q?=EC=9D=84=20=EC=B0=BE=EB=8A=94=20findPiecd=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 320055ccf..2f854349a 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -42,4 +42,13 @@ public int countPieceByColorAndType(Color color, Type type){ return countPiece; } + public Piece findPiece(String s) { + char rankIndex = s.charAt(0); + char fileIndex = s.charAt(1); + + int rankIndexPos = rankIndex - 'a'; + int fileIndexPos = Character.getNumericValue(fileIndex); + + return files.get((fileIndexPos-1)).getPiece(rankIndexPos); + } } \ No newline at end of file From 99c9b1d01b88b0c16920798c5579868ac6855e0c Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:15:57 +0900 Subject: [PATCH 17/53] =?UTF-8?q?rank=EB=A5=BC=20=EC=9D=BD=EC=96=B4,=20Str?= =?UTF-8?q?ing=EC=9C=BC=EB=A1=9C=20=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 2f854349a..8f0f46be7 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -51,4 +51,18 @@ public Piece findPiece(String s) { return files.get((fileIndexPos-1)).getPiece(rankIndexPos); } + + private String getRank(Rank rank) { + StringBuilder sb = new StringBuilder(); + for(Piece piece : rank.getPieces()){ + if(piece.isBlack()){ + sb.append(piece.getType().getBlackRepresentation()).append(" "); + } else { + sb.append(piece.getType().getWhiteRepresentation()).append(" "); + } + + } + return sb.toString(); + } + } \ No newline at end of file From 4ba0982a576bf605af9f1b9d6d110a6a3c7f7150 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:16:40 +0900 Subject: [PATCH 18/53] =?UTF-8?q?files=EC=97=90=20rank=EB=9D=BC=EC=9D=B8?= =?UTF-8?q?=EB=93=A4=EC=9D=84=20=EB=84=A3=EB=8F=84=EB=A1=9D=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 8f0f46be7..b5a67cfdc 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -64,5 +64,15 @@ private String getRank(Rank rank) { } return sb.toString(); } - + + public void initialize() { + files.add(Rank.initializeWhitePieces()); + files.add(Rank.initializeWhitePawns()); + files.add(Rank.initializeBlank()); + files.add(Rank.initializeBlank()); + files.add(Rank.initializeBlank()); + files.add(Rank.initializeBlank()); + files.add(Rank.initializeBlackPawns()); + files.add(Rank.initializeBlackPieces()); + } } \ No newline at end of file From 835291751b7c91e8f524cd1892a6d44f99a33d02 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:17:23 +0900 Subject: [PATCH 19/53] =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=93=A4?= =?UTF-8?q?=EC=9D=98=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EC=88=98=EC=A0=95=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index b5a67cfdc..f033fa825 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -75,4 +75,20 @@ public void initialize() { files.add(Rank.initializeBlackPawns()); files.add(Rank.initializeBlackPieces()); } + + public String getChessBoard() { + StringBuilder boardRank = new StringBuilder(); + + String fileIndex = "a b c d e f g h"; + + for(int i = BOARD_SIZE-1; i >= 0; i--){ + boardRank.append(getRank(files.get(i))); + boardRank.append(" ").append(i+1); + boardRank.append(StringUtils.getNewLine()); + } + + boardRank.append(StringUtils.getNewLine()); + boardRank.append(StringUtils.addNewLine(fileIndex)); + return boardRank.toString(); + } } \ No newline at end of file From dd2ffdb8440f759ddefa9344d6c3cd0bc965983e Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:29:42 +0900 Subject: [PATCH 20/53] =?UTF-8?q?=EB=B9=84=EC=96=B4=EC=9E=88=EB=8A=94=20?= =?UTF-8?q?=EC=B2=B4=EC=8A=A4=ED=8C=90=EC=9D=84=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index f033fa825..181c5cd94 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -76,6 +76,12 @@ public void initialize() { files.add(Rank.initializeBlackPieces()); } + public void initializeEmpty() { + for(int i = 0; i < BOARD_SIZE; i++){ + files.add(Rank.initializeBlank()); + } + } + public String getChessBoard() { StringBuilder boardRank = new StringBuilder(); From 6cc1adf9825c0685e5bb65f0e5e0b088768cc6ef Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:48:52 +0900 Subject: [PATCH 21/53] =?UTF-8?q?move=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EC=9D=98=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/BoardTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/chess/BoardTest.java b/src/test/java/chess/BoardTest.java index 292ac0d3e..dd3a1be05 100644 --- a/src/test/java/chess/BoardTest.java +++ b/src/test/java/chess/BoardTest.java @@ -1,6 +1,7 @@ package chess; import chess.pieces.Color; +import chess.pieces.Piece; import chess.pieces.Type; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -57,4 +58,16 @@ void verifyPieceColorAndType(Color color, Type type, String index) { () -> assertThat(color).isEqualTo(board.findPiece(index).getColor()) ); } + + @Test + public void move() { + board.initializeEmpty(); + + String position = "b5"; + Piece piece = Piece.createBlackRook(); + board.move(position, piece); + + assertThat(piece).isEqualTo(board.findPiece(position)); + System.out.println(board.getChessBoard()); + } } From f655d1cccc29d1b1a6ac2d54fc32fd5f89e20536 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:49:15 +0900 Subject: [PATCH 22/53] =?UTF-8?q?=EC=B2=B4=EC=8A=A4=EB=A7=90=EC=9D=84=20?= =?UTF-8?q?=EC=98=AE=EA=B8=B0=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 181c5cd94..85d317e5d 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -82,6 +82,16 @@ public void initializeEmpty() { } } + public void move(String position, Piece piece){ + char rankIndex = position.charAt(0); + char fileIndex = position.charAt(1); + + int rankIndexPos = rankIndex - 'a'; + int fileIndexPos = Character.getNumericValue(fileIndex); + + files.get(fileIndexPos-1).move(rankIndexPos, piece); + } + public String getChessBoard() { StringBuilder boardRank = new StringBuilder(); From cab6800dd5e7154b5b447d1a2160c4f3f76796a5 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:50:02 +0900 Subject: [PATCH 23/53] =?UTF-8?q?List=EC=97=90=EC=84=9C=20=EC=B2=B4?= =?UTF-8?q?=EC=8A=A4=EB=A7=90=EC=9D=84=20set=ED=95=B4=EC=A3=BC=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index 7e3f7a15b..680cb24e5 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -42,6 +42,11 @@ public void addBlank(Piece piece) { } getAddErrorMessage(); } + + public void move(int position, Piece piece) { + pieces.set(position, piece); + } + private void getAddErrorMessage(){ System.out.println("알 수 없는 color의 piece입니다."); System.out.println("add에 실패하였습니다."); From 391dd45420ce66f7961d6cb06cccf6140a432b66 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 22:39:26 +0900 Subject: [PATCH 24/53] =?UTF-8?q?=EC=83=89=EC=83=81=EC=9D=84=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EB=8A=94=20matchColor=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Piece.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index 177b6c8ad..74315a47a 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -33,6 +33,10 @@ public boolean matchColorAndType(Color color, Type type) { return getColor()==color && getType()==type; } + public boolean matchColor(Color color) { + return getColor()==color; + } + private static Piece createWhite(Type type) { return new Piece(Color.WHITE, type); } From 0cf7cf0ec94a73d71a094b03c26998c6af5f9689 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 22:40:12 +0900 Subject: [PATCH 25/53] =?UTF-8?q?Type=20enum=EC=97=90=20point=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Piece.java | 10 ++++++++++ src/main/java/chess/pieces/Type.java | 22 ++++++++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index 74315a47a..fd9ddc20d 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -1,5 +1,7 @@ package chess.pieces; +import java.util.List; + public class Piece { private final Color color; private final Type type; @@ -17,6 +19,14 @@ public Type getType(){ return this.type; } + public double getPoint(List pieces){ + if(getType()!= Type.PAWN){ + return getType().getDefaultPoint(); + } + // TODO: getPoint + return getType().getDefaultPoint(); + } + public boolean isWhite() { return getColor() == Color.WHITE; } diff --git a/src/main/java/chess/pieces/Type.java b/src/main/java/chess/pieces/Type.java index 48e6eb5f5..b6c58991e 100644 --- a/src/main/java/chess/pieces/Type.java +++ b/src/main/java/chess/pieces/Type.java @@ -1,18 +1,20 @@ package chess.pieces; public enum Type { - PAWN('p'), - ROOK('r'), - KNIGHT('n'), - BISHOP('b'), - QUEEN('q'), - KING('k'), - BLANK('.'); + PAWN('p', 1.0), + ROOK('r', 5.0), + KNIGHT('n', 2.5), + BISHOP('b', 3.0), + QUEEN('q', 9.0), + KING('k', 0.0), + BLANK('.', 0.0); private final char representation; + private final double defaultPoint; - Type(char representation) { + Type(char representation, double defaultPoint) { this.representation = representation; + this.defaultPoint = defaultPoint; } public char getWhiteRepresentation() { @@ -22,4 +24,8 @@ public char getWhiteRepresentation() { public char getBlackRepresentation() { return Character.toUpperCase(representation); } + + public double getDefaultPoint() { + return defaultPoint; + } } From dbc227aac753674dbd612beec8a1f14ccb965972 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 22:40:58 +0900 Subject: [PATCH 26/53] =?UTF-8?q?Point=20=EC=A0=90=EC=88=98=EC=9D=98=20?= =?UTF-8?q?=ED=95=A9=EA=B3=84=EB=A5=BC=20=EA=B5=AC=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=A9=94=EC=84=9C=EB=93=9C=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 --- src/test/java/chess/BoardTest.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/test/java/chess/BoardTest.java b/src/test/java/chess/BoardTest.java index dd3a1be05..362dce43f 100644 --- a/src/test/java/chess/BoardTest.java +++ b/src/test/java/chess/BoardTest.java @@ -70,4 +70,28 @@ public void move() { assertThat(piece).isEqualTo(board.findPiece(position)); System.out.println(board.getChessBoard()); } + + @Test + public void caculcatePoint() throws Exception { + board.initializeEmpty(); + + addPiece("b6", Piece.createBlackPawn()); + addPiece("e6", Piece.createBlackQueen()); + addPiece("b8", Piece.createBlackKing()); + addPiece("c8", Piece.createBlackRook()); + + addPiece("f2", Piece.createWhitePawn()); + addPiece("g2", Piece.createWhitePawn()); + addPiece("e1", Piece.createWhiteRook()); + addPiece("f1", Piece.createWhiteKing()); + + assertThat(15.0).isEqualTo(board.caculcatePoint(Color.BLACK)); + assertThat(7.0).isEqualTo(board.caculcatePoint(Color.WHITE)); + + System.out.println(board.getChessBoard()); + } + + private void addPiece(String position, Piece piece) { + board.move(position, piece); + } } From 8383330b41347f95fe907ac61191e49f90b4828a Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 22:41:45 +0900 Subject: [PATCH 27/53] =?UTF-8?q?=EC=83=89=EC=83=81=EC=9D=84=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=EC=9C=BC=EB=A1=9C=20=EC=B2=B4=EC=8A=A4=EB=A7=90?= =?UTF-8?q?=EC=9D=84=20=EC=B0=BE=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=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 --- src/main/java/chess/Rank.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index 680cb24e5..b2e330559 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -115,4 +115,16 @@ public int getCountPieceByColorAndType(Color color, Type type) { return countPiece; } + + public List findPieceByColor(Color color) { + List pieceByColor = new ArrayList<>(Board.BOARD_SIZE); + + for (Piece piece : pieces){ + if(piece.matchColor(color)){ + pieceByColor.add(piece); + } + } + + return pieceByColor; + } } From e665d14c2b7cf912c654c48f6f469d5fc287cb7b Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Mon, 22 Feb 2021 22:42:18 +0900 Subject: [PATCH 28/53] =?UTF-8?q?=EC=83=89=EC=83=81=20=EB=B3=84=EB=A1=9C?= =?UTF-8?q?=20=EC=A0=90=EC=88=98=EB=A5=BC=20=ED=95=A9=EC=B3=90=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=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 --- src/main/java/chess/Board.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 85d317e5d..f88e79fc3 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -42,6 +42,16 @@ public int countPieceByColorAndType(Color color, Type type){ return countPiece; } + public List findPiecesByColor(Color color){ + List pieces = new ArrayList<>(); + + for(Rank rank : files) { + pieces.addAll(rank.findPieceByColor(color)); + } + + return pieces; + } + public Piece findPiece(String s) { char rankIndex = s.charAt(0); char fileIndex = s.charAt(1); @@ -92,6 +102,16 @@ public void move(String position, Piece piece){ files.get(fileIndexPos-1).move(rankIndexPos, piece); } + public double caculcatePoint(Color color) { + List pieces = findPiecesByColor(color); + double point = 0.0; + for(Piece piece : pieces){ + point += piece.getPoint(pieces); + } + + return point; + } + public String getChessBoard() { StringBuilder boardRank = new StringBuilder(); From 6ead935e755d47da7642f1a83e99ec7b4c4b846d Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:21:53 +0900 Subject: [PATCH 29/53] =?UTF-8?q?=EC=B2=B4=EC=8A=A4=EB=A7=90=EC=9D=98=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=EB=A5=BC=20=EC=96=BB=EC=9D=84=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20Position=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20create?= =?UTF-8?q?=EC=97=90=20position=EC=9D=B8=EC=9E=90=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=EC=99=80,=20x=EC=99=80=20y=EC=9D=98=20=EA=B0=92=EC=9D=84=20?= =?UTF-8?q?=EC=96=BB=EC=9D=84=20=EC=88=98=20=EC=9E=88=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Piece.java | 75 ++++++++++++------------ src/main/java/chess/pieces/Position.java | 2 + 2 files changed, 41 insertions(+), 36 deletions(-) create mode 100644 src/main/java/chess/pieces/Position.java diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index fd9ddc20d..c2d00a193 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -5,10 +5,12 @@ public class Piece { private final Color color; private final Type type; + private final Position position; - private Piece(Color color, Type type) { + private Piece(Color color, Type type, Position position) { this.color = color; this.type = type; + this.position = position; } public Color getColor() { @@ -19,12 +21,12 @@ public Type getType(){ return this.type; } - public double getPoint(List pieces){ - if(getType()!= Type.PAWN){ - return getType().getDefaultPoint(); - } - // TODO: getPoint - return getType().getDefaultPoint(); + public int getRankPosition() { + return this.position.getRank(); + } + + public int getFilePosition() { + return this.position.getFile(); } public boolean isWhite() { @@ -47,61 +49,62 @@ public boolean matchColor(Color color) { return getColor()==color; } - private static Piece createWhite(Type type) { - return new Piece(Color.WHITE, type); + + private static Piece createWhite(Type type, Position position) { + return new Piece(Color.WHITE, type, position); } - private static Piece createBlack(Type type) { - return new Piece(Color.BLACK, type); + private static Piece createBlack(Type type, Position position) { + return new Piece(Color.BLACK, type, position); } - public static Piece createWhitePawn() { - return createWhite(Type.PAWN); + public static Piece createWhitePawn(Position position) { + return createWhite(Type.PAWN, position); } - public static Piece createBlackPawn() { - return createBlack(Type.PAWN); + public static Piece createBlackPawn(Position position) { + return createBlack(Type.PAWN, position); } - public static Piece createWhiteRook() { - return createWhite(Type.ROOK); + public static Piece createWhiteRook(Position position) { + return createWhite(Type.ROOK, position); } - public static Piece createBlackRook() { - return createBlack(Type.ROOK); + public static Piece createBlackRook(Position position) { + return createBlack(Type.ROOK, position); } - public static Piece createWhiteKnight() { - return createWhite(Type.KNIGHT); + public static Piece createWhiteKnight(Position position) { + return createWhite(Type.KNIGHT, position); } - public static Piece createBlackKnight() { - return createBlack(Type.KNIGHT); + public static Piece createBlackKnight(Position position) { + return createBlack(Type.KNIGHT, position); } - public static Piece createWhiteBishop() { - return createWhite(Type.BISHOP); + public static Piece createWhiteBishop(Position position) { + return createWhite(Type.BISHOP, position); } - public static Piece createBlackBishop() { - return createBlack(Type.BISHOP); + public static Piece createBlackBishop(Position position) { + return createBlack(Type.BISHOP, position); } - public static Piece createWhiteQueen() { - return createWhite(Type.QUEEN); + public static Piece createWhiteQueen(Position position) { + return createWhite(Type.QUEEN, position); } - public static Piece createBlackQueen() { - return createBlack(Type.QUEEN); + public static Piece createBlackQueen(Position position) { + return createBlack(Type.QUEEN, position); } - public static Piece createWhiteKing() { - return createWhite(Type.KING); + public static Piece createWhiteKing(Position position) { + return createWhite(Type.KING, position); } - public static Piece createBlackKing() { - return createBlack(Type.KING); + public static Piece createBlackKing(Position position) { + return createBlack(Type.KING, position); } - public static Piece createBlank() { return new Piece(Color.NO_COLOR, Type.BLANK); } + public static Piece createBlank(Position position) { return new Piece(Color.NO_COLOR, Type.BLANK, position); } } diff --git a/src/main/java/chess/pieces/Position.java b/src/main/java/chess/pieces/Position.java new file mode 100644 index 000000000..9162612e6 --- /dev/null +++ b/src/main/java/chess/pieces/Position.java @@ -0,0 +1,2 @@ +package chess.pieces;public class Position { +} From 3f5eda2d7a770ff89618a3fc960cdb31798811a3 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:23:12 +0900 Subject: [PATCH 30/53] =?UTF-8?q?=EC=B2=B4=EC=8A=A4=EB=A7=90=EC=9D=98=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=EB=A5=BC=20=EC=96=BB=EC=9D=84=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20Point=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=98=EC=97=AC=20=EA=B8=B0=EB=B3=B8=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=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/chess/pieces/Position.java | 27 +++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/chess/pieces/Position.java b/src/main/java/chess/pieces/Position.java index 9162612e6..19a44947b 100644 --- a/src/main/java/chess/pieces/Position.java +++ b/src/main/java/chess/pieces/Position.java @@ -1,2 +1,27 @@ -package chess.pieces;public class Position { +package chess.pieces; + +public class Position { + private int rank, file; + + public Position(String position){ + char rankIndex = position.charAt(0); + char fileIndex = position.charAt(1); + + this.rank = rankIndex - 'a'; + this.file = (Character.getNumericValue(fileIndex))-1; + } + + public Position(int rank, int file){ + this.rank = rank-1; + this.file = file-1; + } + + public int getRank() { + return rank; + } + + public int getFile() { + return file; + } + } From 3cd3a2dc290837e35434bd444a4a8456dc77ca2e Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:24:10 +0900 Subject: [PATCH 31/53] =?UTF-8?q?Position=20=EC=B6=94=EA=B0=80=EB=A1=9C?= =?UTF-8?q?=EC=9D=B8=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 63 ++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index b2e330559..88020d65e 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -2,6 +2,7 @@ import chess.pieces.Color; import chess.pieces.Piece; +import chess.pieces.Position; import chess.pieces.Type; import java.util.ArrayList; @@ -52,54 +53,62 @@ private void getAddErrorMessage(){ System.out.println("add에 실패하였습니다."); } - public static Rank initializeWhitePieces() { + public static Rank initializeWhitePieces(int fileIndex) { Rank rank = new Rank(); - rank.addWhitePieces(Piece.createWhiteRook()); - rank.addWhitePieces(Piece.createWhiteKnight()); - rank.addWhitePieces(Piece.createWhiteBishop()); - rank.addWhitePieces(Piece.createWhiteQueen()); - rank.addWhitePieces(Piece.createWhiteKing()); - rank.addWhitePieces(Piece.createWhiteBishop()); - rank.addWhitePieces(Piece.createWhiteKnight()); - rank.addWhitePieces(Piece.createWhiteRook()); + rank.addWhitePieces(Piece.createWhiteRook(new Position(8, fileIndex))); + rank.addWhitePieces(Piece.createWhiteKnight(new Position(7, fileIndex))); + rank.addWhitePieces(Piece.createWhiteBishop(new Position(6, fileIndex))); + rank.addWhitePieces(Piece.createWhiteQueen(new Position(5, fileIndex))); + rank.addWhitePieces(Piece.createWhiteKing(new Position(4, fileIndex))); + rank.addWhitePieces(Piece.createWhiteBishop(new Position(3, fileIndex))); + rank.addWhitePieces(Piece.createWhiteKnight(new Position(2, fileIndex))); + rank.addWhitePieces(Piece.createWhiteRook(new Position(1, fileIndex))); return rank; } - public static Rank initializeWhitePawns() { + public static Rank initializeWhitePawns(int fileIndex) { Rank rank = new Rank(); - for (int i = 0; i < Board.BOARD_SIZE; i++) { - rank.addWhitePieces(Piece.createWhitePawn()); + for (int rankIndex = 0; rankIndex < Board.BOARD_SIZE; rankIndex++) { + rank.addWhitePieces(Piece.createWhitePawn(new Position(rankIndex, fileIndex))); } return rank; } - public static Rank initializeBlackPieces() { + public static Rank initializeBlackPieces(int fileIndex) { Rank rank = new Rank(); - rank.addBlackPieces(Piece.createBlackRook()); - rank.addBlackPieces(Piece.createBlackKnight()); - rank.addBlackPieces(Piece.createBlackBishop()); - rank.addBlackPieces(Piece.createBlackQueen()); - rank.addBlackPieces(Piece.createBlackKing()); - rank.addBlackPieces(Piece.createBlackBishop()); - rank.addBlackPieces(Piece.createBlackKnight()); - rank.addBlackPieces(Piece.createBlackRook()); + rank.addBlackPieces(Piece.createBlackRook(new Position(8, fileIndex))); + rank.addBlackPieces(Piece.createBlackKnight(new Position(7, fileIndex))); + rank.addBlackPieces(Piece.createBlackBishop(new Position(6, fileIndex))); + rank.addBlackPieces(Piece.createBlackQueen(new Position(5, fileIndex))); + rank.addBlackPieces(Piece.createBlackKing(new Position(4, fileIndex))); + rank.addBlackPieces(Piece.createBlackBishop(new Position(3, fileIndex))); + rank.addBlackPieces(Piece.createBlackKnight(new Position(2, fileIndex))); + rank.addBlackPieces(Piece.createBlackRook(new Position(1, fileIndex))); return rank; } - public static Rank initializeBlackPawns() { + public static Rank initializeBlackPawns(int fileIndex) { Rank rank = new Rank(); - for (int i = 0; i < Board.BOARD_SIZE; i++) { - rank.addBlackPieces(Piece.createBlackPawn()); + for (int rankIndex = 0; rankIndex < Board.BOARD_SIZE; rankIndex++) { + rank.addBlackPieces(Piece.createBlackPawn(new Position(rankIndex, fileIndex))); } return rank; } - public static Rank initializeBlank() { + public static Rank initializeBlank(int fileIndex) { Rank rank = new Rank(); - for (int i = 0; i < Board.BOARD_SIZE; i++) { - rank.addBlank(Piece.createBlank()); + for (int rankIndex = 0; rankIndex < Board.BOARD_SIZE; rankIndex++) { + rank.addBlank(Piece.createBlank(new Position(rankIndex, fileIndex))); + } + return rank; + } + + public static Rank initializeAllBlank(int fileIndex) { + Rank rank = new Rank(); + for (int rankIndex = 0; rankIndex < Board.BOARD_SIZE; rankIndex++) { + rank.addBlank(Piece.createBlank(new Position(rankIndex, fileIndex))); } return rank; } From c4ded839b92b21afe54d17b12ace08dd2c68a62e Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:25:22 +0900 Subject: [PATCH 32/53] =?UTF-8?q?Position=20=EC=B6=94=EA=B0=80=EB=A1=9C?= =?UTF-8?q?=EC=9D=B8=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 41 ++++++++++++++-------------------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index f88e79fc3..c5dd09c0b 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -2,6 +2,7 @@ import chess.pieces.Color; import chess.pieces.Piece; +import chess.pieces.Position; import chess.pieces.Type; import utils.StringUtils; @@ -52,14 +53,10 @@ public List findPiecesByColor(Color color){ return pieces; } - public Piece findPiece(String s) { - char rankIndex = s.charAt(0); - char fileIndex = s.charAt(1); + public Piece findPiece(String position) { + Position chessBoardIndex = new Position(position); - int rankIndexPos = rankIndex - 'a'; - int fileIndexPos = Character.getNumericValue(fileIndex); - - return files.get((fileIndexPos-1)).getPiece(rankIndexPos); + return files.get((chessBoardIndex.getFile())).getPiece(chessBoardIndex.getRank()); } private String getRank(Rank rank) { @@ -76,30 +73,26 @@ private String getRank(Rank rank) { } public void initialize() { - files.add(Rank.initializeWhitePieces()); - files.add(Rank.initializeWhitePawns()); - files.add(Rank.initializeBlank()); - files.add(Rank.initializeBlank()); - files.add(Rank.initializeBlank()); - files.add(Rank.initializeBlank()); - files.add(Rank.initializeBlackPawns()); - files.add(Rank.initializeBlackPieces()); + files.add(Rank.initializeWhitePieces(8)); + files.add(Rank.initializeWhitePawns(7)); + files.add(Rank.initializeBlank(6)); + files.add(Rank.initializeBlank(5)); + files.add(Rank.initializeBlank(4)); + files.add(Rank.initializeBlank(3)); + files.add(Rank.initializeBlackPawns(2)); + files.add(Rank.initializeBlackPieces(1)); } - public void initializeEmpty() { - for(int i = 0; i < BOARD_SIZE; i++){ - files.add(Rank.initializeBlank()); + public void initializeAllEmpty() { + for(int i = 1; i <= BOARD_SIZE; i++){ + files.add(Rank.initializeBlank(i)); } } public void move(String position, Piece piece){ - char rankIndex = position.charAt(0); - char fileIndex = position.charAt(1); - - int rankIndexPos = rankIndex - 'a'; - int fileIndexPos = Character.getNumericValue(fileIndex); + Position chessBoardIndex = new Position(position); - files.get(fileIndexPos-1).move(rankIndexPos, piece); + files.get(chessBoardIndex.getFile()).move(chessBoardIndex.getRank(), piece); } public double caculcatePoint(Color color) { From e87e44379375ce6b375251d90a46b8c8aa59d32f Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:25:40 +0900 Subject: [PATCH 33/53] =?UTF-8?q?Position=20=EC=B6=94=EA=B0=80=EB=A1=9C?= =?UTF-8?q?=EC=9D=B8=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/BoardTest.java | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/test/java/chess/BoardTest.java b/src/test/java/chess/BoardTest.java index 362dce43f..5b212ad1a 100644 --- a/src/test/java/chess/BoardTest.java +++ b/src/test/java/chess/BoardTest.java @@ -2,6 +2,7 @@ import chess.pieces.Color; import chess.pieces.Piece; +import chess.pieces.Position; import chess.pieces.Type; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -61,10 +62,10 @@ void verifyPieceColorAndType(Color color, Type type, String index) { @Test public void move() { - board.initializeEmpty(); + board.initializeAllEmpty(); String position = "b5"; - Piece piece = Piece.createBlackRook(); + Piece piece = Piece.createBlackRook(new Position(position)); board.move(position, piece); assertThat(piece).isEqualTo(board.findPiece(position)); @@ -72,18 +73,18 @@ public void move() { } @Test - public void caculcatePoint() throws Exception { - board.initializeEmpty(); - - addPiece("b6", Piece.createBlackPawn()); - addPiece("e6", Piece.createBlackQueen()); - addPiece("b8", Piece.createBlackKing()); - addPiece("c8", Piece.createBlackRook()); - - addPiece("f2", Piece.createWhitePawn()); - addPiece("g2", Piece.createWhitePawn()); - addPiece("e1", Piece.createWhiteRook()); - addPiece("f1", Piece.createWhiteKing()); + public void caculcatePoint() { + board.initializeAllEmpty(); + + addPiece("b6", Piece.createBlackPawn(new Position("b6"))); + addPiece("e6", Piece.createBlackQueen(new Position("e6"))); + addPiece("b8", Piece.createBlackKing(new Position("b8"))); + addPiece("c8", Piece.createBlackRook(new Position("c8"))); + + addPiece("f2", Piece.createWhitePawn(new Position("f2"))); + addPiece("g2", Piece.createWhitePawn(new Position("g2"))); + addPiece("e1", Piece.createWhiteRook(new Position("e1"))); + addPiece("f1", Piece.createWhiteKing(new Position("f1"))); assertThat(15.0).isEqualTo(board.caculcatePoint(Color.BLACK)); assertThat(7.0).isEqualTo(board.caculcatePoint(Color.WHITE)); From a7c2c74e53391b9235933c96398913931815603a Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 18:21:50 +0900 Subject: [PATCH 34/53] =?UTF-8?q?assertAll=EB=A1=9C=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/pieces/PieceTest.java | 31 +++++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/test/java/chess/pieces/PieceTest.java b/src/test/java/chess/pieces/PieceTest.java index a2e0637d8..e654c0722 100644 --- a/src/test/java/chess/pieces/PieceTest.java +++ b/src/test/java/chess/pieces/PieceTest.java @@ -11,26 +11,29 @@ class PieceTest { @Test @DisplayName("체스말이 정상적으로 생성되는지 확인한다.") public void createPieces() { - verifyWhitePiece(Piece.createWhitePawn(), Type.PAWN); - verifyBlackPiece(Piece.createBlackPawn(), Type.PAWN); + int testPositionIndex = 1; + Position position = new Position(testPositionIndex, testPositionIndex); + Piece blank = Piece.createBlank(position); - verifyWhitePiece(Piece.createWhiteRook(), Type.ROOK); - verifyBlackPiece(Piece.createBlackRook(), Type.ROOK); + assertAll( + () -> verifyWhitePiece(Piece.createWhitePawn(position), Type.PAWN), + () -> verifyBlackPiece(Piece.createBlackPawn(position), Type.PAWN), - verifyWhitePiece(Piece.createWhiteKnight(), Type.KNIGHT); - verifyBlackPiece(Piece.createBlackKnight(), Type.KNIGHT); + () -> verifyWhitePiece(Piece.createWhiteRook(position), Type.ROOK), + () -> verifyBlackPiece(Piece.createBlackRook(position), Type.ROOK), - verifyWhitePiece(Piece.createWhiteBishop(), Type.BISHOP); - verifyBlackPiece(Piece.createBlackBishop(), Type.BISHOP); + () -> verifyWhitePiece(Piece.createWhiteKnight(position), Type.KNIGHT), + () -> verifyBlackPiece(Piece.createBlackKnight(position), Type.KNIGHT), - verifyWhitePiece(Piece.createWhiteQueen(), Type.QUEEN); - verifyBlackPiece(Piece.createBlackQueen(), Type.QUEEN); + () -> verifyWhitePiece(Piece.createWhiteBishop(position), Type.BISHOP), + () -> verifyBlackPiece(Piece.createBlackBishop(position), Type.BISHOP), - verifyWhitePiece(Piece.createWhiteKing(), Type.KING); - verifyBlackPiece(Piece.createBlackKing(), Type.KING); + () -> verifyWhitePiece(Piece.createWhiteQueen(position), Type.QUEEN), + () -> verifyBlackPiece(Piece.createBlackQueen(position), Type.QUEEN), + + () -> verifyWhitePiece(Piece.createWhiteKing(position), Type.KING), + () -> verifyBlackPiece(Piece.createBlackKing(position), Type.KING), - Piece blank = Piece.createBlank(); - assertAll( () -> assertThat(blank.isWhite()).isEqualTo(false), () -> assertThat(blank.isBlack()).isEqualTo(false), () -> assertThat(blank.getColor()).isEqualTo(Color.NO_COLOR), From 234625c0cbf7d3c332de7520aaf03b15bdb44078 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 18:22:53 +0900 Subject: [PATCH 35/53] =?UTF-8?q?=EC=84=B8=EB=A1=9C=EC=97=B4=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=EC=A0=91=ED=95=9C=20?= =?UTF-8?q?=EC=B2=B4=EC=8A=A4=EB=A7=90=EC=9D=98=20=EC=9C=84=EC=B9=98?= =?UTF-8?q?=EB=A5=BC=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=B0=B0=EC=97=B4?= =?UTF-8?q?=EC=97=90=20=EB=8B=B4=EC=95=84=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Position.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/chess/pieces/Position.java b/src/main/java/chess/pieces/Position.java index 19a44947b..6c5d6e77e 100644 --- a/src/main/java/chess/pieces/Position.java +++ b/src/main/java/chess/pieces/Position.java @@ -1,5 +1,8 @@ package chess.pieces; +import java.util.ArrayList; +import java.util.List; + public class Position { private int rank, file; @@ -24,4 +27,13 @@ public int getFile() { return file; } + public List getFileNeighborPosition(){ + List neighborPosition = new ArrayList<>(); + + neighborPosition.add(new Position(this.rank, this.file +1)); + neighborPosition.add(new Position(this.rank, this.file -1)); + + return neighborPosition; + } + } From 9ba4457198bcf0145fb4360874eb4a79b91f5c55 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 18:23:50 +0900 Subject: [PATCH 36/53] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A0=AC?= =?UTF-8?q?=EC=9E=91=EC=97=85=20=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Position.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/chess/pieces/Position.java b/src/main/java/chess/pieces/Position.java index 6c5d6e77e..8620c0c12 100644 --- a/src/main/java/chess/pieces/Position.java +++ b/src/main/java/chess/pieces/Position.java @@ -6,17 +6,17 @@ public class Position { private int rank, file; - public Position(String position){ + public Position(String position) { char rankIndex = position.charAt(0); char fileIndex = position.charAt(1); this.rank = rankIndex - 'a'; - this.file = (Character.getNumericValue(fileIndex))-1; + this.file = (Character.getNumericValue(fileIndex)) - 1; } - public Position(int rank, int file){ - this.rank = rank-1; - this.file = file-1; + public Position(int rank, int file) { + this.rank = rank - 1; + this.file = file - 1; } public int getRank() { @@ -27,11 +27,11 @@ public int getFile() { return file; } - public List getFileNeighborPosition(){ + public List getFileNeighborPosition() { List neighborPosition = new ArrayList<>(); - neighborPosition.add(new Position(this.rank, this.file +1)); - neighborPosition.add(new Position(this.rank, this.file -1)); + neighborPosition.add(new Position(this.rank, this.file + 1)); + neighborPosition.add(new Position(this.rank, this.file - 1)); return neighborPosition; } From 4cfce5dce214bbba26b1e4d85293f8a9aab3f3de Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 18:26:09 +0900 Subject: [PATCH 37/53] =?UTF-8?q?=EC=B4=9D=20=ED=8F=AC=EC=9D=B8=ED=8A=B8?= =?UTF-8?q?=20=ED=95=A9=EA=B3=84=EB=A5=BC=20=EA=B5=AC=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/BoardTest.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/test/java/chess/BoardTest.java b/src/test/java/chess/BoardTest.java index 5b212ad1a..e715a2f8b 100644 --- a/src/test/java/chess/BoardTest.java +++ b/src/test/java/chess/BoardTest.java @@ -47,17 +47,19 @@ void printBoard() { void findPiece() { board.initialize(); - verifyPieceColorAndType(Color.BLACK, Type.ROOK, "a8"); - verifyPieceColorAndType(Color.BLACK, Type.ROOK, "h8"); - verifyPieceColorAndType(Color.WHITE, Type.ROOK, "a1"); - verifyPieceColorAndType(Color.WHITE, Type.ROOK, "h1"); + assertAll( + () -> verifyPieceColorAndType(Color.BLACK, Type.ROOK, "a8"), + () -> verifyPieceColorAndType(Color.BLACK, Type.ROOK, "h8"), + () -> verifyPieceColorAndType(Color.WHITE, Type.ROOK, "a1"), + () -> verifyPieceColorAndType(Color.WHITE, Type.ROOK, "h1") + ); } void verifyPieceColorAndType(Color color, Type type, String index) { assertAll( () -> assertThat(type).isEqualTo(board.findPiece(index).getType()), () -> assertThat(color).isEqualTo(board.findPiece(index).getColor()) - ); + ); } @Test @@ -86,8 +88,11 @@ public void caculcatePoint() { addPiece("e1", Piece.createWhiteRook(new Position("e1"))); addPiece("f1", Piece.createWhiteKing(new Position("f1"))); - assertThat(15.0).isEqualTo(board.caculcatePoint(Color.BLACK)); - assertThat(7.0).isEqualTo(board.caculcatePoint(Color.WHITE)); + assertAll( + () -> assertThat(15.0).isEqualTo(board.totalCalculatePoint(Color.BLACK)), + () -> assertThat(7.0).isEqualTo(board.totalCalculatePoint(Color.WHITE)) + ); + System.out.println(board.getChessBoard()); } From 10160278b5f4d2fe75a9fc23134a120fd2f21540 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 18:26:42 +0900 Subject: [PATCH 38/53] =?UTF-8?q?=EC=B4=9D=20=ED=8F=AC=EC=9D=B8=ED=8A=B8?= =?UTF-8?q?=20=ED=95=A9=EA=B3=84=EB=A5=BC=20=EA=B5=AC=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EC=9D=98=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index c5dd09c0b..3203fb16a 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -34,19 +34,19 @@ public int totalPiecesCount() { return count; } - public int countPieceByColorAndType(Color color, Type type){ + public int countPieceByColorAndType(Color color, Type type) { int countPiece = 0; - for(Rank rank : files) { + for (Rank rank : files) { countPiece += rank.getCountPieceByColorAndType(color, type); } return countPiece; } - public List findPiecesByColor(Color color){ + public List findPiecesByColor(Color color) { List pieces = new ArrayList<>(); - for(Rank rank : files) { + for (Rank rank : files) { pieces.addAll(rank.findPieceByColor(color)); } @@ -61,8 +61,8 @@ public Piece findPiece(String position) { private String getRank(Rank rank) { StringBuilder sb = new StringBuilder(); - for(Piece piece : rank.getPieces()){ - if(piece.isBlack()){ + for (Piece piece : rank.getPieces()) { + if (piece.isBlack()) { sb.append(piece.getType().getBlackRepresentation()).append(" "); } else { sb.append(piece.getType().getWhiteRepresentation()).append(" "); @@ -84,21 +84,21 @@ public void initialize() { } public void initializeAllEmpty() { - for(int i = 1; i <= BOARD_SIZE; i++){ + for (int i = 1; i <= BOARD_SIZE; i++) { files.add(Rank.initializeBlank(i)); } } - public void move(String position, Piece piece){ + public void move(String position, Piece piece) { Position chessBoardIndex = new Position(position); files.get(chessBoardIndex.getFile()).move(chessBoardIndex.getRank(), piece); } - public double caculcatePoint(Color color) { + public double totalCalculatePoint(Color color) { List pieces = findPiecesByColor(color); double point = 0.0; - for(Piece piece : pieces){ + for (Piece piece : pieces) { point += piece.getPoint(pieces); } @@ -110,9 +110,9 @@ public String getChessBoard() { String fileIndex = "a b c d e f g h"; - for(int i = BOARD_SIZE-1; i >= 0; i--){ + for (int i = BOARD_SIZE - 1; i >= 0; i--) { boardRank.append(getRank(files.get(i))); - boardRank.append(" ").append(i+1); + boardRank.append(" ").append(i + 1); boardRank.append(StringUtils.getNewLine()); } From 138c4f97d05d4c582d1ec542c9b4cad3cb4a511e Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 18:27:59 +0900 Subject: [PATCH 39/53] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A0=AC?= =?UTF-8?q?=EC=9E=91=EC=97=85=20=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 10 +++++----- src/main/java/chess/pieces/Piece.java | 24 ++++++++++++++++++++---- src/main/java/utils/StringUtils.java | 2 +- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index 88020d65e..cef57b14a 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -48,7 +48,7 @@ public void move(int position, Piece piece) { pieces.set(position, piece); } - private void getAddErrorMessage(){ + private void getAddErrorMessage() { System.out.println("알 수 없는 color의 piece입니다."); System.out.println("add에 실패하였습니다."); } @@ -116,8 +116,8 @@ public static Rank initializeAllBlank(int fileIndex) { public int getCountPieceByColorAndType(Color color, Type type) { int countPiece = 0; - for (Piece piece : pieces){ - if(piece.matchColorAndType(color,type)){ + for (Piece piece : pieces) { + if (piece.matchColorAndType(color, type)) { countPiece += 1; } } @@ -128,8 +128,8 @@ public int getCountPieceByColorAndType(Color color, Type type) { public List findPieceByColor(Color color) { List pieceByColor = new ArrayList<>(Board.BOARD_SIZE); - for (Piece piece : pieces){ - if(piece.matchColor(color)){ + for (Piece piece : pieces) { + if (piece.matchColor(color)) { pieceByColor.add(piece); } } diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index c2d00a193..289cab3f0 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -17,7 +17,7 @@ public Color getColor() { return this.color; } - public Type getType(){ + public Type getType() { return this.type; } @@ -29,6 +29,20 @@ public int getFilePosition() { return this.position.getFile(); } + public double getPoint(List pieces) { + if (getType() != Type.PAWN) { + return this.type.getDefaultPoint(); + } + + List positions = this.position.getFileNeighborPosition(); + for (Position position : positions) { + if (pieces.contains(new Piece(this.color, this.type, position))) { + return this.type.getDefaultPoint() - 0.5; + } + } + return this.type.getDefaultPoint(); + } + public boolean isWhite() { return getColor() == Color.WHITE; } @@ -42,11 +56,11 @@ public char getRepresentation() { } public boolean matchColorAndType(Color color, Type type) { - return getColor()==color && getType()==type; + return getColor() == color && getType() == type; } public boolean matchColor(Color color) { - return getColor()==color; + return getColor() == color; } @@ -106,5 +120,7 @@ public static Piece createBlackKing(Position position) { return createBlack(Type.KING, position); } - public static Piece createBlank(Position position) { return new Piece(Color.NO_COLOR, Type.BLANK, position); } + public static Piece createBlank(Position position) { + return new Piece(Color.NO_COLOR, Type.BLANK, position); + } } diff --git a/src/main/java/utils/StringUtils.java b/src/main/java/utils/StringUtils.java index 9b69ec31a..faf3aa9c6 100644 --- a/src/main/java/utils/StringUtils.java +++ b/src/main/java/utils/StringUtils.java @@ -11,7 +11,7 @@ public static String addNewLine(String text) { return text + NEWLINE; } - public static String getNewLine(){ + public static String getNewLine() { return NEWLINE; } } From bc50538d62963c3f659625340593939f0defea36 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 19:33:41 +0900 Subject: [PATCH 40/53] =?UTF-8?q?Position=EC=9D=98=20getter,=20setter=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Piece.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index 289cab3f0..b7a1b25b4 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -5,7 +5,7 @@ public class Piece { private final Color color; private final Type type; - private final Position position; + private Position position; private Piece(Color color, Type type, Position position) { this.color = color; @@ -21,12 +21,12 @@ public Type getType() { return this.type; } - public int getRankPosition() { - return this.position.getRank(); + public Position getPosition() { + return this.position; } - public int getFilePosition() { - return this.position.getFile(); + public void setPosition(Position position) { + this.position = position; } public double getPoint(List pieces) { @@ -34,10 +34,11 @@ public double getPoint(List pieces) { return this.type.getDefaultPoint(); } + double halfPawnPoint = 0.5; List positions = this.position.getFileNeighborPosition(); for (Position position : positions) { if (pieces.contains(new Piece(this.color, this.type, position))) { - return this.type.getDefaultPoint() - 0.5; + return this.type.getDefaultPoint() - halfPawnPoint; } } return this.type.getDefaultPoint(); From 78ef6eaada2055156096086057af07ecf56e1efd Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 19:34:29 +0900 Subject: [PATCH 41/53] =?UTF-8?q?=EC=9D=B8=EB=8D=B1=EC=8A=A4=EB=A5=BC=20?= =?UTF-8?q?=EC=83=81=EC=A7=95=ED=95=98=EB=8A=94=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EB=A5=BC=20=EC=83=9D=EC=84=B1=ED=95=98=EC=97=AC=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 3203fb16a..0bb36214e 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -73,14 +73,15 @@ private String getRank(Rank rank) { } public void initialize() { - files.add(Rank.initializeWhitePieces(8)); - files.add(Rank.initializeWhitePawns(7)); - files.add(Rank.initializeBlank(6)); - files.add(Rank.initializeBlank(5)); - files.add(Rank.initializeBlank(4)); - files.add(Rank.initializeBlank(3)); - files.add(Rank.initializeBlackPawns(2)); - files.add(Rank.initializeBlackPieces(1)); + final int FILE_INDEX = 8; + files.add(Rank.initializeWhitePieces(FILE_INDEX)); + files.add(Rank.initializeWhitePawns(FILE_INDEX - 1)); + files.add(Rank.initializeBlank(FILE_INDEX - 2)); + files.add(Rank.initializeBlank(FILE_INDEX - 3)); + files.add(Rank.initializeBlank(FILE_INDEX - 4)); + files.add(Rank.initializeBlank(FILE_INDEX - 5)); + files.add(Rank.initializeBlackPawns(FILE_INDEX - 6)); + files.add(Rank.initializeBlackPieces(FILE_INDEX - 7)); } public void initializeAllEmpty() { @@ -93,6 +94,7 @@ public void move(String position, Piece piece) { Position chessBoardIndex = new Position(position); files.get(chessBoardIndex.getFile()).move(chessBoardIndex.getRank(), piece); + piece.setPosition(chessBoardIndex); } public double totalCalculatePoint(Color color) { @@ -108,16 +110,16 @@ public double totalCalculatePoint(Color color) { public String getChessBoard() { StringBuilder boardRank = new StringBuilder(); - String fileIndex = "a b c d e f g h"; + String rankIndex = "a b c d e f g h"; - for (int i = BOARD_SIZE - 1; i >= 0; i--) { - boardRank.append(getRank(files.get(i))); - boardRank.append(" ").append(i + 1); + for (int fileIndex = BOARD_SIZE - 1; fileIndex >= 0; fileIndex--) { + boardRank.append(getRank(files.get(fileIndex))); + boardRank.append(" ").append(fileIndex + 1); boardRank.append(StringUtils.getNewLine()); } boardRank.append(StringUtils.getNewLine()); - boardRank.append(StringUtils.addNewLine(fileIndex)); + boardRank.append(StringUtils.addNewLine(rankIndex)); return boardRank.toString(); } } \ No newline at end of file From 3a2073db4a082f73e1ffd40f4b0e3efd84f871c5 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 19:34:45 +0900 Subject: [PATCH 42/53] =?UTF-8?q?=EC=9D=B8=EB=8D=B1=EC=8A=A4=EB=A5=BC=20?= =?UTF-8?q?=EC=83=81=EC=A7=95=ED=95=98=EB=8A=94=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EB=A5=BC=20=EC=83=9D=EC=84=B1=ED=95=98=EC=97=AC=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Rank.java | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index cef57b14a..83b7f1971 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -11,6 +11,7 @@ public class Rank { private List pieces = new ArrayList<>(Board.BOARD_SIZE); + private final int RANK_INDEX = 8; public List getPieces() { return pieces; @@ -55,14 +56,14 @@ private void getAddErrorMessage() { public static Rank initializeWhitePieces(int fileIndex) { Rank rank = new Rank(); - rank.addWhitePieces(Piece.createWhiteRook(new Position(8, fileIndex))); - rank.addWhitePieces(Piece.createWhiteKnight(new Position(7, fileIndex))); - rank.addWhitePieces(Piece.createWhiteBishop(new Position(6, fileIndex))); - rank.addWhitePieces(Piece.createWhiteQueen(new Position(5, fileIndex))); - rank.addWhitePieces(Piece.createWhiteKing(new Position(4, fileIndex))); - rank.addWhitePieces(Piece.createWhiteBishop(new Position(3, fileIndex))); - rank.addWhitePieces(Piece.createWhiteKnight(new Position(2, fileIndex))); - rank.addWhitePieces(Piece.createWhiteRook(new Position(1, fileIndex))); + rank.addWhitePieces(Piece.createWhiteRook(new Position(rank.RANK_INDEX, fileIndex))); + rank.addWhitePieces(Piece.createWhiteKnight(new Position(rank.RANK_INDEX - 1, fileIndex))); + rank.addWhitePieces(Piece.createWhiteBishop(new Position(rank.RANK_INDEX - 2, fileIndex))); + rank.addWhitePieces(Piece.createWhiteQueen(new Position(rank.RANK_INDEX - 3, fileIndex))); + rank.addWhitePieces(Piece.createWhiteKing(new Position(rank.RANK_INDEX - 4, fileIndex))); + rank.addWhitePieces(Piece.createWhiteBishop(new Position(rank.RANK_INDEX - 5, fileIndex))); + rank.addWhitePieces(Piece.createWhiteKnight(new Position(rank.RANK_INDEX - 6, fileIndex))); + rank.addWhitePieces(Piece.createWhiteRook(new Position(rank.RANK_INDEX - 7, fileIndex))); return rank; } @@ -77,14 +78,14 @@ public static Rank initializeWhitePawns(int fileIndex) { public static Rank initializeBlackPieces(int fileIndex) { Rank rank = new Rank(); - rank.addBlackPieces(Piece.createBlackRook(new Position(8, fileIndex))); - rank.addBlackPieces(Piece.createBlackKnight(new Position(7, fileIndex))); - rank.addBlackPieces(Piece.createBlackBishop(new Position(6, fileIndex))); - rank.addBlackPieces(Piece.createBlackQueen(new Position(5, fileIndex))); - rank.addBlackPieces(Piece.createBlackKing(new Position(4, fileIndex))); - rank.addBlackPieces(Piece.createBlackBishop(new Position(3, fileIndex))); - rank.addBlackPieces(Piece.createBlackKnight(new Position(2, fileIndex))); - rank.addBlackPieces(Piece.createBlackRook(new Position(1, fileIndex))); + rank.addBlackPieces(Piece.createBlackRook(new Position(rank.RANK_INDEX, fileIndex))); + rank.addBlackPieces(Piece.createBlackKnight(new Position(rank.RANK_INDEX - 1, fileIndex))); + rank.addBlackPieces(Piece.createBlackBishop(new Position(rank.RANK_INDEX - 2, fileIndex))); + rank.addBlackPieces(Piece.createBlackQueen(new Position(rank.RANK_INDEX - 3, fileIndex))); + rank.addBlackPieces(Piece.createBlackKing(new Position(rank.RANK_INDEX - 4, fileIndex))); + rank.addBlackPieces(Piece.createBlackBishop(new Position(rank.RANK_INDEX - 5, fileIndex))); + rank.addBlackPieces(Piece.createBlackKnight(new Position(rank.RANK_INDEX - 6, fileIndex))); + rank.addBlackPieces(Piece.createBlackRook(new Position(rank.RANK_INDEX - 7, fileIndex))); return rank; } From 032e838ee3f99e55fadbe16822b64501dcbe43ed Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 19:35:12 +0900 Subject: [PATCH 43/53] =?UTF-8?q?totalPiecesCount=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/BoardTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/chess/BoardTest.java b/src/test/java/chess/BoardTest.java index e715a2f8b..82fc3908b 100644 --- a/src/test/java/chess/BoardTest.java +++ b/src/test/java/chess/BoardTest.java @@ -25,10 +25,10 @@ void initBoard() { void printBoard() { board.initialize(); String blankRank = ". . . . . . . ."; - final int TOTAL_PIECES_COUNT = 32; + final int totalPiecesCount = 32; assertAll( - () -> assertThat(TOTAL_PIECES_COUNT).isEqualTo(board.totalPiecesCount()), + () -> assertThat(totalPiecesCount).isEqualTo(board.totalPiecesCount()), () -> assertThat(StringUtils.addNewLine("R N B Q K B N R 8") + StringUtils.addNewLine("P P P P P P P P 7") + StringUtils.addNewLine(blankRank + " 6") + From b00feabef90504bca3a95442ada27e1e3a924cd5 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 20:34:38 +0900 Subject: [PATCH 44/53] =?UTF-8?q?=EB=82=B4=EB=A6=BC=EC=B0=A8=EC=88=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC=EC=9D=84=20=EC=9C=84=ED=95=9C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/pieces/PieceTest.java | 33 +++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/test/java/chess/pieces/PieceTest.java b/src/test/java/chess/pieces/PieceTest.java index e654c0722..c3dbd39eb 100644 --- a/src/test/java/chess/pieces/PieceTest.java +++ b/src/test/java/chess/pieces/PieceTest.java @@ -1,18 +1,47 @@ package chess.pieces; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.util.*; + import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; class PieceTest { + Position position; + + @BeforeEach + void positionInit(){ + int testPositionIndex = 1; + position = new Position(testPositionIndex, testPositionIndex); + } + + @Test + void piecesPointSort() { + List pieces = new ArrayList<>(); + + addPiece(pieces); + + Collections.sort(pieces); + assertThat(pieces.toString()).isEqualTo("[Q, R, B, N, P, K]"); + + } + + void addPiece(List collection) { + collection.add(Piece.createBlackPawn(position)); + collection.add(Piece.createBlackRook(position)); + collection.add(Piece.createBlackKnight(position)); + collection.add(Piece.createBlackBishop(position)); + collection.add(Piece.createBlackQueen(position)); + collection.add(Piece.createBlackKing(position)); + } + @Test @DisplayName("체스말이 정상적으로 생성되는지 확인한다.") public void createPieces() { - int testPositionIndex = 1; - Position position = new Position(testPositionIndex, testPositionIndex); Piece blank = Piece.createBlank(position); assertAll( From 7157419451cbc7a7351783a791b7193f18e2635c Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 20:34:55 +0900 Subject: [PATCH 45/53] =?UTF-8?q?=EB=82=B4=EB=A6=BC=EC=B0=A8=EC=88=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC=EC=9D=84=20=EC=9C=84=ED=95=9C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/chess/pieces/PieceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/chess/pieces/PieceTest.java b/src/test/java/chess/pieces/PieceTest.java index c3dbd39eb..c7ad93087 100644 --- a/src/test/java/chess/pieces/PieceTest.java +++ b/src/test/java/chess/pieces/PieceTest.java @@ -14,7 +14,7 @@ class PieceTest { Position position; @BeforeEach - void positionInit(){ + void positionInit() { int testPositionIndex = 1; position = new Position(testPositionIndex, testPositionIndex); } From 34c168626b28355901187f127f7f03f6303997d1 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Tue, 23 Feb 2021 20:36:53 +0900 Subject: [PATCH 46/53] =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=20=EC=A0=95=EB=A0=AC=EC=9D=84=20=EC=9C=84=ED=95=98?= =?UTF-8?q?=EC=97=AC=20Comparable=EC=9D=84=20implements=EB=B0=9B=EC=95=84?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=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/chess/pieces/Piece.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index b7a1b25b4..2f2a1a09a 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -2,7 +2,7 @@ import java.util.List; -public class Piece { +public class Piece implements Comparable { private final Color color; private final Type type; private Position position; @@ -29,6 +29,10 @@ public void setPosition(Position position) { this.position = position; } + public double getPoint() { + return this.getType().getDefaultPoint(); + } + public double getPoint(List pieces) { if (getType() != Type.PAWN) { return this.type.getDefaultPoint(); @@ -44,6 +48,16 @@ public double getPoint(List pieces) { return this.type.getDefaultPoint(); } + @Override + public String toString() { + return String.valueOf(getRepresentation()); + } + + @Override + public int compareTo(Piece o) { + return Double.compare(getPoint(), o.getPoint()) * -1; + } + public boolean isWhite() { return getColor() == Color.WHITE; } From 880b3411609d45fb43f729906bc20e465f759344 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Wed, 24 Feb 2021 14:54:22 +0900 Subject: [PATCH 47/53] =?UTF-8?q?=EC=A4=91=EB=B3=B5=EC=9D=84=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=98=EC=97=AC=20cou?= =?UTF-8?q?ntAllPiecesByColor=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 0bb36214e..0b5a4017e 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -15,22 +15,17 @@ public class Board { private final List files = new ArrayList<>(BOARD_SIZE); public int totalPiecesCount() { - int count = 0; - - count += countPieceByColorAndType(Color.WHITE, Type.PAWN); - count += countPieceByColorAndType(Color.WHITE, Type.ROOK); - count += countPieceByColorAndType(Color.WHITE, Type.KNIGHT); - count += countPieceByColorAndType(Color.WHITE, Type.BISHOP); - count += countPieceByColorAndType(Color.WHITE, Type.QUEEN); - count += countPieceByColorAndType(Color.WHITE, Type.KING); - - count += countPieceByColorAndType(Color.BLACK, Type.PAWN); - count += countPieceByColorAndType(Color.BLACK, Type.ROOK); - count += countPieceByColorAndType(Color.BLACK, Type.KNIGHT); - count += countPieceByColorAndType(Color.BLACK, Type.BISHOP); - count += countPieceByColorAndType(Color.BLACK, Type.QUEEN); - count += countPieceByColorAndType(Color.BLACK, Type.KING); + return countAllPiecesByColor(Color.WHITE) + countAllPiecesByColor(Color.BLACK); + } + public int countAllPiecesByColor(Color color){ + int count = 0; + count += countPieceByColorAndType(color, Type.PAWN); + count += countPieceByColorAndType(color, Type.ROOK); + count += countPieceByColorAndType(color, Type.KNIGHT); + count += countPieceByColorAndType(color, Type.BISHOP); + count += countPieceByColorAndType(color, Type.QUEEN); + count += countPieceByColorAndType(color, Type.KING); return count; } From d435cb2cf9a0a9f01a7d753b0dc199dec9b0aa33 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Wed, 24 Feb 2021 14:55:34 +0900 Subject: [PATCH 48/53] =?UTF-8?q?Rank=EB=A5=BC=20=EB=8B=B4=EC=95=84?= =?UTF-8?q?=EB=91=90=EB=8A=94=20List=EC=9D=98=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 0b5a4017e..c2aec9309 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -12,7 +12,7 @@ public class Board { public static final int BOARD_SIZE = 8; - private final List files = new ArrayList<>(BOARD_SIZE); + private final List ranks = new ArrayList<>(BOARD_SIZE); public int totalPiecesCount() { return countAllPiecesByColor(Color.WHITE) + countAllPiecesByColor(Color.BLACK); @@ -31,7 +31,7 @@ public int countAllPiecesByColor(Color color){ public int countPieceByColorAndType(Color color, Type type) { int countPiece = 0; - for (Rank rank : files) { + for (Rank rank : ranks) { countPiece += rank.getCountPieceByColorAndType(color, type); } @@ -41,7 +41,7 @@ public int countPieceByColorAndType(Color color, Type type) { public List findPiecesByColor(Color color) { List pieces = new ArrayList<>(); - for (Rank rank : files) { + for (Rank rank : ranks) { pieces.addAll(rank.findPieceByColor(color)); } @@ -51,7 +51,7 @@ public List findPiecesByColor(Color color) { public Piece findPiece(String position) { Position chessBoardIndex = new Position(position); - return files.get((chessBoardIndex.getFile())).getPiece(chessBoardIndex.getRank()); + return ranks.get((chessBoardIndex.getFile())).getPiece(chessBoardIndex.getRank()); } private String getRank(Rank rank) { @@ -69,26 +69,26 @@ private String getRank(Rank rank) { public void initialize() { final int FILE_INDEX = 8; - files.add(Rank.initializeWhitePieces(FILE_INDEX)); - files.add(Rank.initializeWhitePawns(FILE_INDEX - 1)); - files.add(Rank.initializeBlank(FILE_INDEX - 2)); - files.add(Rank.initializeBlank(FILE_INDEX - 3)); - files.add(Rank.initializeBlank(FILE_INDEX - 4)); - files.add(Rank.initializeBlank(FILE_INDEX - 5)); - files.add(Rank.initializeBlackPawns(FILE_INDEX - 6)); - files.add(Rank.initializeBlackPieces(FILE_INDEX - 7)); + ranks.add(Rank.initializeWhitePieces(FILE_INDEX)); + ranks.add(Rank.initializeWhitePawns(FILE_INDEX - 1)); + ranks.add(Rank.initializeBlank(FILE_INDEX - 2)); + ranks.add(Rank.initializeBlank(FILE_INDEX - 3)); + ranks.add(Rank.initializeBlank(FILE_INDEX - 4)); + ranks.add(Rank.initializeBlank(FILE_INDEX - 5)); + ranks.add(Rank.initializeBlackPawns(FILE_INDEX - 6)); + ranks.add(Rank.initializeBlackPieces(FILE_INDEX - 7)); } public void initializeAllEmpty() { for (int i = 1; i <= BOARD_SIZE; i++) { - files.add(Rank.initializeBlank(i)); + ranks.add(Rank.initializeBlank(i)); } } public void move(String position, Piece piece) { Position chessBoardIndex = new Position(position); - files.get(chessBoardIndex.getFile()).move(chessBoardIndex.getRank(), piece); + ranks.get(chessBoardIndex.getFile()).move(chessBoardIndex.getRank(), piece); piece.setPosition(chessBoardIndex); } @@ -108,7 +108,7 @@ public String getChessBoard() { String rankIndex = "a b c d e f g h"; for (int fileIndex = BOARD_SIZE - 1; fileIndex >= 0; fileIndex--) { - boardRank.append(getRank(files.get(fileIndex))); + boardRank.append(getRank(ranks.get(fileIndex))); boardRank.append(" ").append(fileIndex + 1); boardRank.append(StringUtils.getNewLine()); } From 0f641f96b46f65b5ce72358c702300f15d8ae954 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Wed, 24 Feb 2021 18:48:46 +0900 Subject: [PATCH 49/53] =?UTF-8?q?=EC=A0=84=EC=B2=B4=EC=A0=81=EC=9D=B8=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=EB=B0=8F=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 26 ++++++------ src/main/java/chess/Rank.java | 52 ++++++++++------------- src/main/java/chess/pieces/Piece.java | 4 +- src/test/java/chess/BoardTest.java | 10 ++--- src/test/java/chess/pieces/PieceTest.java | 2 +- 5 files changed, 44 insertions(+), 50 deletions(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index c2aec9309..54bee5510 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -15,24 +15,24 @@ public class Board { private final List ranks = new ArrayList<>(BOARD_SIZE); public int totalPiecesCount() { - return countAllPiecesByColor(Color.WHITE) + countAllPiecesByColor(Color.BLACK); + return countingAllPiecesByColor(Color.WHITE) + countingAllPiecesByColor(Color.BLACK); } - public int countAllPiecesByColor(Color color){ + public int countingAllPiecesByColor(Color color){ int count = 0; - count += countPieceByColorAndType(color, Type.PAWN); - count += countPieceByColorAndType(color, Type.ROOK); - count += countPieceByColorAndType(color, Type.KNIGHT); - count += countPieceByColorAndType(color, Type.BISHOP); - count += countPieceByColorAndType(color, Type.QUEEN); - count += countPieceByColorAndType(color, Type.KING); + count += countPiecesByColorAndType(color, Type.PAWN); + count += countPiecesByColorAndType(color, Type.ROOK); + count += countPiecesByColorAndType(color, Type.KNIGHT); + count += countPiecesByColorAndType(color, Type.BISHOP); + count += countPiecesByColorAndType(color, Type.QUEEN); + count += countPiecesByColorAndType(color, Type.KING); return count; } - public int countPieceByColorAndType(Color color, Type type) { + public int countPiecesByColorAndType(Color color, Type type) { int countPiece = 0; for (Rank rank : ranks) { - countPiece += rank.getCountPieceByColorAndType(color, type); + countPiece += rank.getCountPiecesByColorAndType(color, type); } return countPiece; @@ -56,7 +56,7 @@ public Piece findPiece(String position) { private String getRank(Rank rank) { StringBuilder sb = new StringBuilder(); - for (Piece piece : rank.getPieces()) { + for (Piece piece : rank.getRank()) { if (piece.isBlack()) { sb.append(piece.getType().getBlackRepresentation()).append(" "); } else { @@ -79,7 +79,7 @@ public void initialize() { ranks.add(Rank.initializeBlackPieces(FILE_INDEX - 7)); } - public void initializeAllEmpty() { + public void initializeEmpty() { for (int i = 1; i <= BOARD_SIZE; i++) { ranks.add(Rank.initializeBlank(i)); } @@ -92,7 +92,7 @@ public void move(String position, Piece piece) { piece.setPosition(chessBoardIndex); } - public double totalCalculatePoint(Color color) { + public double calculatePointByColor(Color color) { List pieces = findPiecesByColor(color); double point = 0.0; for (Piece piece : pieces) { diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index 83b7f1971..bb1110799 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -8,12 +8,14 @@ import java.util.ArrayList; import java.util.List; +import static chess.pieces.Piece.*; + public class Rank { private List pieces = new ArrayList<>(Board.BOARD_SIZE); private final int RANK_INDEX = 8; - public List getPieces() { + public List getRank() { return pieces; } @@ -56,14 +58,14 @@ private void getAddErrorMessage() { public static Rank initializeWhitePieces(int fileIndex) { Rank rank = new Rank(); - rank.addWhitePieces(Piece.createWhiteRook(new Position(rank.RANK_INDEX, fileIndex))); - rank.addWhitePieces(Piece.createWhiteKnight(new Position(rank.RANK_INDEX - 1, fileIndex))); - rank.addWhitePieces(Piece.createWhiteBishop(new Position(rank.RANK_INDEX - 2, fileIndex))); - rank.addWhitePieces(Piece.createWhiteQueen(new Position(rank.RANK_INDEX - 3, fileIndex))); - rank.addWhitePieces(Piece.createWhiteKing(new Position(rank.RANK_INDEX - 4, fileIndex))); - rank.addWhitePieces(Piece.createWhiteBishop(new Position(rank.RANK_INDEX - 5, fileIndex))); - rank.addWhitePieces(Piece.createWhiteKnight(new Position(rank.RANK_INDEX - 6, fileIndex))); - rank.addWhitePieces(Piece.createWhiteRook(new Position(rank.RANK_INDEX - 7, fileIndex))); + rank.addWhitePieces(createWhiteRook(new Position(rank.RANK_INDEX, fileIndex))); + rank.addWhitePieces(createWhiteKnight(new Position(rank.RANK_INDEX - 1, fileIndex))); + rank.addWhitePieces(createWhiteBishop(new Position(rank.RANK_INDEX - 2, fileIndex))); + rank.addWhitePieces(createWhiteQueen(new Position(rank.RANK_INDEX - 3, fileIndex))); + rank.addWhitePieces(createWhiteKing(new Position(rank.RANK_INDEX - 4, fileIndex))); + rank.addWhitePieces(createWhiteBishop(new Position(rank.RANK_INDEX - 5, fileIndex))); + rank.addWhitePieces(createWhiteKnight(new Position(rank.RANK_INDEX - 6, fileIndex))); + rank.addWhitePieces(createWhiteRook(new Position(rank.RANK_INDEX - 7, fileIndex))); return rank; } @@ -71,21 +73,21 @@ public static Rank initializeWhitePieces(int fileIndex) { public static Rank initializeWhitePawns(int fileIndex) { Rank rank = new Rank(); for (int rankIndex = 0; rankIndex < Board.BOARD_SIZE; rankIndex++) { - rank.addWhitePieces(Piece.createWhitePawn(new Position(rankIndex, fileIndex))); + rank.addWhitePieces(createWhitePawn(new Position(rankIndex, fileIndex))); } return rank; } public static Rank initializeBlackPieces(int fileIndex) { Rank rank = new Rank(); - rank.addBlackPieces(Piece.createBlackRook(new Position(rank.RANK_INDEX, fileIndex))); - rank.addBlackPieces(Piece.createBlackKnight(new Position(rank.RANK_INDEX - 1, fileIndex))); - rank.addBlackPieces(Piece.createBlackBishop(new Position(rank.RANK_INDEX - 2, fileIndex))); - rank.addBlackPieces(Piece.createBlackQueen(new Position(rank.RANK_INDEX - 3, fileIndex))); - rank.addBlackPieces(Piece.createBlackKing(new Position(rank.RANK_INDEX - 4, fileIndex))); - rank.addBlackPieces(Piece.createBlackBishop(new Position(rank.RANK_INDEX - 5, fileIndex))); - rank.addBlackPieces(Piece.createBlackKnight(new Position(rank.RANK_INDEX - 6, fileIndex))); - rank.addBlackPieces(Piece.createBlackRook(new Position(rank.RANK_INDEX - 7, fileIndex))); + rank.addBlackPieces(createBlackRook(new Position(rank.RANK_INDEX, fileIndex))); + rank.addBlackPieces(createBlackKnight(new Position(rank.RANK_INDEX - 1, fileIndex))); + rank.addBlackPieces(createBlackBishop(new Position(rank.RANK_INDEX - 2, fileIndex))); + rank.addBlackPieces(createBlackQueen(new Position(rank.RANK_INDEX - 3, fileIndex))); + rank.addBlackPieces(createBlackKing(new Position(rank.RANK_INDEX - 4, fileIndex))); + rank.addBlackPieces(createBlackBishop(new Position(rank.RANK_INDEX - 5, fileIndex))); + rank.addBlackPieces(createBlackKnight(new Position(rank.RANK_INDEX - 6, fileIndex))); + rank.addBlackPieces(createBlackRook(new Position(rank.RANK_INDEX - 7, fileIndex))); return rank; } @@ -93,7 +95,7 @@ public static Rank initializeBlackPieces(int fileIndex) { public static Rank initializeBlackPawns(int fileIndex) { Rank rank = new Rank(); for (int rankIndex = 0; rankIndex < Board.BOARD_SIZE; rankIndex++) { - rank.addBlackPieces(Piece.createBlackPawn(new Position(rankIndex, fileIndex))); + rank.addBlackPieces(createBlackPawn(new Position(rankIndex, fileIndex))); } return rank; } @@ -101,20 +103,12 @@ public static Rank initializeBlackPawns(int fileIndex) { public static Rank initializeBlank(int fileIndex) { Rank rank = new Rank(); for (int rankIndex = 0; rankIndex < Board.BOARD_SIZE; rankIndex++) { - rank.addBlank(Piece.createBlank(new Position(rankIndex, fileIndex))); - } - return rank; - } - - public static Rank initializeAllBlank(int fileIndex) { - Rank rank = new Rank(); - for (int rankIndex = 0; rankIndex < Board.BOARD_SIZE; rankIndex++) { - rank.addBlank(Piece.createBlank(new Position(rankIndex, fileIndex))); + rank.addBlank(createBlank(new Position(rankIndex, fileIndex))); } return rank; } - public int getCountPieceByColorAndType(Color color, Type type) { + public int getCountPiecesByColorAndType(Color color, Type type) { int countPiece = 0; for (Piece piece : pieces) { diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index 2f2a1a09a..acc32134f 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -29,7 +29,7 @@ public void setPosition(Position position) { this.position = position; } - public double getPoint() { + public double getDefaultPoint() { return this.getType().getDefaultPoint(); } @@ -55,7 +55,7 @@ public String toString() { @Override public int compareTo(Piece o) { - return Double.compare(getPoint(), o.getPoint()) * -1; + return Double.compare(getDefaultPoint(), o.getDefaultPoint()) * -1; } public boolean isWhite() { diff --git a/src/test/java/chess/BoardTest.java b/src/test/java/chess/BoardTest.java index 82fc3908b..eeac03395 100644 --- a/src/test/java/chess/BoardTest.java +++ b/src/test/java/chess/BoardTest.java @@ -64,7 +64,7 @@ void verifyPieceColorAndType(Color color, Type type, String index) { @Test public void move() { - board.initializeAllEmpty(); + board.initializeEmpty(); String position = "b5"; Piece piece = Piece.createBlackRook(new Position(position)); @@ -75,8 +75,8 @@ public void move() { } @Test - public void caculcatePoint() { - board.initializeAllEmpty(); + public void calculatePoint() { + board.initializeEmpty(); addPiece("b6", Piece.createBlackPawn(new Position("b6"))); addPiece("e6", Piece.createBlackQueen(new Position("e6"))); @@ -89,8 +89,8 @@ public void caculcatePoint() { addPiece("f1", Piece.createWhiteKing(new Position("f1"))); assertAll( - () -> assertThat(15.0).isEqualTo(board.totalCalculatePoint(Color.BLACK)), - () -> assertThat(7.0).isEqualTo(board.totalCalculatePoint(Color.WHITE)) + () -> assertThat(15.0).isEqualTo(board.calculatePointByColor(Color.BLACK)), + () -> assertThat(7.0).isEqualTo(board.calculatePointByColor(Color.WHITE)) ); diff --git a/src/test/java/chess/pieces/PieceTest.java b/src/test/java/chess/pieces/PieceTest.java index c7ad93087..49cb6fff0 100644 --- a/src/test/java/chess/pieces/PieceTest.java +++ b/src/test/java/chess/pieces/PieceTest.java @@ -20,7 +20,7 @@ void positionInit() { } @Test - void piecesPointSort() { + void piecesSortByPoint() { List pieces = new ArrayList<>(); addPiece(pieces); From 8a07ec962b4b3df23669a90cd72bf1040c32a43e Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:24:26 +0900 Subject: [PATCH 50/53] =?UTF-8?q?countingAllPiecesByColor=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 54bee5510..17bea1de0 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -18,14 +18,13 @@ public int totalPiecesCount() { return countingAllPiecesByColor(Color.WHITE) + countingAllPiecesByColor(Color.BLACK); } - public int countingAllPiecesByColor(Color color){ + public int countingAllPiecesByColor(Color color) { int count = 0; - count += countPiecesByColorAndType(color, Type.PAWN); - count += countPiecesByColorAndType(color, Type.ROOK); - count += countPiecesByColorAndType(color, Type.KNIGHT); - count += countPiecesByColorAndType(color, Type.BISHOP); - count += countPiecesByColorAndType(color, Type.QUEEN); - count += countPiecesByColorAndType(color, Type.KING); + + for (Type type : Type.values()) { + count += countPiecesByColorAndType(color, type); + } + return count; } @@ -49,9 +48,9 @@ public List findPiecesByColor(Color color) { } public Piece findPiece(String position) { - Position chessBoardIndex = new Position(position); + Position positionNumber = new Position(position); - return ranks.get((chessBoardIndex.getFile())).getPiece(chessBoardIndex.getRank()); + return ranks.get(positionNumber.getFile()).getPiece(positionNumber.getRank()); } private String getRank(Rank rank) { From de423b7e66fbb90c43453c24f494578891c14424 Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:24:59 +0900 Subject: [PATCH 51/53] =?UTF-8?q?toString=EA=B3=BC=20compareTo=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B0=91=EC=9C=BC=EB=A1=9C=20=EC=9E=90?= =?UTF-8?q?=EB=A6=AC=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/pieces/Piece.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/chess/pieces/Piece.java b/src/main/java/chess/pieces/Piece.java index acc32134f..43e6d6ed7 100644 --- a/src/main/java/chess/pieces/Piece.java +++ b/src/main/java/chess/pieces/Piece.java @@ -48,16 +48,6 @@ public double getPoint(List pieces) { return this.type.getDefaultPoint(); } - @Override - public String toString() { - return String.valueOf(getRepresentation()); - } - - @Override - public int compareTo(Piece o) { - return Double.compare(getDefaultPoint(), o.getDefaultPoint()) * -1; - } - public boolean isWhite() { return getColor() == Color.WHITE; } @@ -138,4 +128,15 @@ public static Piece createBlackKing(Position position) { public static Piece createBlank(Position position) { return new Piece(Color.NO_COLOR, Type.BLANK, position); } + + @Override + public String toString() { + return String.valueOf(getRepresentation()); + } + + @Override + public int compareTo(Piece o) { + return Double.compare(getDefaultPoint(), o.getDefaultPoint()) * -1; + } + } From a0cb9805f55bf2af39909341693be6e89e3b045b Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:29:15 +0900 Subject: [PATCH 52/53] =?UTF-8?q?=EB=9E=AD=ED=81=AC=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20piece.setPosition(chessBoardIndex)=20?= =?UTF-8?q?=EB=AA=85=EB=A0=B9=EC=96=B4=20=EC=9D=B4=EB=8F=99=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 5 ++--- src/main/java/chess/Rank.java | 5 +++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index 17bea1de0..b11c9fa40 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -85,10 +85,9 @@ public void initializeEmpty() { } public void move(String position, Piece piece) { - Position chessBoardIndex = new Position(position); + Position positionNumber = new Position(position); - ranks.get(chessBoardIndex.getFile()).move(chessBoardIndex.getRank(), piece); - piece.setPosition(chessBoardIndex); + ranks.get(positionNumber.getFile()).move(positionNumber.getRank(), piece, positionNumber); } public double calculatePointByColor(Color color) { diff --git a/src/main/java/chess/Rank.java b/src/main/java/chess/Rank.java index bb1110799..0433e2724 100644 --- a/src/main/java/chess/Rank.java +++ b/src/main/java/chess/Rank.java @@ -47,8 +47,9 @@ public void addBlank(Piece piece) { getAddErrorMessage(); } - public void move(int position, Piece piece) { - pieces.set(position, piece); + public void move(int rankIndex, Piece piece, Position position) { + pieces.set(rankIndex, piece); + piece.setPosition(position); } private void getAddErrorMessage() { From 59e7cf49af3e7eb3522eaa7bd0a1f9d9bac8b90d Mon Sep 17 00:00:00 2001 From: Jiwon-JJW <69128652+Jiwon-JJW@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:30:02 +0900 Subject: [PATCH 53/53] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chess/Board.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/chess/Board.java b/src/main/java/chess/Board.java index b11c9fa40..5566d9922 100644 --- a/src/main/java/chess/Board.java +++ b/src/main/java/chess/Board.java @@ -115,4 +115,4 @@ public String getChessBoard() { boardRank.append(StringUtils.addNewLine(rankIndex)); return boardRank.toString(); } -} \ No newline at end of file +}