From 4b9c119d5791f8d6e80a34f309ee98542f48f55c Mon Sep 17 00:00:00 2001 From: Ryumina-edu Date: Thu, 12 Dec 2024 10:29:20 +0900 Subject: [PATCH 1/9] =?UTF-8?q?refactor:=20=EC=8B=9C=EC=9E=91,=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=EC=9C=84=EC=B9=98=20=EA=B4=80=EB=A6=AC=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20ResultPosition=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../laddergame/position/ResultPosition.java | 25 ++++++++++++++++ .../position/ResultPositionTest.java | 30 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java create mode 100644 src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java diff --git a/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java b/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java new file mode 100644 index 0000000000..dfb9903b47 --- /dev/null +++ b/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java @@ -0,0 +1,25 @@ +package nextstep.ladder.domain.laddergame.position; + +import java.util.HashMap; +import java.util.Map; + +public class ResultPosition { + private final Map positionMap; + + public ResultPosition() { + this(new HashMap<>()); + } + + public ResultPosition(Map positionMap) { + this.positionMap = positionMap; + } + + public void add(int start, int finish) { + positionMap.put(start, finish); + } + + public int getFinishPosition(int startPosition) { + return positionMap.get(startPosition); + } + +} diff --git a/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java b/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java new file mode 100644 index 0000000000..edf5b9cbd4 --- /dev/null +++ b/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java @@ -0,0 +1,30 @@ +package nextstep.ladder.domain.laddergame.position; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +class ResultPositionTest { + + @Test + void create() { + ResultPosition resultPosition = new ResultPosition(); + + Assertions.assertThat(resultPosition).isNotNull(); + } + + @Test + void create_map() { + ResultPosition resultPosition = new ResultPosition(Map.of(0, 3)); + + Assertions.assertThat(resultPosition).isNotNull(); + } + + @Test + void getFinishPosition() { + ResultPosition resultPosition = new ResultPosition(Map.of(0, 3)); + + Assertions.assertThat(resultPosition.getFinishPosition(0)).isEqualTo(3); + } +} \ No newline at end of file From 81df4db993a7f1aff4994a85ddb552d099813e73 Mon Sep 17 00:00:00 2001 From: Ryumina-edu Date: Thu, 12 Dec 2024 15:50:58 +0900 Subject: [PATCH 2/9] =?UTF-8?q?refactor:=20ResultPosition=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20Lad?= =?UTF-8?q?derGame2=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ladder/domain/laddergame/LadderGame2.java | 27 +++++++++++++++++++ .../domain/laddergame/LadderGame2Test.java | 19 +++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/main/java/nextstep/ladder/domain/laddergame/LadderGame2.java create mode 100644 src/test/java/nextstep/ladder/domain/laddergame/LadderGame2Test.java diff --git a/src/main/java/nextstep/ladder/domain/laddergame/LadderGame2.java b/src/main/java/nextstep/ladder/domain/laddergame/LadderGame2.java new file mode 100644 index 0000000000..0ce440bfbb --- /dev/null +++ b/src/main/java/nextstep/ladder/domain/laddergame/LadderGame2.java @@ -0,0 +1,27 @@ +package nextstep.ladder.domain.laddergame; + +import nextstep.ladder.domain.ladder.Ladder; +import nextstep.ladder.domain.laddergame.position.Positions; +import nextstep.ladder.domain.laddergame.position.ResultPosition; +import nextstep.ladder.domain.line.Line; + +import java.util.List; +import java.util.stream.IntStream; + +public class LadderGame2 { + + public ResultPosition play(Ladder ladder) { + ResultPosition resultPosition = new ResultPosition(); + + IntStream.range(0, ladder.getPlayers().size()) + .forEach(i -> { + resultPosition.add(i, getLastPosition(ladder.getLines(), i)); + }); + + return resultPosition; + } + + private int getLastPosition(List lines, int playerPosition) { + return new Positions().add(lines, playerPosition).getLastPosition(); + } +} diff --git a/src/test/java/nextstep/ladder/domain/laddergame/LadderGame2Test.java b/src/test/java/nextstep/ladder/domain/laddergame/LadderGame2Test.java new file mode 100644 index 0000000000..5b5373f035 --- /dev/null +++ b/src/test/java/nextstep/ladder/domain/laddergame/LadderGame2Test.java @@ -0,0 +1,19 @@ +package nextstep.ladder.domain.laddergame; + +import nextstep.ladder.domain.ladder.LadderTest; +import nextstep.ladder.domain.laddergame.position.ResultPosition; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class LadderGame2Test { + + @Test + void play() { + ResultPosition resultPosition = new LadderGame2().play(LadderTest.getLadder()); + + Assertions.assertThat(resultPosition.getFinishPosition(0)).isEqualTo(2); + Assertions.assertThat(resultPosition.getFinishPosition(1)).isEqualTo(1); + Assertions.assertThat(resultPosition.getFinishPosition(2)).isEqualTo(3); + Assertions.assertThat(resultPosition.getFinishPosition(3)).isEqualTo(0); + } +} \ No newline at end of file From 6d03212b15440d6e78748712c489e6df5636f7d2 Mon Sep 17 00:00:00 2001 From: Ryumina-edu Date: Thu, 12 Dec 2024 16:18:14 +0900 Subject: [PATCH 3/9] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=EB=A5=BC=20=EB=A7=A4=EC=B9=AD=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20match=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../laddergame/position/ResultPosition.java | 18 +++++++++++++ .../position/ResultPositionTest.java | 27 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java b/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java index dfb9903b47..71891f2bb6 100644 --- a/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java +++ b/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java @@ -1,7 +1,12 @@ package nextstep.ladder.domain.laddergame.position; +import nextstep.ladder.domain.ladder.LadderResult; +import nextstep.ladder.domain.laddergame.LadderGameResult2; +import nextstep.ladder.domain.player.Players; + import java.util.HashMap; import java.util.Map; +import java.util.stream.IntStream; public class ResultPosition { private final Map positionMap; @@ -22,4 +27,17 @@ public int getFinishPosition(int startPosition) { return positionMap.get(startPosition); } + public LadderGameResult2 match(Players players, LadderResult ladderResult) { + LadderGameResult2 ladderGameResult2 = new LadderGameResult2(); + + IntStream.range(0, players.getPlayers().size()) + .forEach(i -> { + String name = players.getPlayers().get(i).getName(); + String result = ladderResult.getResultByIndex(getFinishPosition(i)); + ladderGameResult2.add(name, result); + }); + + return ladderGameResult2; + } + } diff --git a/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java b/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java index edf5b9cbd4..4b5577a370 100644 --- a/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java +++ b/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java @@ -1,8 +1,14 @@ package nextstep.ladder.domain.laddergame.position; +import nextstep.ladder.domain.ladder.LadderResult; +import nextstep.ladder.domain.laddergame.LadderGameResult2; +import nextstep.ladder.domain.player.Player; +import nextstep.ladder.domain.player.Players; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.HashMap; +import java.util.List; import java.util.Map; class ResultPositionTest { @@ -27,4 +33,25 @@ void getFinishPosition() { Assertions.assertThat(resultPosition.getFinishPosition(0)).isEqualTo(3); } + + @Test + void match() { + Map positionMap = new HashMap<>(); + positionMap.put(0, 1); + positionMap.put(1, 0); + + ResultPosition resultPosition = new ResultPosition(positionMap); + + Player player1 = new Player("test1"); + Player player2 = new Player("test2"); + Players players = new Players(List.of(player1, player2)); + + LadderResult ladderResult = new LadderResult(List.of("꽝", "5000")); + + LadderGameResult2 gameResult = resultPosition.match(players, ladderResult); + + Assertions.assertThat(gameResult.getResult("test1")).isEqualTo("5000"); + Assertions.assertThat(gameResult.getResult("test2")).isEqualTo("꽝"); + } + } \ No newline at end of file From 973465cadd8d82ea17d40bd5e3ca93ccef2b47ff Mon Sep 17 00:00:00 2001 From: Ryumina-edu Date: Thu, 12 Dec 2024 16:27:26 +0900 Subject: [PATCH 4/9] =?UTF-8?q?refactor:=20=EB=A7=A4=EC=B9=AD=EB=90=9C=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EA=B2=B0=EA=B3=BC=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=9C=20LadderGameResult2=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/laddergame/LadderGameResult2.java | 38 +++++++++++++++++ .../laddergame/LadderGameResult2Test.java | 41 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult2.java create mode 100644 src/test/java/nextstep/ladder/domain/laddergame/LadderGameResult2Test.java diff --git a/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult2.java b/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult2.java new file mode 100644 index 0000000000..15c02b5c61 --- /dev/null +++ b/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult2.java @@ -0,0 +1,38 @@ +package nextstep.ladder.domain.laddergame; + +import java.util.HashMap; +import java.util.Map; + +public class LadderGameResult2 { + private final Map ladderGameResult; + + public LadderGameResult2() { + this(new HashMap<>()); + } + + public LadderGameResult2(Map ladderGameResult) { + this.ladderGameResult = ladderGameResult; + } + + public void add(String name, String result) { + ladderGameResult.put(name, result); + } + + public String getResult(String name) { + return ladderGameResult.get(name); + } + + public StringBuilder getResultAll() { + StringBuilder result = new StringBuilder(); + + ladderGameResult.forEach((key, value) -> { + result.append(key) + .append(" : ") + .append(value) + .append("\n"); + }); + + return result; + } + +} diff --git a/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResult2Test.java b/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResult2Test.java new file mode 100644 index 0000000000..40bf9e22cb --- /dev/null +++ b/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResult2Test.java @@ -0,0 +1,41 @@ +package nextstep.ladder.domain.laddergame; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +class LadderGameResult2Test { + + @Test + void create() { + LadderGameResult2 ladderGameResult2 = new LadderGameResult2(); + + Assertions.assertThat(ladderGameResult2).isNotNull(); + } + + @Test + void create_map() { + LadderGameResult2 ladderGameResult2 = new LadderGameResult2(Map.of("test1", "5000")); + + Assertions.assertThat(ladderGameResult2).isNotNull(); + } + + @Test + void add_and_getResult() { + LadderGameResult2 ladderGameResult2 = new LadderGameResult2(); + + ladderGameResult2.add("test1", "5000"); + + Assertions.assertThat(ladderGameResult2.getResult("test1")).isEqualTo("5000"); + } + + @Test + void getResultAll() { + LadderGameResult2 ladderGameResult2 = new LadderGameResult2(Map.of("test1", "5000")); + + Assertions.assertThat(ladderGameResult2.getResultAll()).contains("test1"); + Assertions.assertThat(ladderGameResult2.getResultAll()).contains(":"); + Assertions.assertThat(ladderGameResult2.getResultAll()).contains("5000"); + } +} \ No newline at end of file From eea63607e24b71d57f39a265658acffad334277f Mon Sep 17 00:00:00 2001 From: Ryumina-edu Date: Thu, 12 Dec 2024 16:29:06 +0900 Subject: [PATCH 5/9] =?UTF-8?q?refactor:=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=EC=9D=84=20=EC=9C=84=ED=95=9C=20ResultView=20printGam?= =?UTF-8?q?eResult2=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/nextstep/ladder/ui/ResultView.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/nextstep/ladder/ui/ResultView.java b/src/main/java/nextstep/ladder/ui/ResultView.java index c2da0ba967..aa7fc6ebb7 100644 --- a/src/main/java/nextstep/ladder/ui/ResultView.java +++ b/src/main/java/nextstep/ladder/ui/ResultView.java @@ -3,6 +3,7 @@ import nextstep.ladder.domain.ladder.Ladder; import nextstep.ladder.domain.ladder.LadderResult; import nextstep.ladder.domain.laddergame.LadderGameResult; +import nextstep.ladder.domain.laddergame.LadderGameResult2; import nextstep.ladder.domain.line.Line; import nextstep.ladder.domain.line.point.Point; import nextstep.ladder.domain.player.Player; @@ -85,4 +86,16 @@ public static void printGameResult(LadderGameResult ladderGameResult) { () -> System.out.println(ladderGameResult.getResult(playerName)) ); } + + public static void printGameResult2(LadderGameResult2 ladderGameResult2) { + String playerName = InputView.getResultPlayer(); + + System.out.print(PLAY_RESULT_MESSAGE); + Optional.of(playerName) + .filter("all"::equals) + .ifPresentOrElse( + name -> System.out.println(ladderGameResult2.getResultAll()), + () -> System.out.println(ladderGameResult2.getResult(playerName)) + ); + } } From e6f0a55bacef3a82ae334d24cdef12cc203a8310 Mon Sep 17 00:00:00 2001 From: Ryumina-edu Date: Thu, 12 Dec 2024 16:30:39 +0900 Subject: [PATCH 6/9] =?UTF-8?q?refactor:=20Controller=20to-be=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=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/nextstep/ladder/LadderController.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/nextstep/ladder/LadderController.java b/src/main/java/nextstep/ladder/LadderController.java index 2fddb6f85e..1a315f7671 100644 --- a/src/main/java/nextstep/ladder/LadderController.java +++ b/src/main/java/nextstep/ladder/LadderController.java @@ -3,7 +3,10 @@ import nextstep.ladder.domain.ladder.Ladder; import nextstep.ladder.domain.ladder.LadderResult; import nextstep.ladder.domain.laddergame.LadderGame; +import nextstep.ladder.domain.laddergame.LadderGame2; import nextstep.ladder.domain.laddergame.LadderGameResult; +import nextstep.ladder.domain.laddergame.LadderGameResult2; +import nextstep.ladder.domain.laddergame.position.ResultPosition; import nextstep.ladder.domain.player.Players; import nextstep.ladder.ui.InputView; import nextstep.ladder.ui.ResultView; @@ -19,10 +22,16 @@ public static void main(String[] args) { ResultView.printLadder(ladder, ladderResult); + // as-is LadderGame ladderGame = new LadderGame(ladder, ladderResult); LadderGameResult ladderGameResult = ladderGame.play(); ResultView.printGameResult(ladderGameResult); + // to-be + ResultPosition resultPosition = new LadderGame2().play(ladder); + LadderGameResult2 ladderGameResult2 = resultPosition.match(players, ladderResult); + + ResultView.printGameResult2(ladderGameResult2); } } From 476ddc218e5e89bb0aabe4024dcf89816506084d Mon Sep 17 00:00:00 2001 From: Ryumina-edu Date: Thu, 12 Dec 2024 16:42:07 +0900 Subject: [PATCH 7/9] =?UTF-8?q?refactor:=20as-is=20=EC=86=8C=EC=8A=A4=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nextstep/ladder/LadderController.java | 9 ---- .../ladder/domain/laddergame/LadderGame.java | 28 ---------- .../domain/laddergame/LadderGameResult.java | 36 ------------- .../java/nextstep/ladder/ui/ResultView.java | 13 ----- .../laddergame/LadderGameResultTest.java | 51 ------------------- 5 files changed, 137 deletions(-) delete mode 100644 src/main/java/nextstep/ladder/domain/laddergame/LadderGame.java delete mode 100644 src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult.java delete mode 100644 src/test/java/nextstep/ladder/domain/laddergame/LadderGameResultTest.java diff --git a/src/main/java/nextstep/ladder/LadderController.java b/src/main/java/nextstep/ladder/LadderController.java index 1a315f7671..dbf04ed26c 100644 --- a/src/main/java/nextstep/ladder/LadderController.java +++ b/src/main/java/nextstep/ladder/LadderController.java @@ -2,9 +2,7 @@ import nextstep.ladder.domain.ladder.Ladder; import nextstep.ladder.domain.ladder.LadderResult; -import nextstep.ladder.domain.laddergame.LadderGame; import nextstep.ladder.domain.laddergame.LadderGame2; -import nextstep.ladder.domain.laddergame.LadderGameResult; import nextstep.ladder.domain.laddergame.LadderGameResult2; import nextstep.ladder.domain.laddergame.position.ResultPosition; import nextstep.ladder.domain.player.Players; @@ -22,13 +20,6 @@ public static void main(String[] args) { ResultView.printLadder(ladder, ladderResult); - // as-is - LadderGame ladderGame = new LadderGame(ladder, ladderResult); - LadderGameResult ladderGameResult = ladderGame.play(); - - ResultView.printGameResult(ladderGameResult); - - // to-be ResultPosition resultPosition = new LadderGame2().play(ladder); LadderGameResult2 ladderGameResult2 = resultPosition.match(players, ladderResult); diff --git a/src/main/java/nextstep/ladder/domain/laddergame/LadderGame.java b/src/main/java/nextstep/ladder/domain/laddergame/LadderGame.java deleted file mode 100644 index 320629a41c..0000000000 --- a/src/main/java/nextstep/ladder/domain/laddergame/LadderGame.java +++ /dev/null @@ -1,28 +0,0 @@ -package nextstep.ladder.domain.laddergame; - -import nextstep.ladder.domain.ladder.Ladder; -import nextstep.ladder.domain.ladder.LadderResult; -import nextstep.ladder.domain.laddergame.position.Positions; - -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class LadderGame { - private final Ladder ladder; - private final LadderResult ladderResult; - - public LadderGame(Ladder ladder, LadderResult ladderResult) { - this.ladder = ladder; - this.ladderResult = ladderResult; - } - - public LadderGameResult play() { - List positionsList = IntStream.range(0, ladder.getPlayers().size()) - .mapToObj(i -> new Positions().add(ladder.getLines(), i)) - .collect(Collectors.toList()); - - return new LadderGameResult(ladder.getPlayers(), positionsList, ladderResult); - } - -} diff --git a/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult.java b/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult.java deleted file mode 100644 index 24ed7a7ce2..0000000000 --- a/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult.java +++ /dev/null @@ -1,36 +0,0 @@ -package nextstep.ladder.domain.laddergame; - -import nextstep.ladder.domain.ladder.LadderResult; -import nextstep.ladder.domain.laddergame.position.PlayerPositions; -import nextstep.ladder.domain.laddergame.position.Positions; -import nextstep.ladder.domain.player.Player; -import nextstep.ladder.domain.player.Players; - -import java.util.List; -import java.util.stream.Collectors; - -public class LadderGameResult { - - private final PlayerPositions playerPositions; - private final LadderResult ladderResult; - - public LadderGameResult(List players, List positions, LadderResult ladderResult) { - this(new PlayerPositions(new Players(players), positions), ladderResult); - } - - public LadderGameResult(PlayerPositions playerPositions, LadderResult ladderResult) { - this.playerPositions = playerPositions; - this.ladderResult = ladderResult; - } - - public String getResult(String playerName) { - return ladderResult.getResultByIndex(playerPositions.getLastPosition(playerName)); - } - - public List getResultAll() { - return playerPositions.getPlayers().stream() - .map(player -> player.getName() + " : " + getResult(player.getName())) - .collect(Collectors.toList()); - } - -} diff --git a/src/main/java/nextstep/ladder/ui/ResultView.java b/src/main/java/nextstep/ladder/ui/ResultView.java index aa7fc6ebb7..5ba40a45d2 100644 --- a/src/main/java/nextstep/ladder/ui/ResultView.java +++ b/src/main/java/nextstep/ladder/ui/ResultView.java @@ -2,7 +2,6 @@ import nextstep.ladder.domain.ladder.Ladder; import nextstep.ladder.domain.ladder.LadderResult; -import nextstep.ladder.domain.laddergame.LadderGameResult; import nextstep.ladder.domain.laddergame.LadderGameResult2; import nextstep.ladder.domain.line.Line; import nextstep.ladder.domain.line.point.Point; @@ -75,18 +74,6 @@ public static String generatePrintingLine(Line line, int pointSize) { return stringBuilder.toString(); } - public static void printGameResult(LadderGameResult ladderGameResult) { - String playerName = InputView.getResultPlayer(); - - System.out.print(PLAY_RESULT_MESSAGE); - Optional.of(playerName) - .filter("all"::equals) - .ifPresentOrElse( - name -> ladderGameResult.getResultAll().forEach(System.out::println), - () -> System.out.println(ladderGameResult.getResult(playerName)) - ); - } - public static void printGameResult2(LadderGameResult2 ladderGameResult2) { String playerName = InputView.getResultPlayer(); diff --git a/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResultTest.java b/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResultTest.java deleted file mode 100644 index dce227a53f..0000000000 --- a/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResultTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package nextstep.ladder.domain.laddergame; - -import nextstep.ladder.domain.ladder.Ladder; -import nextstep.ladder.domain.ladder.LadderResultTest; -import nextstep.ladder.domain.ladder.LadderTest; -import nextstep.ladder.domain.laddergame.position.Positions; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - -class LadderGameResultTest { - - @Test - void getResult() { - Ladder ladder = LadderTest.getLadder(); - - List positionsList = new ArrayList<>(); - - for (int i = 0; i < ladder.getPlayers().size(); i++) { - Positions positions = new Positions(); - positionsList.add(positions.add(ladder.getLines(), i)); - } - - LadderGameResult ladderGameResult = new LadderGameResult(ladder.getPlayers(), positionsList, LadderResultTest.ladderResult); - - Assertions.assertThat(ladderGameResult.getResult("test1")).isEqualTo("10000원"); - Assertions.assertThat(ladderGameResult.getResult("test2")).isEqualTo("5000원"); - Assertions.assertThat(ladderGameResult.getResult("test3")).isEqualTo("15000원"); - Assertions.assertThat(ladderGameResult.getResult("test4")).isEqualTo("꽝"); - } - - @Test - void getResultAll() { - Ladder ladder = LadderTest.getLadder(); - - List positionsList = new ArrayList<>(); - - for (int i = 0; i < ladder.getPlayers().size(); i++) { - Positions positions = new Positions(); - positionsList.add(positions.add(ladder.getLines(), i)); - } - - LadderGameResult ladderGameResult = new LadderGameResult(ladder.getPlayers(), positionsList, LadderResultTest.ladderResult); - - Assertions.assertThat(ladderGameResult.getResultAll()).isNotNull(); - Assertions.assertThat(ladderGameResult.getResultAll().size()).isEqualTo(4); - Assertions.assertThat(ladderGameResult.getResultAll().get(0)).isEqualTo("test1 : 10000원"); - } -} \ No newline at end of file From 179800b00ffc1cf136ba3d5d23e1b37fe6437114 Mon Sep 17 00:00:00 2001 From: Ryumina-edu Date: Thu, 12 Dec 2024 16:45:52 +0900 Subject: [PATCH 8/9] =?UTF-8?q?refactor:=20LadderGame2=20->=20LadderGame,?= =?UTF-8?q?=20LadderGameResult2=20->=20LadderGameResult=20=EC=9D=B4?= =?UTF-8?q?=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 --- .../nextstep/ladder/LadderController.java | 10 ++--- .../{LadderGame2.java => LadderGame.java} | 2 +- ...GameResult2.java => LadderGameResult.java} | 6 +-- .../laddergame/position/ResultPosition.java | 10 ++--- .../java/nextstep/ladder/ui/ResultView.java | 8 ++-- .../laddergame/LadderGameResult2Test.java | 41 ------------------- .../laddergame/LadderGameResultTest.java | 41 +++++++++++++++++++ ...dderGame2Test.java => LadderGameTest.java} | 4 +- .../position/ResultPositionTest.java | 4 +- 9 files changed, 63 insertions(+), 63 deletions(-) rename src/main/java/nextstep/ladder/domain/laddergame/{LadderGame2.java => LadderGame.java} (96%) rename src/main/java/nextstep/ladder/domain/laddergame/{LadderGameResult2.java => LadderGameResult.java} (84%) delete mode 100644 src/test/java/nextstep/ladder/domain/laddergame/LadderGameResult2Test.java create mode 100644 src/test/java/nextstep/ladder/domain/laddergame/LadderGameResultTest.java rename src/test/java/nextstep/ladder/domain/laddergame/{LadderGame2Test.java => LadderGameTest.java} (84%) diff --git a/src/main/java/nextstep/ladder/LadderController.java b/src/main/java/nextstep/ladder/LadderController.java index dbf04ed26c..c50097eec4 100644 --- a/src/main/java/nextstep/ladder/LadderController.java +++ b/src/main/java/nextstep/ladder/LadderController.java @@ -2,8 +2,8 @@ import nextstep.ladder.domain.ladder.Ladder; import nextstep.ladder.domain.ladder.LadderResult; -import nextstep.ladder.domain.laddergame.LadderGame2; -import nextstep.ladder.domain.laddergame.LadderGameResult2; +import nextstep.ladder.domain.laddergame.LadderGame; +import nextstep.ladder.domain.laddergame.LadderGameResult; import nextstep.ladder.domain.laddergame.position.ResultPosition; import nextstep.ladder.domain.player.Players; import nextstep.ladder.ui.InputView; @@ -20,9 +20,9 @@ public static void main(String[] args) { ResultView.printLadder(ladder, ladderResult); - ResultPosition resultPosition = new LadderGame2().play(ladder); - LadderGameResult2 ladderGameResult2 = resultPosition.match(players, ladderResult); + ResultPosition resultPosition = new LadderGame().play(ladder); + LadderGameResult ladderGameResult = resultPosition.match(players, ladderResult); - ResultView.printGameResult2(ladderGameResult2); + ResultView.printGameResult2(ladderGameResult); } } diff --git a/src/main/java/nextstep/ladder/domain/laddergame/LadderGame2.java b/src/main/java/nextstep/ladder/domain/laddergame/LadderGame.java similarity index 96% rename from src/main/java/nextstep/ladder/domain/laddergame/LadderGame2.java rename to src/main/java/nextstep/ladder/domain/laddergame/LadderGame.java index 0ce440bfbb..d000d6eb68 100644 --- a/src/main/java/nextstep/ladder/domain/laddergame/LadderGame2.java +++ b/src/main/java/nextstep/ladder/domain/laddergame/LadderGame.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.stream.IntStream; -public class LadderGame2 { +public class LadderGame { public ResultPosition play(Ladder ladder) { ResultPosition resultPosition = new ResultPosition(); diff --git a/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult2.java b/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult.java similarity index 84% rename from src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult2.java rename to src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult.java index 15c02b5c61..20345f4fed 100644 --- a/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult2.java +++ b/src/main/java/nextstep/ladder/domain/laddergame/LadderGameResult.java @@ -3,14 +3,14 @@ import java.util.HashMap; import java.util.Map; -public class LadderGameResult2 { +public class LadderGameResult { private final Map ladderGameResult; - public LadderGameResult2() { + public LadderGameResult() { this(new HashMap<>()); } - public LadderGameResult2(Map ladderGameResult) { + public LadderGameResult(Map ladderGameResult) { this.ladderGameResult = ladderGameResult; } diff --git a/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java b/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java index 71891f2bb6..ff72869371 100644 --- a/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java +++ b/src/main/java/nextstep/ladder/domain/laddergame/position/ResultPosition.java @@ -1,7 +1,7 @@ package nextstep.ladder.domain.laddergame.position; import nextstep.ladder.domain.ladder.LadderResult; -import nextstep.ladder.domain.laddergame.LadderGameResult2; +import nextstep.ladder.domain.laddergame.LadderGameResult; import nextstep.ladder.domain.player.Players; import java.util.HashMap; @@ -27,17 +27,17 @@ public int getFinishPosition(int startPosition) { return positionMap.get(startPosition); } - public LadderGameResult2 match(Players players, LadderResult ladderResult) { - LadderGameResult2 ladderGameResult2 = new LadderGameResult2(); + public LadderGameResult match(Players players, LadderResult ladderResult) { + LadderGameResult ladderGameResult = new LadderGameResult(); IntStream.range(0, players.getPlayers().size()) .forEach(i -> { String name = players.getPlayers().get(i).getName(); String result = ladderResult.getResultByIndex(getFinishPosition(i)); - ladderGameResult2.add(name, result); + ladderGameResult.add(name, result); }); - return ladderGameResult2; + return ladderGameResult; } } diff --git a/src/main/java/nextstep/ladder/ui/ResultView.java b/src/main/java/nextstep/ladder/ui/ResultView.java index 5ba40a45d2..38e6052a58 100644 --- a/src/main/java/nextstep/ladder/ui/ResultView.java +++ b/src/main/java/nextstep/ladder/ui/ResultView.java @@ -2,7 +2,7 @@ import nextstep.ladder.domain.ladder.Ladder; import nextstep.ladder.domain.ladder.LadderResult; -import nextstep.ladder.domain.laddergame.LadderGameResult2; +import nextstep.ladder.domain.laddergame.LadderGameResult; import nextstep.ladder.domain.line.Line; import nextstep.ladder.domain.line.point.Point; import nextstep.ladder.domain.player.Player; @@ -74,15 +74,15 @@ public static String generatePrintingLine(Line line, int pointSize) { return stringBuilder.toString(); } - public static void printGameResult2(LadderGameResult2 ladderGameResult2) { + public static void printGameResult2(LadderGameResult ladderGameResult) { String playerName = InputView.getResultPlayer(); System.out.print(PLAY_RESULT_MESSAGE); Optional.of(playerName) .filter("all"::equals) .ifPresentOrElse( - name -> System.out.println(ladderGameResult2.getResultAll()), - () -> System.out.println(ladderGameResult2.getResult(playerName)) + name -> System.out.println(ladderGameResult.getResultAll()), + () -> System.out.println(ladderGameResult.getResult(playerName)) ); } } diff --git a/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResult2Test.java b/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResult2Test.java deleted file mode 100644 index 40bf9e22cb..0000000000 --- a/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResult2Test.java +++ /dev/null @@ -1,41 +0,0 @@ -package nextstep.ladder.domain.laddergame; - -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.util.Map; - -class LadderGameResult2Test { - - @Test - void create() { - LadderGameResult2 ladderGameResult2 = new LadderGameResult2(); - - Assertions.assertThat(ladderGameResult2).isNotNull(); - } - - @Test - void create_map() { - LadderGameResult2 ladderGameResult2 = new LadderGameResult2(Map.of("test1", "5000")); - - Assertions.assertThat(ladderGameResult2).isNotNull(); - } - - @Test - void add_and_getResult() { - LadderGameResult2 ladderGameResult2 = new LadderGameResult2(); - - ladderGameResult2.add("test1", "5000"); - - Assertions.assertThat(ladderGameResult2.getResult("test1")).isEqualTo("5000"); - } - - @Test - void getResultAll() { - LadderGameResult2 ladderGameResult2 = new LadderGameResult2(Map.of("test1", "5000")); - - Assertions.assertThat(ladderGameResult2.getResultAll()).contains("test1"); - Assertions.assertThat(ladderGameResult2.getResultAll()).contains(":"); - Assertions.assertThat(ladderGameResult2.getResultAll()).contains("5000"); - } -} \ No newline at end of file diff --git a/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResultTest.java b/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResultTest.java new file mode 100644 index 0000000000..1cf01a92b3 --- /dev/null +++ b/src/test/java/nextstep/ladder/domain/laddergame/LadderGameResultTest.java @@ -0,0 +1,41 @@ +package nextstep.ladder.domain.laddergame; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +class LadderGameResultTest { + + @Test + void create() { + LadderGameResult ladderGameResult = new LadderGameResult(); + + Assertions.assertThat(ladderGameResult).isNotNull(); + } + + @Test + void create_map() { + LadderGameResult ladderGameResult = new LadderGameResult(Map.of("test1", "5000")); + + Assertions.assertThat(ladderGameResult).isNotNull(); + } + + @Test + void add_and_getResult() { + LadderGameResult ladderGameResult = new LadderGameResult(); + + ladderGameResult.add("test1", "5000"); + + Assertions.assertThat(ladderGameResult.getResult("test1")).isEqualTo("5000"); + } + + @Test + void getResultAll() { + LadderGameResult ladderGameResult = new LadderGameResult(Map.of("test1", "5000")); + + Assertions.assertThat(ladderGameResult.getResultAll()).contains("test1"); + Assertions.assertThat(ladderGameResult.getResultAll()).contains(":"); + Assertions.assertThat(ladderGameResult.getResultAll()).contains("5000"); + } +} \ No newline at end of file diff --git a/src/test/java/nextstep/ladder/domain/laddergame/LadderGame2Test.java b/src/test/java/nextstep/ladder/domain/laddergame/LadderGameTest.java similarity index 84% rename from src/test/java/nextstep/ladder/domain/laddergame/LadderGame2Test.java rename to src/test/java/nextstep/ladder/domain/laddergame/LadderGameTest.java index 5b5373f035..592ca4a84b 100644 --- a/src/test/java/nextstep/ladder/domain/laddergame/LadderGame2Test.java +++ b/src/test/java/nextstep/ladder/domain/laddergame/LadderGameTest.java @@ -5,11 +5,11 @@ import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; -class LadderGame2Test { +class LadderGameTest { @Test void play() { - ResultPosition resultPosition = new LadderGame2().play(LadderTest.getLadder()); + ResultPosition resultPosition = new LadderGame().play(LadderTest.getLadder()); Assertions.assertThat(resultPosition.getFinishPosition(0)).isEqualTo(2); Assertions.assertThat(resultPosition.getFinishPosition(1)).isEqualTo(1); diff --git a/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java b/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java index 4b5577a370..61a3f6fa33 100644 --- a/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java +++ b/src/test/java/nextstep/ladder/domain/laddergame/position/ResultPositionTest.java @@ -1,7 +1,7 @@ package nextstep.ladder.domain.laddergame.position; import nextstep.ladder.domain.ladder.LadderResult; -import nextstep.ladder.domain.laddergame.LadderGameResult2; +import nextstep.ladder.domain.laddergame.LadderGameResult; import nextstep.ladder.domain.player.Player; import nextstep.ladder.domain.player.Players; import org.assertj.core.api.Assertions; @@ -48,7 +48,7 @@ void match() { LadderResult ladderResult = new LadderResult(List.of("꽝", "5000")); - LadderGameResult2 gameResult = resultPosition.match(players, ladderResult); + LadderGameResult gameResult = resultPosition.match(players, ladderResult); Assertions.assertThat(gameResult.getResult("test1")).isEqualTo("5000"); Assertions.assertThat(gameResult.getResult("test2")).isEqualTo("꽝"); From ffb7b88e34c956efdd1989990661a93b8d8d312f Mon Sep 17 00:00:00 2001 From: Ryumina-edu Date: Mon, 16 Dec 2024 16:28:45 +0900 Subject: [PATCH 9/9] =?UTF-8?q?refactor:=20=EC=9C=84=EC=B9=98=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=EC=9D=84=20=EC=9C=84=ED=95=9C=20MoveDirection=20enum?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../laddergame/position/MoveDirection.java | 41 +++++++++++++++ .../domain/laddergame/position/Position.java | 10 +--- .../position/MoveDirectionTest.java | 50 +++++++++++++++++++ 3 files changed, 92 insertions(+), 9 deletions(-) create mode 100644 src/main/java/nextstep/ladder/domain/laddergame/position/MoveDirection.java create mode 100644 src/test/java/nextstep/ladder/domain/laddergame/position/MoveDirectionTest.java diff --git a/src/main/java/nextstep/ladder/domain/laddergame/position/MoveDirection.java b/src/main/java/nextstep/ladder/domain/laddergame/position/MoveDirection.java new file mode 100644 index 0000000000..7dd5703cfc --- /dev/null +++ b/src/main/java/nextstep/ladder/domain/laddergame/position/MoveDirection.java @@ -0,0 +1,41 @@ +package nextstep.ladder.domain.laddergame.position; + +import java.util.Arrays; + +public enum MoveDirection { + LEFT(-1) { + public boolean canMove(boolean left, boolean right) { + return left && !right; + } + }, + RIGHT(1) { + public boolean canMove(boolean left, boolean right) { + return !left && right; + } + }, + PASS(0) { + public boolean canMove(boolean left, boolean right) { + return !left && !right; + } + }; + + private int direction; + + MoveDirection(int direction) { + this.direction = direction; + } + + public static int move(boolean left, boolean right) { + return Arrays.stream(values()) + .filter(direction -> direction.canMove(left, right)) + .findFirst() + .map(MoveDirection::getDirection) + .orElseThrow(() -> new IllegalArgumentException("포인트를 확인해주세요.")); + } + + public int getDirection() { + return direction; + } + + public abstract boolean canMove(boolean left, boolean right); +} diff --git a/src/main/java/nextstep/ladder/domain/laddergame/position/Position.java b/src/main/java/nextstep/ladder/domain/laddergame/position/Position.java index 6dad0fcc66..bd26005692 100644 --- a/src/main/java/nextstep/ladder/domain/laddergame/position/Position.java +++ b/src/main/java/nextstep/ladder/domain/laddergame/position/Position.java @@ -14,15 +14,7 @@ public Position(int position) { } public Position move(Point point) { - if (point.canMoveLeft()) { - return new Position(position - 1); - } - - if (point.canMoveRight()) { - return new Position(position + 1); - } - - return new Position(position); + return new Position(position + MoveDirection.move(point.canMoveLeft(), point.canMoveRight())); } public int getPosition() { diff --git a/src/test/java/nextstep/ladder/domain/laddergame/position/MoveDirectionTest.java b/src/test/java/nextstep/ladder/domain/laddergame/position/MoveDirectionTest.java new file mode 100644 index 0000000000..4f2edfe5f6 --- /dev/null +++ b/src/test/java/nextstep/ladder/domain/laddergame/position/MoveDirectionTest.java @@ -0,0 +1,50 @@ +package nextstep.ladder.domain.laddergame.position; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class MoveDirectionTest { + + @Test + @DisplayName("왼쪽으로 이동이 가능할 경우 -1을 반환한다") + void left() { + Assertions.assertThat(MoveDirection.LEFT.getDirection()).isEqualTo(-1); + } + + @Test + @DisplayName("현재 위치가 1이고, 왼쪽으로 이동이 가능할 경우 최종 위치는 0이 된다") + void move_left_position() { + Position position = new Position(1 + MoveDirection.LEFT.getDirection()); + + Assertions.assertThat(position.getPosition()).isEqualTo(0); + } + + @Test + @DisplayName("오른쪽으로 이동이 가능할 경우 +1을 반환한다") + void right() { + Assertions.assertThat(MoveDirection.RIGHT.getDirection()).isEqualTo(1); + } + + @Test + @DisplayName("현재 위치가 1이고, 오른쪽으로 이동이 가능할 경우 최종 위치는 2가 된다") + void move_right_position() { + Position position = new Position(1 + MoveDirection.RIGHT.getDirection()); + + Assertions.assertThat(position.getPosition()).isEqualTo(2); + } + + @Test + @DisplayName("왼쪽, 오른쪽 모두 이동이 불가능한 경우 0을 반환한다") + void pass() { + Assertions.assertThat(MoveDirection.PASS.getDirection()).isEqualTo(0); + } + + @Test + @DisplayName("현재 위치가 1이고, 왼쪽과 오른쪽 모두 이동이 불가능한 경우 최종 위치는 그대로 1이 된다") + void move_pass_position() { + Position position = new Position(1 + MoveDirection.PASS.getDirection()); + + Assertions.assertThat(position.getPosition()).isEqualTo(1); + } +} \ No newline at end of file