From 28799a8e5f870782e12d50ce5dd6eb5b6d0ac2e7 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 20:51:09 +0900 Subject: [PATCH 01/35] =?UTF-8?q?feat(view):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EB=A9=94=EC=84=9C=EB=93=9C=20printNumberPrompt=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 --- src/main/java/baseball/view/OutputView.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/baseball/view/OutputView.java diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java new file mode 100644 index 0000000..eab343e --- /dev/null +++ b/src/main/java/baseball/view/OutputView.java @@ -0,0 +1,9 @@ +package baseball.view; + +public class OutputView { + + public void printStartMessage() { + System.out.println("숫자 야구 게임을 시작합니다."); + } + +} From 8be4defa7864441ef7b71f82baaecd9d5cc56004 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 20:52:12 +0900 Subject: [PATCH 02/35] =?UTF-8?q?feat(view):=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=ED=94=84=EB=A1=AC=ED=94=84=ED=8A=B8=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B6=9C=EB=A0=A5=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20printNumberPrompt=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/baseball/view/OutputView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index eab343e..4b388b9 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -6,4 +6,8 @@ public void printStartMessage() { System.out.println("숫자 야구 게임을 시작합니다."); } + public void printNumberPrompt() { + System.out.print("숫자를 입력해주세요 : "); + } + } From 7592c7a93509f1091571892dc02bda2621ee9ae2 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 20:54:15 +0900 Subject: [PATCH 03/35] =?UTF-8?q?feat(view):=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B6=9C=EB=A0=A5=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20printError=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/baseball/view/OutputView.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index 4b388b9..0282609 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -1,6 +1,7 @@ package baseball.view; public class OutputView { + private final static String ERROR = "[ERROR]%s"; public void printStartMessage() { System.out.println("숫자 야구 게임을 시작합니다."); @@ -10,4 +11,8 @@ public void printNumberPrompt() { System.out.print("숫자를 입력해주세요 : "); } + public void printError(String message) { + System.out.println(ERROR.formatted(message)); + } + } From 7aefda658caebf8bc695ccd9b3bb4a08c3c271d7 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 20:57:10 +0900 Subject: [PATCH 04/35] =?UTF-8?q?feat(view):=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=A9=94=EC=84=9C=EB=93=9C=20getNumber=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 --- src/main/java/baseball/view/InputView.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/baseball/view/InputView.java diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java new file mode 100644 index 0000000..955aee0 --- /dev/null +++ b/src/main/java/baseball/view/InputView.java @@ -0,0 +1,11 @@ +package baseball.view; + +import static camp.nextstep.edu.missionutils.Console.readLine; + +public class InputView { + + public void getNumber() { + readLine(); + } + +} From f1e64ca863fb6c42077fd2e5798d6bf5f40f0674 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 20:59:21 +0900 Subject: [PATCH 05/35] =?UTF-8?q?feat(view):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=A2=85=EB=A3=8C=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EB=A9=94=EC=84=9C=EB=93=9C=20printEndMessage=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 --- src/main/java/baseball/view/OutputView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index 0282609..fc24966 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -11,6 +11,10 @@ public void printNumberPrompt() { System.out.print("숫자를 입력해주세요 : "); } + public void printEndMessage() { + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + public void printError(String message) { System.out.println(ERROR.formatted(message)); } From ae729c6a8c0c5b3c8ab56d4eea597904ffdb6cf7 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:00:22 +0900 Subject: [PATCH 06/35] =?UTF-8?q?feat(view):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=9E=AC=EC=8B=9C=EC=9E=91=20=EC=9E=85=EB=A0=A5=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20askRestart=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/baseball/view/InputView.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java index 955aee0..3be2776 100644 --- a/src/main/java/baseball/view/InputView.java +++ b/src/main/java/baseball/view/InputView.java @@ -8,4 +8,7 @@ public void getNumber() { readLine(); } + public void askRestart() { + readLine(); + } } From 703b9290ed4a1a1e21a8bc2cf3e40959e8616f78 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:01:43 +0900 Subject: [PATCH 07/35] =?UTF-8?q?feat(view):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=9E=AC=EC=8B=9C=EC=9E=91=20=ED=94=84=EB=A1=AC=ED=94=84?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=9C=EB=A0=A5=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?printRestartPrompt=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/baseball/view/OutputView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index fc24966..79a7ccb 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -15,6 +15,10 @@ public void printEndMessage() { System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } + public void printRestartPrompt() { + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + } + public void printError(String message) { System.out.println(ERROR.formatted(message)); } From a2a6689e9d10b783a79c5e5c3e6e3bed48110a29 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:10:22 +0900 Subject: [PATCH 08/35] =?UTF-8?q?feat(view):=20getNumber,=20askRestart=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=EA=B0=92=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/baseball/view/InputView.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java index 3be2776..6e0b7e1 100644 --- a/src/main/java/baseball/view/InputView.java +++ b/src/main/java/baseball/view/InputView.java @@ -4,11 +4,11 @@ public class InputView { - public void getNumber() { - readLine(); + public String getNumber() { + return readLine(); } - public void askRestart() { - readLine(); + public String askRestart() { + return readLine(); } } From 348a827acfbfa6ab174584af61d2a6fdf5fbc20d Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:11:49 +0900 Subject: [PATCH 09/35] =?UTF-8?q?feat(controller):=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=EC=9D=84=20=EA=B4=80=EB=A6=AC=ED=95=A0=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20GameComputer=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/controller/GameComputer.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/baseball/controller/GameComputer.java diff --git a/src/main/java/baseball/controller/GameComputer.java b/src/main/java/baseball/controller/GameComputer.java new file mode 100644 index 0000000..56892a8 --- /dev/null +++ b/src/main/java/baseball/controller/GameComputer.java @@ -0,0 +1,15 @@ +package baseball.controller; + +import baseball.view.InputView; +import baseball.view.OutputView; + +public class GameComputer { + private final InputView inputView; + private final OutputView outputView; + + public GameComputer(InputView inputView, OutputView outputView) { + this.inputView = inputView; + this.outputView = outputView; + } + +} \ No newline at end of file From 92cc2c053e4654c3ccf962ac351aa7c9273c4e0b Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:12:51 +0900 Subject: [PATCH 10/35] =?UTF-8?q?feat(controller):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EB=A9=94=EC=84=9C=EB=93=9C=20start=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 --- src/main/java/baseball/controller/GameComputer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baseball/controller/GameComputer.java b/src/main/java/baseball/controller/GameComputer.java index 56892a8..d3afe85 100644 --- a/src/main/java/baseball/controller/GameComputer.java +++ b/src/main/java/baseball/controller/GameComputer.java @@ -12,4 +12,8 @@ public GameComputer(InputView inputView, OutputView outputView) { this.outputView = outputView; } + public void start() { + outputView.printStartMessage(); + } + } \ No newline at end of file From 754b5b8d1f3a66242d2fa9129c9b5c34a888de75 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:14:40 +0900 Subject: [PATCH 11/35] =?UTF-8?q?feat(controller):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=20=EB=A9=94=EC=84=9C=EB=93=9C=20pla?= =?UTF-8?q?y=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/baseball/controller/GameComputer.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/baseball/controller/GameComputer.java b/src/main/java/baseball/controller/GameComputer.java index d3afe85..8202f85 100644 --- a/src/main/java/baseball/controller/GameComputer.java +++ b/src/main/java/baseball/controller/GameComputer.java @@ -14,6 +14,15 @@ public GameComputer(InputView inputView, OutputView outputView) { public void start() { outputView.printStartMessage(); + while (true) { + play(); + } } + private void play() { + while (true) { + outputView.printNumberPrompt(); + inputView.getNumber(); + } + } } \ No newline at end of file From 1659cfc8c4af3133a597cb294c13ece06cc63d02 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:17:45 +0900 Subject: [PATCH 12/35] =?UTF-8?q?feat(domain):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EA=B4=80=EB=A6=AC=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=20GameMenu=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 --- .../java/baseball/model/domain/GameMenu.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/baseball/model/domain/GameMenu.java diff --git a/src/main/java/baseball/model/domain/GameMenu.java b/src/main/java/baseball/model/domain/GameMenu.java new file mode 100644 index 0000000..43ab6dd --- /dev/null +++ b/src/main/java/baseball/model/domain/GameMenu.java @@ -0,0 +1,23 @@ +package baseball.model.domain; + +import java.util.Arrays; + +public enum GameMenu { + RESTART("1", true), + QUIT("2", false); + + private final String code; + private final boolean countinue; + + GameMenu(String code, boolean countinue) { + this.code = code; + this.countinue = countinue; + } + + public static GameMenu from(String input) { + return Arrays.stream(GameMenu.values()) + .filter(menu -> menu.code.equals(input)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("잘못된 메뉴 선택입니다.")); + } +} \ No newline at end of file From a04f21225bd58aebee642da8fc5e14695843c984 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:24:15 +0900 Subject: [PATCH 13/35] =?UTF-8?q?feat(domain):=20GameMenu=EC=97=90=20?= =?UTF-8?q?=EC=9E=AC=EC=8B=9C=EC=9E=91=20=EC=97=AC=EB=B6=80=20=ED=8C=90?= =?UTF-8?q?=EB=8B=A8=20=EB=A1=9C=EC=A7=81=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/baseball/model/domain/GameMenu.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/model/domain/GameMenu.java b/src/main/java/baseball/model/domain/GameMenu.java index 43ab6dd..0b4c864 100644 --- a/src/main/java/baseball/model/domain/GameMenu.java +++ b/src/main/java/baseball/model/domain/GameMenu.java @@ -14,10 +14,15 @@ public enum GameMenu { this.countinue = countinue; } - public static GameMenu from(String input) { + private boolean isCountinue() { + return countinue; + } + + public static boolean from(String input) { return Arrays.stream(GameMenu.values()) .filter(menu -> menu.code.equals(input)) .findFirst() + .map(GameMenu::isCountinue) .orElseThrow(() -> new IllegalArgumentException("잘못된 메뉴 선택입니다.")); } } \ No newline at end of file From d52c1d4f704552ea64d1924cc704a30ec6b7ea06 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:26:53 +0900 Subject: [PATCH 14/35] =?UTF-8?q?feat(controller):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=9E=AC=EC=8B=9C=EC=9E=91=20=EB=A9=94=EC=84=9C=EB=93=9C=20res?= =?UTF-8?q?tart=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/baseball/controller/GameComputer.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/controller/GameComputer.java b/src/main/java/baseball/controller/GameComputer.java index 8202f85..06dff61 100644 --- a/src/main/java/baseball/controller/GameComputer.java +++ b/src/main/java/baseball/controller/GameComputer.java @@ -1,5 +1,6 @@ package baseball.controller; +import baseball.model.domain.GameMenu; import baseball.view.InputView; import baseball.view.OutputView; @@ -13,9 +14,11 @@ public GameComputer(InputView inputView, OutputView outputView) { } public void start() { + boolean isContinue = true; outputView.printStartMessage(); - while (true) { + while (isContinue) { play(); + isContinue = restart(); } } @@ -25,4 +28,11 @@ private void play() { inputView.getNumber(); } } + + private boolean restart() { + outputView.printRestartPrompt(); + String input = inputView.askRestart(); + return GameMenu.from(input); + } + } \ No newline at end of file From 6a2146b39a48772cef143e2a8cdcf592fa1b3425 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:31:59 +0900 Subject: [PATCH 15/35] =?UTF-8?q?feat(controller):=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=A9=94=EC=84=9C=EB=93=9C=20input=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 --- src/main/java/baseball/controller/GameComputer.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/baseball/controller/GameComputer.java b/src/main/java/baseball/controller/GameComputer.java index 06dff61..c57d59c 100644 --- a/src/main/java/baseball/controller/GameComputer.java +++ b/src/main/java/baseball/controller/GameComputer.java @@ -24,15 +24,18 @@ public void start() { private void play() { while (true) { - outputView.printNumberPrompt(); - inputView.getNumber(); + String input = input(); } } + private String input() { + outputView.printNumberPrompt(); + return inputView.getNumber(); + } + private boolean restart() { outputView.printRestartPrompt(); String input = inputView.askRestart(); return GameMenu.from(input); } - } \ No newline at end of file From b6e80f2309419106117995c65eb67383ee26f95d Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:52:49 +0900 Subject: [PATCH 16/35] =?UTF-8?q?feat(config):=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=EC=84=B1=20=EC=A3=BC=EC=9E=85=EC=97=90=20=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=EC=B1=85=EC=9E=84=20=EB=B6=84=EB=A6=AC=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=20GameConfig=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 --- src/main/java/baseball/config/GameConfig.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/baseball/config/GameConfig.java diff --git a/src/main/java/baseball/config/GameConfig.java b/src/main/java/baseball/config/GameConfig.java new file mode 100644 index 0000000..4a11977 --- /dev/null +++ b/src/main/java/baseball/config/GameConfig.java @@ -0,0 +1,16 @@ +package baseball.config; + +import baseball.controller.GameComputer; +import baseball.view.InputView; +import baseball.view.OutputView; + +public class GameConfig { + + private final InputView inputView = new InputView(); + private final OutputView outputView = new OutputView(); + private final GameComputer gameComputer; + + public GameConfig() { + this.gameComputer = new GameComputer(inputView, outputView); + } +} From 137c58a44b378ece0f9745ccf9d780aa3948d2de Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:55:34 +0900 Subject: [PATCH 17/35] =?UTF-8?q?feat(config):=20GameComputer=20Getter=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20getGameComputer=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/baseball/config/GameConfig.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baseball/config/GameConfig.java b/src/main/java/baseball/config/GameConfig.java index 4a11977..c2f81cb 100644 --- a/src/main/java/baseball/config/GameConfig.java +++ b/src/main/java/baseball/config/GameConfig.java @@ -13,4 +13,8 @@ public class GameConfig { public GameConfig() { this.gameComputer = new GameComputer(inputView, outputView); } + + public GameComputer getGameComputer() { + return gameComputer; + } } From 128ef27ab504675215889f1ecea8816a23a28c44 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 21:56:31 +0900 Subject: [PATCH 18/35] =?UTF-8?q?feat(main):=20GameConfig=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EB=B0=8F=20=EA=B2=8C=EC=9E=84=20=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=20=EB=A1=9C=EC=A7=81=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/baseball/Application.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34..5dccf83 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,13 @@ package baseball; +import baseball.config.GameConfig; +import baseball.controller.GameComputer; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + GameConfig gameConfig = new GameConfig(); + GameComputer gameComputer = gameConfig.getGameComputer(); + + gameComputer.start(); } -} +} \ No newline at end of file From 56863091129900bc4e3d39b061849a755bfa64f6 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 22:37:44 +0900 Subject: [PATCH 19/35] =?UTF-8?q?refactor(view):=20printEndMessage=20->=20?= =?UTF-8?q?printFinishMessaage=20=EB=A9=94=EC=84=9C=EB=93=9C=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 --- src/main/java/baseball/view/OutputView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index 79a7ccb..399ca51 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -11,7 +11,7 @@ public void printNumberPrompt() { System.out.print("숫자를 입력해주세요 : "); } - public void printEndMessage() { + public void printFinishMessage() { System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } From 3cae7bd951aa0d4c6dade56b9fe79b9bf717d45b Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 22:38:41 +0900 Subject: [PATCH 20/35] =?UTF-8?q?feat(controller):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=A2=85=EB=A3=8C=20=EB=A9=94=EC=84=9C=EB=93=9C=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/baseball/controller/GameComputer.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/controller/GameComputer.java b/src/main/java/baseball/controller/GameComputer.java index c57d59c..c209d8a 100644 --- a/src/main/java/baseball/controller/GameComputer.java +++ b/src/main/java/baseball/controller/GameComputer.java @@ -20,12 +20,15 @@ public void start() { play(); isContinue = restart(); } + } private void play() { - while (true) { + boolean isFinish = true; + while (isFinish) { String input = input(); } + finish(); } private String input() { @@ -38,4 +41,8 @@ private boolean restart() { String input = inputView.askRestart(); return GameMenu.from(input); } + + private void finish() { + outputView.printFinishMessage(); + } } \ No newline at end of file From 4fef63b0b60709060b9e2bc4ec24f4e39419a6e3 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 22:52:31 +0900 Subject: [PATCH 21/35] =?UTF-8?q?feat(domain):=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=88=AB=EC=9E=90=EB=A5=BC=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20Gam?= =?UTF-8?q?eNumber=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/model/domain/GameNumber.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/baseball/model/domain/GameNumber.java diff --git a/src/main/java/baseball/model/domain/GameNumber.java b/src/main/java/baseball/model/domain/GameNumber.java new file mode 100644 index 0000000..af38e4a --- /dev/null +++ b/src/main/java/baseball/model/domain/GameNumber.java @@ -0,0 +1,33 @@ +package baseball.model.domain; + +public class GameNumber { + private final int number; + + public GameNumber(int number) { + this.number = validate(number); + } + + private int validate(int number) { + if (number < 1 || number > 9) { + throw new IllegalArgumentException("숫자는 1에서 9까지 수만 허용 됩니다."); + } + return number; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GameNumber number = (GameNumber) o; + return this.number == number.number; + } + + @Override + public int hashCode() { + return Integer.hashCode(number); + } +} From 88c5e12b3d23b831530d5cb3e5d607f42e9a329c Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 23:17:06 +0900 Subject: [PATCH 22/35] =?UTF-8?q?feat(domain):=20GameNumbe=EB=93=A4?= =?UTF-8?q?=EC=9D=84=20=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20=EC=9D=BC?= =?UTF-8?q?=EA=B8=89=20=EC=BB=AC=EB=A0=89=EC=85=98=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20GameNumbers=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/model/domain/GameNumbers.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/baseball/model/domain/GameNumbers.java diff --git a/src/main/java/baseball/model/domain/GameNumbers.java b/src/main/java/baseball/model/domain/GameNumbers.java new file mode 100644 index 0000000..3b25e29 --- /dev/null +++ b/src/main/java/baseball/model/domain/GameNumbers.java @@ -0,0 +1,17 @@ +package baseball.model.domain; + +import java.util.ArrayList; +import java.util.List; + +public class GameNumbers { + private final List gameNumbers; + + public GameNumbers(String input) { + this.gameNumbers = generateGameNumbers(input); + } + + private List generateGameNumbers(String input) { + List gameNumbers = new ArrayList<>(); + return gameNumbers; + } +} From 04bd94e16796fe0d4f467fa5ac78e38210698148 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 23:36:22 +0900 Subject: [PATCH 23/35] =?UTF-8?q?feat(domain):=20GameNumber=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A9=94=EC=84=9C=EB=93=9C=20parse=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 --- .../java/baseball/model/domain/GameNumber.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/baseball/model/domain/GameNumber.java b/src/main/java/baseball/model/domain/GameNumber.java index af38e4a..cde205c 100644 --- a/src/main/java/baseball/model/domain/GameNumber.java +++ b/src/main/java/baseball/model/domain/GameNumber.java @@ -3,13 +3,23 @@ public class GameNumber { private final int number; - public GameNumber(int number) { - this.number = validate(number); + public GameNumber(String input) { + this.number = parse(input); + } + + private int parse(String input) { + try { + int number = Integer.parseInt(input); + validate(number); + return number; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("입력값은 숫자여야 합니다."); + } } private int validate(int number) { if (number < 1 || number > 9) { - throw new IllegalArgumentException("숫자는 1에서 9까지 수만 허용 됩니다."); + throw new IllegalArgumentException("숫자는 1에서 9까지의 수만 허용됩니다."); } return number; } From af8c084808b9e89cf4fffd6d0c876c95073385c8 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Mon, 18 Nov 2024 23:50:27 +0900 Subject: [PATCH 24/35] =?UTF-8?q?feat(domain):=20GameNumber=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20Getter=20=EB=A9=94=EC=84=9C=EB=93=9C=20get?= =?UTF-8?q?Number=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/baseball/model/domain/GameNumber.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baseball/model/domain/GameNumber.java b/src/main/java/baseball/model/domain/GameNumber.java index cde205c..84c3670 100644 --- a/src/main/java/baseball/model/domain/GameNumber.java +++ b/src/main/java/baseball/model/domain/GameNumber.java @@ -24,6 +24,10 @@ private int validate(int number) { return number; } + public int getNumber() { + return number; + } + @Override public boolean equals(Object o) { if (this == o) { From 1e34c4b214cd585745ab2ff94129a05939995513 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 00:03:43 +0900 Subject: [PATCH 25/35] =?UTF-8?q?feat(domain):=20GameNumbers=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A9=94=EC=84=9C=EB=93=9C=20parse=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 --- .../baseball/model/domain/GameNumbers.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/model/domain/GameNumbers.java b/src/main/java/baseball/model/domain/GameNumbers.java index 3b25e29..2891c86 100644 --- a/src/main/java/baseball/model/domain/GameNumbers.java +++ b/src/main/java/baseball/model/domain/GameNumbers.java @@ -2,16 +2,36 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class GameNumbers { private final List gameNumbers; public GameNumbers(String input) { - this.gameNumbers = generateGameNumbers(input); + this.gameNumbers = parse(input); } - private List generateGameNumbers(String input) { + private List parse(String input) { + List items = List.of(input.split("")); List gameNumbers = new ArrayList<>(); + for (String item : items) { + GameNumber gameNumber = new GameNumber(item); + gameNumbers.add(gameNumber); + } + validate(gameNumbers); return gameNumbers; } + + private void validate(List gameNumbers) { + if (gameNumbers.size() != 3) { + throw new IllegalArgumentException("숫자 3자리를 입력해야 합니다."); + } + int uniqueCount = gameNumbers.stream() + .map(GameNumber::getNumber) + .collect(Collectors.toSet()) + .size(); + if (uniqueCount != 3) { + throw new IllegalArgumentException("중복된 숫자는 허용되지 않습니다."); + } + } } From d1221404d60fe77861a598aed1038476e4237baa Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 00:22:59 +0900 Subject: [PATCH 26/35] =?UTF-8?q?feat(domain):=20ComputerNumbers=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/domain/ComputerNumbers.java | 25 +++++++++++++++++++ .../baseball/model/domain/GameNumber.java | 4 +++ .../baseball/model/domain/GameNumbers.java | 15 +++++++++++ 3 files changed, 44 insertions(+) create mode 100644 src/main/java/baseball/model/domain/ComputerNumbers.java diff --git a/src/main/java/baseball/model/domain/ComputerNumbers.java b/src/main/java/baseball/model/domain/ComputerNumbers.java new file mode 100644 index 0000000..6b0319c --- /dev/null +++ b/src/main/java/baseball/model/domain/ComputerNumbers.java @@ -0,0 +1,25 @@ +package baseball.model.domain; + +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class ComputerNumbers { + private final GameNumbers computerNumbers; + + public ComputerNumbers() { + this.computerNumbers = createRandomNumbers(); + } + + public static GameNumbers createRandomNumbers() { + Set randomNumbers = new HashSet<>(); + while (randomNumbers.size() < 3) { + int randomNumber = pickNumberInRange(1, 9); + randomNumbers.add(randomNumber); + } + return new GameNumbers(randomNumbers); + } +} diff --git a/src/main/java/baseball/model/domain/GameNumber.java b/src/main/java/baseball/model/domain/GameNumber.java index 84c3670..55a365c 100644 --- a/src/main/java/baseball/model/domain/GameNumber.java +++ b/src/main/java/baseball/model/domain/GameNumber.java @@ -7,6 +7,10 @@ public GameNumber(String input) { this.number = parse(input); } + public GameNumber(int number) { + this.number = number; + } + private int parse(String input) { try { int number = Integer.parseInt(input); diff --git a/src/main/java/baseball/model/domain/GameNumbers.java b/src/main/java/baseball/model/domain/GameNumbers.java index 2891c86..8034a1f 100644 --- a/src/main/java/baseball/model/domain/GameNumbers.java +++ b/src/main/java/baseball/model/domain/GameNumbers.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; public class GameNumbers { @@ -11,6 +12,10 @@ public GameNumbers(String input) { this.gameNumbers = parse(input); } + public GameNumbers(Set randomNumbers) { + this.gameNumbers = parse(randomNumbers); + } + private List parse(String input) { List items = List.of(input.split("")); List gameNumbers = new ArrayList<>(); @@ -22,6 +27,16 @@ private List parse(String input) { return gameNumbers; } + private List parse(Set randomNumbers) { + List gameNumbers = new ArrayList<>(); + for (int number : randomNumbers) { + GameNumber gameNumber = new GameNumber(number); + gameNumbers.add(gameNumber); + } + validate(gameNumbers); + return gameNumbers; + } + private void validate(List gameNumbers) { if (gameNumbers.size() != 3) { throw new IllegalArgumentException("숫자 3자리를 입력해야 합니다."); From 985b88e7d0c1b32263ee6d8eb4b379371114119a Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 00:26:40 +0900 Subject: [PATCH 27/35] =?UTF-8?q?feat(domain):=20PlayerNumbers=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9E=90=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/baseball/model/domain/PlayerNumbers.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/baseball/model/domain/PlayerNumbers.java diff --git a/src/main/java/baseball/model/domain/PlayerNumbers.java b/src/main/java/baseball/model/domain/PlayerNumbers.java new file mode 100644 index 0000000..6a23978 --- /dev/null +++ b/src/main/java/baseball/model/domain/PlayerNumbers.java @@ -0,0 +1,9 @@ +package baseball.model.domain; + +public class PlayerNumbers { + private final GameNumbers playerNumbers; + + public PlayerNumbers(String input) { + this.playerNumbers = new GameNumbers(input); + } +} From f9fea8d6e73d77016d02dc7597b5d4dfe30f0969 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 00:32:23 +0900 Subject: [PATCH 28/35] =?UTF-8?q?refactor(domain):=20createRandomNumbers?= =?UTF-8?q?=20->=20printComputerNumbers=20=EB=A9=94=EC=84=9C=EB=93=9C=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/main/java/baseball/model/domain/ComputerNumbers.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/model/domain/ComputerNumbers.java b/src/main/java/baseball/model/domain/ComputerNumbers.java index 6b0319c..a82eda2 100644 --- a/src/main/java/baseball/model/domain/ComputerNumbers.java +++ b/src/main/java/baseball/model/domain/ComputerNumbers.java @@ -2,19 +2,17 @@ import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; public class ComputerNumbers { private final GameNumbers computerNumbers; public ComputerNumbers() { - this.computerNumbers = createRandomNumbers(); + this.computerNumbers = createComputerNumbers(); } - public static GameNumbers createRandomNumbers() { + public static GameNumbers createComputerNumbers() { Set randomNumbers = new HashSet<>(); while (randomNumbers.size() < 3) { int randomNumber = pickNumberInRange(1, 9); From 2f64bfe84c1a3bcb323ae5bb485f26fa045c6e1c Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 00:34:22 +0900 Subject: [PATCH 29/35] =?UTF-8?q?refactor(controller):=20GameComputer=20->?= =?UTF-8?q?=20GameController=20=ED=81=B4=EB=9E=98=EC=8A=A4=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 --- src/main/java/baseball/Application.java | 6 +++--- src/main/java/baseball/common/constant/Constants.java | 7 +++++++ src/main/java/baseball/config/GameConfig.java | 10 +++++----- .../{GameComputer.java => GameController.java} | 4 ++-- 4 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 src/main/java/baseball/common/constant/Constants.java rename src/main/java/baseball/controller/{GameComputer.java => GameController.java} (90%) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 5dccf83..63d8aee 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,13 +1,13 @@ package baseball; import baseball.config.GameConfig; -import baseball.controller.GameComputer; +import baseball.controller.GameController; public class Application { public static void main(String[] args) { GameConfig gameConfig = new GameConfig(); - GameComputer gameComputer = gameConfig.getGameComputer(); + GameController gameController = gameConfig.getGameComputer(); - gameComputer.start(); + gameController.start(); } } \ No newline at end of file diff --git a/src/main/java/baseball/common/constant/Constants.java b/src/main/java/baseball/common/constant/Constants.java new file mode 100644 index 0000000..4a45285 --- /dev/null +++ b/src/main/java/baseball/common/constant/Constants.java @@ -0,0 +1,7 @@ +package baseball.common.constant; + +public class Constants { + + public final static String WHITE_SPACE = " "; + +} diff --git a/src/main/java/baseball/config/GameConfig.java b/src/main/java/baseball/config/GameConfig.java index c2f81cb..e7e3963 100644 --- a/src/main/java/baseball/config/GameConfig.java +++ b/src/main/java/baseball/config/GameConfig.java @@ -1,6 +1,6 @@ package baseball.config; -import baseball.controller.GameComputer; +import baseball.controller.GameController; import baseball.view.InputView; import baseball.view.OutputView; @@ -8,13 +8,13 @@ public class GameConfig { private final InputView inputView = new InputView(); private final OutputView outputView = new OutputView(); - private final GameComputer gameComputer; + private final GameController gameController; public GameConfig() { - this.gameComputer = new GameComputer(inputView, outputView); + this.gameController = new GameController(inputView, outputView); } - public GameComputer getGameComputer() { - return gameComputer; + public GameController getGameComputer() { + return gameController; } } diff --git a/src/main/java/baseball/controller/GameComputer.java b/src/main/java/baseball/controller/GameController.java similarity index 90% rename from src/main/java/baseball/controller/GameComputer.java rename to src/main/java/baseball/controller/GameController.java index c209d8a..80b7266 100644 --- a/src/main/java/baseball/controller/GameComputer.java +++ b/src/main/java/baseball/controller/GameController.java @@ -4,11 +4,11 @@ import baseball.view.InputView; import baseball.view.OutputView; -public class GameComputer { +public class GameController { private final InputView inputView; private final OutputView outputView; - public GameComputer(InputView inputView, OutputView outputView) { + public GameController(InputView inputView, OutputView outputView) { this.inputView = inputView; this.outputView = outputView; } From 024f59e3d0a5494d7967091a90699fe64a60c5fb Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 01:05:02 +0900 Subject: [PATCH 30/35] =?UTF-8?q?feat(controller):=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EB=90=9C=20=EC=88=AB=EC=9E=90=EC=99=80=20=EC=BB=B4=ED=93=A8?= =?UTF-8?q?=ED=84=B0=20=EC=88=AB=EC=9E=90=20=EB=B9=84=EA=B5=90=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/controller/GameController.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/controller/GameController.java b/src/main/java/baseball/controller/GameController.java index 80b7266..e6f2f53 100644 --- a/src/main/java/baseball/controller/GameController.java +++ b/src/main/java/baseball/controller/GameController.java @@ -1,16 +1,21 @@ package baseball.controller; +import baseball.model.domain.ComputerNumbers; import baseball.model.domain.GameMenu; +import baseball.model.domain.GameNumbers; +import baseball.model.domain.PlayerNumbers; import baseball.view.InputView; import baseball.view.OutputView; public class GameController { private final InputView inputView; private final OutputView outputView; + private final GameNumbers gameNumbers; - public GameController(InputView inputView, OutputView outputView) { + public GameController(InputView inputView, OutputView outputView, GameNumbers gameNumbers) { this.inputView = inputView; this.outputView = outputView; + this.gameNumbers = gameNumbers; } public void start() { @@ -24,9 +29,11 @@ public void start() { } private void play() { - boolean isFinish = true; - while (isFinish) { - String input = input(); + boolean isFinish = false; + ComputerNumbers computerNumbers = new ComputerNumbers(); + while (!isFinish) { + PlayerNumbers playerNumbers = new PlayerNumbers(input()); + String result = gameNumbers.calculateResult(computerNumbers, playerNumbers); } finish(); } From 3eb1df73e8549f62551e06160ad35ca9559a2b4a Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 02:55:10 +0900 Subject: [PATCH 31/35] =?UTF-8?q?refactor(domain):=20=EC=98=A4=EB=B2=84=20?= =?UTF-8?q?=EC=97=94=EC=A7=80=EB=8B=88=EC=96=B4=EB=A7=81=20=EB=B0=A9?= =?UTF-8?q?=EC=A7=80=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=9D=91=EC=A7=91=20=EB=B0=8F=20=ED=81=B4=EB=9E=98=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 --- .../model/domain/ComputerNumbers.java | 40 +++++++++++--- .../baseball/model/domain/GameNumber.java | 51 ------------------ .../baseball/model/domain/GameNumbers.java | 52 ------------------- .../baseball/model/domain/PlayerNumbers.java | 51 +++++++++++++++++- .../java/baseball/model/domain/Result.java | 35 +++++++++++++ 5 files changed, 116 insertions(+), 113 deletions(-) delete mode 100644 src/main/java/baseball/model/domain/GameNumber.java delete mode 100644 src/main/java/baseball/model/domain/GameNumbers.java create mode 100644 src/main/java/baseball/model/domain/Result.java diff --git a/src/main/java/baseball/model/domain/ComputerNumbers.java b/src/main/java/baseball/model/domain/ComputerNumbers.java index a82eda2..7a8b67d 100644 --- a/src/main/java/baseball/model/domain/ComputerNumbers.java +++ b/src/main/java/baseball/model/domain/ComputerNumbers.java @@ -1,23 +1,47 @@ package baseball.model.domain; -import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; - +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; +import static baseball.common.constant.Constants.MAX_NUMBER; +import static baseball.common.constant.Constants.MIN_NUMBER; +import static baseball.common.constant.Constants.NUMBERS_SIZE; +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; + public class ComputerNumbers { - private final GameNumbers computerNumbers; + private final List computerNumbers; public ComputerNumbers() { - this.computerNumbers = createComputerNumbers(); + this.computerNumbers = createRandomNumbers(); } - public static GameNumbers createComputerNumbers() { + private List createRandomNumbers() { Set randomNumbers = new HashSet<>(); - while (randomNumbers.size() < 3) { - int randomNumber = pickNumberInRange(1, 9); + while (randomNumbers.size() < NUMBERS_SIZE) { + int randomNumber = pickNumberInRange(MIN_NUMBER, MAX_NUMBER); randomNumbers.add(randomNumber); } - return new GameNumbers(randomNumbers); + return new ArrayList<>(randomNumbers); + } + + public Result compare(PlayerNumbers player) { + int strikes = 0; + int balls = 0; + + List playerNumbers = player.getPlayerNumbers(); + + for (int i = 0; i < NUMBERS_SIZE; i++) { + boolean isStrike = computerNumbers.get(i).equals(playerNumbers.get(i)); + boolean isBall = !isStrike&&computerNumbers.contains(playerNumbers.get(i)); + if (isStrike) { + strikes++; + } + if (isBall) { + balls++; + } + } + return new Result(strikes, balls); } } diff --git a/src/main/java/baseball/model/domain/GameNumber.java b/src/main/java/baseball/model/domain/GameNumber.java deleted file mode 100644 index 55a365c..0000000 --- a/src/main/java/baseball/model/domain/GameNumber.java +++ /dev/null @@ -1,51 +0,0 @@ -package baseball.model.domain; - -public class GameNumber { - private final int number; - - public GameNumber(String input) { - this.number = parse(input); - } - - public GameNumber(int number) { - this.number = number; - } - - private int parse(String input) { - try { - int number = Integer.parseInt(input); - validate(number); - return number; - } catch (NumberFormatException e) { - throw new IllegalArgumentException("입력값은 숫자여야 합니다."); - } - } - - private int validate(int number) { - if (number < 1 || number > 9) { - throw new IllegalArgumentException("숫자는 1에서 9까지의 수만 허용됩니다."); - } - return number; - } - - public int getNumber() { - return number; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - GameNumber number = (GameNumber) o; - return this.number == number.number; - } - - @Override - public int hashCode() { - return Integer.hashCode(number); - } -} diff --git a/src/main/java/baseball/model/domain/GameNumbers.java b/src/main/java/baseball/model/domain/GameNumbers.java deleted file mode 100644 index 8034a1f..0000000 --- a/src/main/java/baseball/model/domain/GameNumbers.java +++ /dev/null @@ -1,52 +0,0 @@ -package baseball.model.domain; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -public class GameNumbers { - private final List gameNumbers; - - public GameNumbers(String input) { - this.gameNumbers = parse(input); - } - - public GameNumbers(Set randomNumbers) { - this.gameNumbers = parse(randomNumbers); - } - - private List parse(String input) { - List items = List.of(input.split("")); - List gameNumbers = new ArrayList<>(); - for (String item : items) { - GameNumber gameNumber = new GameNumber(item); - gameNumbers.add(gameNumber); - } - validate(gameNumbers); - return gameNumbers; - } - - private List parse(Set randomNumbers) { - List gameNumbers = new ArrayList<>(); - for (int number : randomNumbers) { - GameNumber gameNumber = new GameNumber(number); - gameNumbers.add(gameNumber); - } - validate(gameNumbers); - return gameNumbers; - } - - private void validate(List gameNumbers) { - if (gameNumbers.size() != 3) { - throw new IllegalArgumentException("숫자 3자리를 입력해야 합니다."); - } - int uniqueCount = gameNumbers.stream() - .map(GameNumber::getNumber) - .collect(Collectors.toSet()) - .size(); - if (uniqueCount != 3) { - throw new IllegalArgumentException("중복된 숫자는 허용되지 않습니다."); - } - } -} diff --git a/src/main/java/baseball/model/domain/PlayerNumbers.java b/src/main/java/baseball/model/domain/PlayerNumbers.java index 6a23978..9dad2c1 100644 --- a/src/main/java/baseball/model/domain/PlayerNumbers.java +++ b/src/main/java/baseball/model/domain/PlayerNumbers.java @@ -1,9 +1,56 @@ package baseball.model.domain; +import java.util.ArrayList; +import java.util.List; + public class PlayerNumbers { - private final GameNumbers playerNumbers; + private final List playerNumbers; public PlayerNumbers(String input) { - this.playerNumbers = new GameNumbers(input); + this.playerNumbers = parse(input); + } + + private List parse(String input) { + List items = List.of(input.split("")); + List numbers = new ArrayList<>(); + for (String item : items) { + int number = parseNumber(item); + numbers.add(number); + } + validateNumbers(numbers); + return numbers; + } + + private int parseNumber(String input) { + try { + int number = Integer.parseInt(input); + validateNumber(number); + return number; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("입력값은 숫자여야 합니다."); + } + } + + private int validateNumber(int number) { + if (number < 1 || number > 9) { + throw new IllegalArgumentException("숫자는 1에서 9까지의 수만 허용됩니다."); + } + return number; + } + + private void validateNumbers(List numbers) { + if (numbers.size() != 3) { + throw new IllegalArgumentException("숫자 3자리를 입력해야 합니다."); + } + int uniqueCount = (int) numbers.stream() + .distinct() + .count(); + if (uniqueCount != 3) { + throw new IllegalArgumentException("중복된 숫자는 허용되지 않습니다."); + } + } + + public List getPlayerNumbers() { + return playerNumbers; } } diff --git a/src/main/java/baseball/model/domain/Result.java b/src/main/java/baseball/model/domain/Result.java new file mode 100644 index 0000000..4ffe91d --- /dev/null +++ b/src/main/java/baseball/model/domain/Result.java @@ -0,0 +1,35 @@ +package baseball.model.domain; + +import static baseball.common.constant.Constants.BALL; +import static baseball.common.constant.Constants.NOTHING; +import static baseball.common.constant.Constants.STRIKE; +import static baseball.common.constant.Constants.WHITE_SPACE; + +public class Result { + private final int strikes; + private final int balls; + + public Result(int strikes, int balls) { + this.strikes = strikes; + this.balls = balls; + } + + public boolean isCorrect() { + return strikes == 3; + } + + @Override + public String toString() { + if (strikes == 0 && balls == 0) { + return NOTHING; + } + StringBuilder result = new StringBuilder(); + if (balls > 0) { + result.append(BALL.formatted(balls)).append(WHITE_SPACE); + } + if (strikes > 0) { + result.append(STRIKE.formatted(strikes)); + } + return result.toString().trim(); + } +} From 1232aada48a6d170067e6cb8978fae08bd256330 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 02:56:28 +0900 Subject: [PATCH 32/35] =?UTF-8?q?feat(constant):=20=EC=83=81=EC=88=98=20?= =?UTF-8?q?=EA=B0=92=20=EA=B4=80=EB=A6=AC=EB=A5=BC=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20Constants=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/baseball/common/constant/Constants.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/common/constant/Constants.java b/src/main/java/baseball/common/constant/Constants.java index 4a45285..6bd1126 100644 --- a/src/main/java/baseball/common/constant/Constants.java +++ b/src/main/java/baseball/common/constant/Constants.java @@ -1,7 +1,13 @@ package baseball.common.constant; public class Constants { + public final static int MIN_NUMBER = 1; + public final static int MAX_NUMBER = 9; + public final static int NUMBERS_SIZE = 3; - public final static String WHITE_SPACE = " "; + public final static String WHITE_SPACE = " "; + public final static String STRIKE = "%d스트라이커"; + public final static String BALL = "%d볼"; + public final static String NOTHING = "낫싱"; } From ba53a048491fc25d02fb17108e63e91af8c8ca17 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 03:18:22 +0900 Subject: [PATCH 33/35] =?UTF-8?q?feat(controller):=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B2=98=EB=A6=AC=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20error=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 --- .../baseball/controller/GameController.java | 42 ++++++++++++------- src/main/java/baseball/view/OutputView.java | 6 ++- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/main/java/baseball/controller/GameController.java b/src/main/java/baseball/controller/GameController.java index e6f2f53..b214210 100644 --- a/src/main/java/baseball/controller/GameController.java +++ b/src/main/java/baseball/controller/GameController.java @@ -2,45 +2,57 @@ import baseball.model.domain.ComputerNumbers; import baseball.model.domain.GameMenu; -import baseball.model.domain.GameNumbers; import baseball.model.domain.PlayerNumbers; +import baseball.model.domain.Result; import baseball.view.InputView; import baseball.view.OutputView; public class GameController { private final InputView inputView; private final OutputView outputView; - private final GameNumbers gameNumbers; - public GameController(InputView inputView, OutputView outputView, GameNumbers gameNumbers) { + public GameController(InputView inputView, OutputView outputView) { this.inputView = inputView; this.outputView = outputView; - this.gameNumbers = gameNumbers; } public void start() { - boolean isContinue = true; - outputView.printStartMessage(); - while (isContinue) { - play(); - isContinue = restart(); + try { + boolean isContinue = true; + outputView.printStartMessage(); + while (isContinue) { + play(); + isContinue = restart(); + } + } catch (IllegalArgumentException e) { + outputView.printErrorMessage(e.getMessage()); } - } private void play() { boolean isFinish = false; - ComputerNumbers computerNumbers = new ComputerNumbers(); + ComputerNumbers computerNumbers = init(); while (!isFinish) { - PlayerNumbers playerNumbers = new PlayerNumbers(input()); - String result = gameNumbers.calculateResult(computerNumbers, playerNumbers); + PlayerNumbers playerNumbers = input(); + isFinish = result(computerNumbers, playerNumbers); } finish(); } - private String input() { + private ComputerNumbers init() { + return new ComputerNumbers(); + } + + private PlayerNumbers input() { outputView.printNumberPrompt(); - return inputView.getNumber(); + String input = inputView.getNumber(); + return new PlayerNumbers(input); + } + + private boolean result(ComputerNumbers computerNumbers, PlayerNumbers playerNumbers) { + Result result = computerNumbers.compare(playerNumbers); + outputView.printResultMessage(result.toString()); + return result.isCorrect(); } private boolean restart() { diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index 399ca51..d571941 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -11,6 +11,10 @@ public void printNumberPrompt() { System.out.print("숫자를 입력해주세요 : "); } + public void printResultMessage(String message) { + System.out.println(message); + } + public void printFinishMessage() { System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } @@ -19,7 +23,7 @@ public void printRestartPrompt() { System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); } - public void printError(String message) { + public void printErrorMessage(String message) { System.out.println(ERROR.formatted(message)); } From 1b60c7bbaf42eaeed2ae80bcf8bb80ddf396abf4 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 03:41:04 +0900 Subject: [PATCH 34/35] =?UTF-8?q?fix(constant):=20=EC=83=81=EC=88=98?= =?UTF-8?q?=EA=B0=92=20=EC=88=98=EC=A0=95=20'=EC=8A=A4=ED=8A=B8=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EC=BB=A4'=20->=20'=EC=8A=A4=ED=8A=B8=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=ED=81=AC'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/common/constant/Constants.java | 2 +- src/main/java/baseball/controller/GameController.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/common/constant/Constants.java b/src/main/java/baseball/common/constant/Constants.java index 6bd1126..5833982 100644 --- a/src/main/java/baseball/common/constant/Constants.java +++ b/src/main/java/baseball/common/constant/Constants.java @@ -7,7 +7,7 @@ public class Constants { public final static String WHITE_SPACE = " "; - public final static String STRIKE = "%d스트라이커"; + public final static String STRIKE = "%d스트라이크"; public final static String BALL = "%d볼"; public final static String NOTHING = "낫싱"; } diff --git a/src/main/java/baseball/controller/GameController.java b/src/main/java/baseball/controller/GameController.java index b214210..ae8b4af 100644 --- a/src/main/java/baseball/controller/GameController.java +++ b/src/main/java/baseball/controller/GameController.java @@ -25,7 +25,8 @@ public void start() { isContinue = restart(); } } catch (IllegalArgumentException e) { - outputView.printErrorMessage(e.getMessage()); +// outputView.printErrorMessage(e.getMessage()); + throw new IllegalArgumentException(e.getMessage()); } } From a3cbd6956ca8f85243609b07aa3e876c1937c441 Mon Sep 17 00:00:00 2001 From: 023-dev <0_2_3@naver.com> Date: Tue, 19 Nov 2024 04:04:54 +0900 Subject: [PATCH 35/35] =?UTF-8?q?style:=20=EC=BD=94=EB=93=9C=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=AC=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/common/constant/Constants.java | 1 - src/main/java/baseball/controller/GameController.java | 3 +-- src/main/java/baseball/model/domain/ComputerNumbers.java | 2 +- src/main/java/baseball/model/domain/GameMenu.java | 8 ++++---- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/baseball/common/constant/Constants.java b/src/main/java/baseball/common/constant/Constants.java index 5833982..12f8a74 100644 --- a/src/main/java/baseball/common/constant/Constants.java +++ b/src/main/java/baseball/common/constant/Constants.java @@ -5,7 +5,6 @@ public class Constants { public final static int MAX_NUMBER = 9; public final static int NUMBERS_SIZE = 3; - public final static String WHITE_SPACE = " "; public final static String STRIKE = "%d스트라이크"; public final static String BALL = "%d볼"; diff --git a/src/main/java/baseball/controller/GameController.java b/src/main/java/baseball/controller/GameController.java index ae8b4af..6779cc3 100644 --- a/src/main/java/baseball/controller/GameController.java +++ b/src/main/java/baseball/controller/GameController.java @@ -25,7 +25,6 @@ public void start() { isContinue = restart(); } } catch (IllegalArgumentException e) { -// outputView.printErrorMessage(e.getMessage()); throw new IllegalArgumentException(e.getMessage()); } } @@ -34,7 +33,7 @@ private void play() { boolean isFinish = false; ComputerNumbers computerNumbers = init(); while (!isFinish) { - PlayerNumbers playerNumbers = input(); + PlayerNumbers playerNumbers = input(); isFinish = result(computerNumbers, playerNumbers); } finish(); diff --git a/src/main/java/baseball/model/domain/ComputerNumbers.java b/src/main/java/baseball/model/domain/ComputerNumbers.java index 7a8b67d..c467ac6 100644 --- a/src/main/java/baseball/model/domain/ComputerNumbers.java +++ b/src/main/java/baseball/model/domain/ComputerNumbers.java @@ -34,7 +34,7 @@ public Result compare(PlayerNumbers player) { for (int i = 0; i < NUMBERS_SIZE; i++) { boolean isStrike = computerNumbers.get(i).equals(playerNumbers.get(i)); - boolean isBall = !isStrike&&computerNumbers.contains(playerNumbers.get(i)); + boolean isBall = !isStrike && computerNumbers.contains(playerNumbers.get(i)); if (isStrike) { strikes++; } diff --git a/src/main/java/baseball/model/domain/GameMenu.java b/src/main/java/baseball/model/domain/GameMenu.java index 0b4c864..fe1ca1c 100644 --- a/src/main/java/baseball/model/domain/GameMenu.java +++ b/src/main/java/baseball/model/domain/GameMenu.java @@ -14,10 +14,6 @@ public enum GameMenu { this.countinue = countinue; } - private boolean isCountinue() { - return countinue; - } - public static boolean from(String input) { return Arrays.stream(GameMenu.values()) .filter(menu -> menu.code.equals(input)) @@ -25,4 +21,8 @@ public static boolean from(String input) { .map(GameMenu::isCountinue) .orElseThrow(() -> new IllegalArgumentException("잘못된 메뉴 선택입니다.")); } + + private boolean isCountinue() { + return countinue; + } } \ No newline at end of file