From 0ca66e80574b61813b302beaae0c497a855efe84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Fri, 11 Aug 2023 02:51:05 +0900 Subject: [PATCH 01/34] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29bb2d..eaad4f01a7d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,25 @@ +## 다리 건너기 기능 구현 목록 + +**입력 & 출력** +- [ ] 게임 시작 안내 출력 +- [ ] 다리 길이 입력 (3 ~ 20사이 숫자) +- [ ] 이동할 칸 입력 (U / D) +- [ ] 재시도 입력 (R / Q) + +**다리 생성** +- [ ] 입력한 다리 길이만큼 다리 생성 +- [ ] 0(아래), 1(위)형식으로 다리 요소 랜덤 생성 +- [ ] 0➝D / 1➝U 변환 + +**게임 진행** +- 생성된 다리와 사용자의 입력 비교 + - [ ] 이동 가능한 경우 계속 진행 + - [ ] 이동 불가능한 경우 재시작 / 종료 +- [ ] 재시작하는 경우 시도 횟수 증가 + +**결과 출력** +- 다리 출력 + - [ ] `[`로 시작, `]`로 끝, 구분자는 `|` + - [ ] 이동 가능한 경우 O / 불가능한 경우 X 출력 +- [ ] 게임 성공 여부 +- [ ] 총 시도 횟수 \ No newline at end of file From 5841a6ad969c88d9e52144fbfac8ee44d75a13c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Fri, 11 Aug 2023 03:02:39 +0900 Subject: [PATCH 02/34] =?UTF-8?q?feat(OutputView):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=95=88=EB=82=B4=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/bridge/Application.java | 6 +++++- .../bridge/controller/BridgeController.java | 16 ++++++++++++++++ src/main/java/bridge/view/OutputMessage.java | 17 +++++++++++++++++ src/main/java/bridge/{ => view}/OutputView.java | 6 +++++- 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 src/main/java/bridge/controller/BridgeController.java create mode 100644 src/main/java/bridge/view/OutputMessage.java rename src/main/java/bridge/{ => view}/OutputView.java (84%) diff --git a/docs/README.md b/docs/README.md index eaad4f01a7d..d3ff1a7ee4d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,7 +1,7 @@ ## 다리 건너기 기능 구현 목록 **입력 & 출력** -- [ ] 게임 시작 안내 출력 +- [x] 게임 시작 안내 출력 - [ ] 다리 길이 입력 (3 ~ 20사이 숫자) - [ ] 이동할 칸 입력 (U / D) - [ ] 재시도 입력 (R / Q) diff --git a/src/main/java/bridge/Application.java b/src/main/java/bridge/Application.java index 5cb72dfd3de..f65d2b2dfe9 100644 --- a/src/main/java/bridge/Application.java +++ b/src/main/java/bridge/Application.java @@ -1,8 +1,12 @@ package bridge; +import bridge.controller.BridgeController; +import bridge.view.OutputView; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + BridgeController bridgeController = new BridgeController(new OutputView()); + bridgeController.start(); } } diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java new file mode 100644 index 00000000000..61cab98edd6 --- /dev/null +++ b/src/main/java/bridge/controller/BridgeController.java @@ -0,0 +1,16 @@ +package bridge.controller; + +import bridge.view.OutputView; + +public class BridgeController { + + private final OutputView outputView; + + public BridgeController(OutputView outputView) { + this.outputView = outputView; + } + + public void start() { + outputView.printGameStart(); + } +} diff --git a/src/main/java/bridge/view/OutputMessage.java b/src/main/java/bridge/view/OutputMessage.java new file mode 100644 index 00000000000..fd67433e0e3 --- /dev/null +++ b/src/main/java/bridge/view/OutputMessage.java @@ -0,0 +1,17 @@ +package bridge.view; + +public enum OutputMessage { + + START_MESSAGE("다리 건너기 게임을 시작합니다."); + + private final String message; + + OutputMessage(String message) { + this.message = message; + } + + @Override + public String toString() { + return this.message; + } +} \ No newline at end of file diff --git a/src/main/java/bridge/OutputView.java b/src/main/java/bridge/view/OutputView.java similarity index 84% rename from src/main/java/bridge/OutputView.java rename to src/main/java/bridge/view/OutputView.java index 69a433a6285..fcdd7a40214 100644 --- a/src/main/java/bridge/OutputView.java +++ b/src/main/java/bridge/view/OutputView.java @@ -1,4 +1,4 @@ -package bridge; +package bridge.view; /** * 사용자에게 게임 진행 상황과 결과를 출력하는 역할을 한다. @@ -20,4 +20,8 @@ public void printMap() { */ public void printResult() { } + + public void printGameStart() { + System.out.println(OutputMessage.START_MESSAGE); + } } From e10aa33d39e2e8628aa904fe7674b5f397dcff6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Fri, 11 Aug 2023 03:11:15 +0900 Subject: [PATCH 03/34] =?UTF-8?q?feat(InputView):=20=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EA=B8=B8=EC=9D=B4=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/bridge/Application.java | 3 ++- src/main/java/bridge/controller/BridgeController.java | 6 +++++- src/main/java/bridge/{ => view}/InputView.java | 10 ++++++++-- src/main/java/bridge/view/OutputMessage.java | 3 ++- src/main/java/bridge/view/OutputView.java | 4 ++++ 6 files changed, 22 insertions(+), 6 deletions(-) rename src/main/java/bridge/{ => view}/InputView.java (65%) diff --git a/docs/README.md b/docs/README.md index d3ff1a7ee4d..e6bd5efed0c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,7 +2,7 @@ **입력 & 출력** - [x] 게임 시작 안내 출력 -- [ ] 다리 길이 입력 (3 ~ 20사이 숫자) +- [x] 다리 길이 입력 (3 ~ 20사이 숫자) - [ ] 이동할 칸 입력 (U / D) - [ ] 재시도 입력 (R / Q) diff --git a/src/main/java/bridge/Application.java b/src/main/java/bridge/Application.java index f65d2b2dfe9..fe1a8545862 100644 --- a/src/main/java/bridge/Application.java +++ b/src/main/java/bridge/Application.java @@ -1,12 +1,13 @@ package bridge; import bridge.controller.BridgeController; +import bridge.view.InputView; import bridge.view.OutputView; public class Application { public static void main(String[] args) { - BridgeController bridgeController = new BridgeController(new OutputView()); + BridgeController bridgeController = new BridgeController(new OutputView(), new InputView()); bridgeController.start(); } } diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index 61cab98edd6..c86a0cb52bb 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -1,16 +1,20 @@ package bridge.controller; +import bridge.view.InputView; import bridge.view.OutputView; public class BridgeController { private final OutputView outputView; + private final InputView inputView; - public BridgeController(OutputView outputView) { + public BridgeController(OutputView outputView, InputView inputView) { this.outputView = outputView; + this.inputView = inputView; } public void start() { outputView.printGameStart(); + inputView.readBridgeSize(); } } diff --git a/src/main/java/bridge/InputView.java b/src/main/java/bridge/view/InputView.java similarity index 65% rename from src/main/java/bridge/InputView.java rename to src/main/java/bridge/view/InputView.java index c3911c8a8e7..ea218f7a1ea 100644 --- a/src/main/java/bridge/InputView.java +++ b/src/main/java/bridge/view/InputView.java @@ -1,15 +1,21 @@ -package bridge; +package bridge.view; + +import camp.nextstep.edu.missionutils.Console; /** * 사용자로부터 입력을 받는 역할을 한다. */ public class InputView { + private final OutputView outputView = new OutputView(); + /** * 다리의 길이를 입력받는다. */ public int readBridgeSize() { - return 0; + outputView.printLengthMessage(); + String userInput = Console.readLine(); + return Integer.parseInt(userInput); } /** diff --git a/src/main/java/bridge/view/OutputMessage.java b/src/main/java/bridge/view/OutputMessage.java index fd67433e0e3..bc94642a006 100644 --- a/src/main/java/bridge/view/OutputMessage.java +++ b/src/main/java/bridge/view/OutputMessage.java @@ -2,7 +2,8 @@ public enum OutputMessage { - START_MESSAGE("다리 건너기 게임을 시작합니다."); + START_MESSAGE("다리 건너기 게임을 시작합니다."), + LENGTH_MESSAGE("다리의 길이를 입력해주세요."); private final String message; diff --git a/src/main/java/bridge/view/OutputView.java b/src/main/java/bridge/view/OutputView.java index fcdd7a40214..bbaed0787fe 100644 --- a/src/main/java/bridge/view/OutputView.java +++ b/src/main/java/bridge/view/OutputView.java @@ -24,4 +24,8 @@ public void printResult() { public void printGameStart() { System.out.println(OutputMessage.START_MESSAGE); } + + public void printLengthMessage() { + System.out.println(OutputMessage.LENGTH_MESSAGE); + } } From 92bb8c287201a5e04e1bc8ae20c4f57fd4d195e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Fri, 11 Aug 2023 03:22:30 +0900 Subject: [PATCH 04/34] =?UTF-8?q?feat(InputView):=20=EC=9D=B4=EB=8F=99?= =?UTF-8?q?=ED=95=A0=20=EC=B9=B8=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5?= =?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 --- docs/README.md | 2 +- src/main/java/bridge/controller/BridgeController.java | 1 + src/main/java/bridge/view/InputView.java | 3 ++- src/main/java/bridge/view/OutputMessage.java | 3 ++- src/main/java/bridge/view/OutputView.java | 3 +++ 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index e6bd5efed0c..cf22afc541f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,7 +3,7 @@ **입력 & 출력** - [x] 게임 시작 안내 출력 - [x] 다리 길이 입력 (3 ~ 20사이 숫자) -- [ ] 이동할 칸 입력 (U / D) +- [x] 이동할 칸 입력 (U / D) - [ ] 재시도 입력 (R / Q) **다리 생성** diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index c86a0cb52bb..cab59343245 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -16,5 +16,6 @@ public BridgeController(OutputView outputView, InputView inputView) { public void start() { outputView.printGameStart(); inputView.readBridgeSize(); + inputView.readMoving(); } } diff --git a/src/main/java/bridge/view/InputView.java b/src/main/java/bridge/view/InputView.java index ea218f7a1ea..a6dfa7f3b82 100644 --- a/src/main/java/bridge/view/InputView.java +++ b/src/main/java/bridge/view/InputView.java @@ -22,7 +22,8 @@ public int readBridgeSize() { * 사용자가 이동할 칸을 입력받는다. */ public String readMoving() { - return null; + outputView.printMoveLocation(); + return Console.readLine(); } /** diff --git a/src/main/java/bridge/view/OutputMessage.java b/src/main/java/bridge/view/OutputMessage.java index bc94642a006..c31ed3a4f45 100644 --- a/src/main/java/bridge/view/OutputMessage.java +++ b/src/main/java/bridge/view/OutputMessage.java @@ -3,7 +3,8 @@ public enum OutputMessage { START_MESSAGE("다리 건너기 게임을 시작합니다."), - LENGTH_MESSAGE("다리의 길이를 입력해주세요."); + LENGTH_MESSAGE("다리의 길이를 입력해주세요."), + MOVE_LOCATION("이동할 칸을 선택해주세요. (위: U, 아래: D)"); private final String message; diff --git a/src/main/java/bridge/view/OutputView.java b/src/main/java/bridge/view/OutputView.java index bbaed0787fe..40965323bea 100644 --- a/src/main/java/bridge/view/OutputView.java +++ b/src/main/java/bridge/view/OutputView.java @@ -28,4 +28,7 @@ public void printGameStart() { public void printLengthMessage() { System.out.println(OutputMessage.LENGTH_MESSAGE); } + public void printMoveLocation() { + System.out.println(OutputMessage.MOVE_LOCATION); + } } From 84245bdaf7ae5bef73fcd41f3db165c2ed5e979d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Fri, 11 Aug 2023 03:35:23 +0900 Subject: [PATCH 05/34] =?UTF-8?q?feat(BridgeMaker):=20=EB=8B=A4=EB=A6=AC?= =?UTF-8?q?=20=EC=9A=94=EC=86=8C=20=EB=9E=9C=EB=8D=A4=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 +++--- src/main/java/bridge/BridgeMaker.java | 7 ++++++- src/main/java/bridge/controller/BridgeController.java | 5 ++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/README.md b/docs/README.md index cf22afc541f..adcd013f702 100644 --- a/docs/README.md +++ b/docs/README.md @@ -7,9 +7,9 @@ - [ ] 재시도 입력 (R / Q) **다리 생성** -- [ ] 입력한 다리 길이만큼 다리 생성 -- [ ] 0(아래), 1(위)형식으로 다리 요소 랜덤 생성 -- [ ] 0➝D / 1➝U 변환 +- 입력한 다리 길이만큼 다리 생성 + - [x] 0(아래), 1(위)형식으로 다리 요소 랜덤 생성 + - [ ] 0➝D / 1➝U 변환 **게임 진행** - 생성된 다리와 사용자의 입력 비교 diff --git a/src/main/java/bridge/BridgeMaker.java b/src/main/java/bridge/BridgeMaker.java index 27e9f2cfa7f..d0f49a972d0 100644 --- a/src/main/java/bridge/BridgeMaker.java +++ b/src/main/java/bridge/BridgeMaker.java @@ -1,5 +1,6 @@ package bridge; +import java.util.ArrayList; import java.util.List; /** @@ -18,6 +19,10 @@ public BridgeMaker(BridgeNumberGenerator bridgeNumberGenerator) { * @return 입력받은 길이에 해당하는 다리 모양. 위 칸이면 "U", 아래 칸이면 "D"로 표현해야 한다. */ public List makeBridge(int size) { - return null; + List bridge = new ArrayList<>(); + while (bridge.size() != size) { + bridge.add(String.valueOf(bridgeNumberGenerator.generate())); + } + return bridge; } } diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index cab59343245..99fbd898302 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -1,5 +1,7 @@ package bridge.controller; +import bridge.BridgeMaker; +import bridge.BridgeRandomNumberGenerator; import bridge.view.InputView; import bridge.view.OutputView; @@ -15,7 +17,8 @@ public BridgeController(OutputView outputView, InputView inputView) { public void start() { outputView.printGameStart(); - inputView.readBridgeSize(); + BridgeMaker bridgeMaker = new BridgeMaker(new BridgeRandomNumberGenerator()); + bridgeMaker.makeBridge(inputView.readBridgeSize()); inputView.readMoving(); } } From a982a4169c0c6eac1d6f99aa309db44adee1d20f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Fri, 11 Aug 2023 03:51:11 +0900 Subject: [PATCH 06/34] =?UTF-8?q?feat(BridgeMaker):=20=EB=8B=A4=EB=A6=AC?= =?UTF-8?q?=20=EB=9E=9C=EB=8D=A4=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=E2=9E=9D=EB=AC=B8=EC=9E=90=20=EB=B3=80?= =?UTF-8?q?=ED=99=98=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/bridge/BridgeMaker.java | 4 +++- src/main/java/bridge/model/Constant.java | 18 ++++++++++++++++++ .../java/bridge/model/LocationConverter.java | 13 +++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/main/java/bridge/model/Constant.java create mode 100644 src/main/java/bridge/model/LocationConverter.java diff --git a/docs/README.md b/docs/README.md index adcd013f702..2f8dedc0296 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,7 +9,7 @@ **다리 생성** - 입력한 다리 길이만큼 다리 생성 - [x] 0(아래), 1(위)형식으로 다리 요소 랜덤 생성 - - [ ] 0➝D / 1➝U 변환 + - [x] 0➝D / 1➝U 변환 **게임 진행** - 생성된 다리와 사용자의 입력 비교 diff --git a/src/main/java/bridge/BridgeMaker.java b/src/main/java/bridge/BridgeMaker.java index d0f49a972d0..e71a24c2b61 100644 --- a/src/main/java/bridge/BridgeMaker.java +++ b/src/main/java/bridge/BridgeMaker.java @@ -1,5 +1,7 @@ package bridge; +import bridge.model.LocationConverter; + import java.util.ArrayList; import java.util.List; @@ -21,7 +23,7 @@ public BridgeMaker(BridgeNumberGenerator bridgeNumberGenerator) { public List makeBridge(int size) { List bridge = new ArrayList<>(); while (bridge.size() != size) { - bridge.add(String.valueOf(bridgeNumberGenerator.generate())); + bridge.add(LocationConverter.convert(bridgeNumberGenerator.generate())); } return bridge; } diff --git a/src/main/java/bridge/model/Constant.java b/src/main/java/bridge/model/Constant.java new file mode 100644 index 00000000000..93b31a02415 --- /dev/null +++ b/src/main/java/bridge/model/Constant.java @@ -0,0 +1,18 @@ +package bridge.model; + +public enum Constant { + + UPPER_CHAR("U"), + LOWER_CHAR("D"); + + private final String constant; + + Constant(String constant) { + this.constant = constant; + } + + @Override + public String toString() { + return constant; + } +} diff --git a/src/main/java/bridge/model/LocationConverter.java b/src/main/java/bridge/model/LocationConverter.java new file mode 100644 index 00000000000..03c996f4b78 --- /dev/null +++ b/src/main/java/bridge/model/LocationConverter.java @@ -0,0 +1,13 @@ +package bridge.model; + +public class LocationConverter { + + private static final int LOWER_CASE = 0; + + public static String convert(int position) { + if (position == LOWER_CASE) { + return Constant.LOWER_CHAR.toString(); + } + return Constant.UPPER_CHAR.toString(); + } +} From 1dbefb15db0ab5012b70a009e64f794cd9bb1fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sat, 12 Aug 2023 01:00:02 +0900 Subject: [PATCH 07/34] =?UTF-8?q?feat(BridgeGame):=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=9E=85=EB=A0=A5=EA=B3=BC=20=EB=8B=A4=EB=A6=AC?= =?UTF-8?q?=EC=97=90=20=EC=A0=80=EC=9E=A5=EB=90=9C=20=EA=B0=92=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bridge/controller/BridgeController.java | 8 +++++-- src/main/java/bridge/model/Bridge.java | 21 +++++++++++++++++ src/main/java/bridge/model/Player.java | 23 +++++++++++++++++++ .../java/bridge/{ => service}/BridgeGame.java | 17 ++++++++++++-- 4 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 src/main/java/bridge/model/Bridge.java create mode 100644 src/main/java/bridge/model/Player.java rename src/main/java/bridge/{ => service}/BridgeGame.java (60%) diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index 99fbd898302..dbeb7021cbb 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -2,6 +2,9 @@ import bridge.BridgeMaker; import bridge.BridgeRandomNumberGenerator; +import bridge.model.Bridge; +import bridge.model.Player; +import bridge.service.BridgeGame; import bridge.view.InputView; import bridge.view.OutputView; @@ -18,7 +21,8 @@ public BridgeController(OutputView outputView, InputView inputView) { public void start() { outputView.printGameStart(); BridgeMaker bridgeMaker = new BridgeMaker(new BridgeRandomNumberGenerator()); - bridgeMaker.makeBridge(inputView.readBridgeSize()); - inputView.readMoving(); + Bridge bridge = new Bridge(bridgeMaker.makeBridge(inputView.readBridgeSize())); + BridgeGame bridgeGame = new BridgeGame(bridge, new Player()); + boolean b = bridgeGame.move(inputView.readMoving()); } } diff --git a/src/main/java/bridge/model/Bridge.java b/src/main/java/bridge/model/Bridge.java new file mode 100644 index 00000000000..aef205ad1a5 --- /dev/null +++ b/src/main/java/bridge/model/Bridge.java @@ -0,0 +1,21 @@ +package bridge.model; + +import java.util.List; + +public class Bridge { + + private final List bridge; + + public Bridge(List bridge) { + this.bridge = bridge; + } + + public boolean checkMoving(String moving, int position) { + String correctMoving = bridge.get(position); + return correctMoving.equals(moving); + } + + public List getBridge() { + return bridge; + } +} diff --git a/src/main/java/bridge/model/Player.java b/src/main/java/bridge/model/Player.java new file mode 100644 index 00000000000..6410d3701a0 --- /dev/null +++ b/src/main/java/bridge/model/Player.java @@ -0,0 +1,23 @@ +package bridge.model; + +public class Player { + + private int position; + private static final int START_POSITION = 0; + + public Player() { + this.position = START_POSITION; + } + + public void movePosition() { + position++; + } + + public int getPosition() { + return position; + } + + public void clear() { + position = START_POSITION; + } +} diff --git a/src/main/java/bridge/BridgeGame.java b/src/main/java/bridge/service/BridgeGame.java similarity index 60% rename from src/main/java/bridge/BridgeGame.java rename to src/main/java/bridge/service/BridgeGame.java index 834c1c8362b..d130d72bf23 100644 --- a/src/main/java/bridge/BridgeGame.java +++ b/src/main/java/bridge/service/BridgeGame.java @@ -1,16 +1,29 @@ -package bridge; +package bridge.service; + +import bridge.model.Bridge; +import bridge.model.Player; /** * 다리 건너기 게임을 관리하는 클래스 */ public class BridgeGame { + private final Bridge bridge; + private final Player player; + + public BridgeGame(Bridge bridge, Player player) { + this.bridge = bridge; + this.player = player; + } + /** * 사용자가 칸을 이동할 때 사용하는 메서드 *

* 이동을 위해 필요한 메서드의 반환 타입(return type), 인자(parameter)는 자유롭게 추가하거나 변경할 수 있다. */ - public void move() { + public boolean move(String moving) { + int position = player.getPosition(); + return bridge.checkMoving(moving, position); } /** From 1c60f360f2cd6ef4381e7a40f4a885ebd17d1353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sat, 12 Aug 2023 01:49:28 +0900 Subject: [PATCH 08/34] =?UTF-8?q?feat(AnswerTable):=20=EC=8B=9C=EB=8F=84?= =?UTF-8?q?=20=EB=82=B4=EC=9A=A9=20=EC=A0=80=EC=9E=A5=20=EA=B8=B0=EB=8A=A5?= =?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 --- docs/README.md | 2 +- .../bridge/controller/BridgeController.java | 5 +- src/main/java/bridge/model/AnswerTable.java | 58 +++++++++++++++++++ src/main/java/bridge/model/Constant.java | 3 +- src/main/java/bridge/model/MovingResult.java | 31 ++++++++++ src/main/java/bridge/service/BridgeGame.java | 6 +- 6 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 src/main/java/bridge/model/AnswerTable.java create mode 100644 src/main/java/bridge/model/MovingResult.java diff --git a/docs/README.md b/docs/README.md index 2f8dedc0296..15bf7c0ee3c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,7 +12,7 @@ - [x] 0➝D / 1➝U 변환 **게임 진행** -- 생성된 다리와 사용자의 입력 비교 +- [x] 생성된 다리와 사용자의 입력 비교 - [ ] 이동 가능한 경우 계속 진행 - [ ] 이동 불가능한 경우 재시작 / 종료 - [ ] 재시작하는 경우 시도 횟수 증가 diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index dbeb7021cbb..79e1ffadd73 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -2,6 +2,7 @@ import bridge.BridgeMaker; import bridge.BridgeRandomNumberGenerator; +import bridge.model.AnswerTable; import bridge.model.Bridge; import bridge.model.Player; import bridge.service.BridgeGame; @@ -22,7 +23,9 @@ public void start() { outputView.printGameStart(); BridgeMaker bridgeMaker = new BridgeMaker(new BridgeRandomNumberGenerator()); Bridge bridge = new Bridge(bridgeMaker.makeBridge(inputView.readBridgeSize())); - BridgeGame bridgeGame = new BridgeGame(bridge, new Player()); + AnswerTable answerTable = new AnswerTable(); + Player player = new Player(); + BridgeGame bridgeGame = new BridgeGame(bridge, player, answerTable); boolean b = bridgeGame.move(inputView.readMoving()); } } diff --git a/src/main/java/bridge/model/AnswerTable.java b/src/main/java/bridge/model/AnswerTable.java new file mode 100644 index 00000000000..16586a49ccf --- /dev/null +++ b/src/main/java/bridge/model/AnswerTable.java @@ -0,0 +1,58 @@ +package bridge.model; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class AnswerTable { + + private final List upper; + private final List lower; + + public AnswerTable() { + this.upper = new ArrayList<>(); + this.lower = new ArrayList<>(); + } + + public void setAnswerTable(String userInput, boolean success) { + setUpperCase(userInput, success); + setLowerCase(userInput, success); + } + + private void setUpperCase(String userInput, boolean success) { + if(userInput.equals(Constant.UPPER_CHAR.toString())) { + MovingResult correctMessage = calculateMovingResult(userInput, success); + upper.add(correctMessage.getAnswer()); + lower.add(Constant.BLANK.toString()); + } + } + + private void setLowerCase(String userInput, boolean success) { + if(userInput.equals(Constant.LOWER_CHAR.toString())) { + MovingResult correctMessage = calculateMovingResult(userInput, success); + lower.add(correctMessage.getAnswer()); + upper.add(Constant.BLANK.toString()); + } + } + + private MovingResult calculateMovingResult(String userInput, boolean success) { + return Arrays.stream(MovingResult.values()) + .filter(movingResult -> movingResult.getInput().equals(userInput)) + .filter(movingResult -> movingResult.getSuccess() == success) + .findAny() + .orElse(null); + } + + public List getUpper() { + return upper; + } + + public List getLower() { + return lower; + } + + public void clear() { + upper.clear(); + lower.clear(); + } +} diff --git a/src/main/java/bridge/model/Constant.java b/src/main/java/bridge/model/Constant.java index 93b31a02415..ff901b28fd9 100644 --- a/src/main/java/bridge/model/Constant.java +++ b/src/main/java/bridge/model/Constant.java @@ -3,7 +3,8 @@ public enum Constant { UPPER_CHAR("U"), - LOWER_CHAR("D"); + LOWER_CHAR("D"), + BLANK(" "); private final String constant; diff --git a/src/main/java/bridge/model/MovingResult.java b/src/main/java/bridge/model/MovingResult.java new file mode 100644 index 00000000000..3da3c72d088 --- /dev/null +++ b/src/main/java/bridge/model/MovingResult.java @@ -0,0 +1,31 @@ +package bridge.model; + +public enum MovingResult { + + UPPER_SUCCESS("U", "O", true), + UPPER_FAILED("U", "X", false), + LOWER_SUCCESS("D", "O", true), + LOWER_FAILED("D", "X", false); + + private final String input; + private final String answer; + private final boolean success; + + MovingResult(String input, String answer, boolean success) { + this.input = input; + this.answer = answer; + this.success = success; + } + + public String getInput() { + return input; + } + + public String getAnswer() { + return answer; + } + + public boolean getSuccess() { + return success; + } +} diff --git a/src/main/java/bridge/service/BridgeGame.java b/src/main/java/bridge/service/BridgeGame.java index d130d72bf23..a29255e6288 100644 --- a/src/main/java/bridge/service/BridgeGame.java +++ b/src/main/java/bridge/service/BridgeGame.java @@ -1,5 +1,6 @@ package bridge.service; +import bridge.model.AnswerTable; import bridge.model.Bridge; import bridge.model.Player; @@ -10,10 +11,12 @@ public class BridgeGame { private final Bridge bridge; private final Player player; + private final AnswerTable answerTable; - public BridgeGame(Bridge bridge, Player player) { + public BridgeGame(Bridge bridge, Player player, AnswerTable answerTable) { this.bridge = bridge; this.player = player; + this.answerTable = answerTable; } /** @@ -23,6 +26,7 @@ public BridgeGame(Bridge bridge, Player player) { */ public boolean move(String moving) { int position = player.getPosition(); + answerTable.setAnswerTable(moving, bridge.checkMoving(moving, position)); return bridge.checkMoving(moving, position); } From 15a51813b02633ef1ed97b5fbc3e99952cd43b84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sat, 12 Aug 2023 02:52:58 +0900 Subject: [PATCH 09/34] =?UTF-8?q?feat(BridgeController):=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A7=84=ED=96=89=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/bridge/controller/BridgeController.java | 9 ++++++++- src/main/java/bridge/model/Bridge.java | 4 ++++ src/main/java/bridge/service/BridgeGame.java | 8 ++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index 79e1ffadd73..4583eae2d6d 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -26,6 +26,13 @@ public void start() { AnswerTable answerTable = new AnswerTable(); Player player = new Player(); BridgeGame bridgeGame = new BridgeGame(bridge, player, answerTable); - boolean b = bridgeGame.move(inputView.readMoving()); + playUntilExit(player, bridge, bridgeGame); + } + + private void playUntilExit(Player player, Bridge bridge, BridgeGame bridgeGame) { + boolean isPlay = true; + while (isPlay && player.getPosition() < bridge.size()) { + isPlay = bridgeGame.move(inputView.readMoving()); + } } } diff --git a/src/main/java/bridge/model/Bridge.java b/src/main/java/bridge/model/Bridge.java index aef205ad1a5..95a7da55174 100644 --- a/src/main/java/bridge/model/Bridge.java +++ b/src/main/java/bridge/model/Bridge.java @@ -18,4 +18,8 @@ public boolean checkMoving(String moving, int position) { public List getBridge() { return bridge; } + + public int size() { + return bridge.size(); + } } diff --git a/src/main/java/bridge/service/BridgeGame.java b/src/main/java/bridge/service/BridgeGame.java index a29255e6288..f614bc6578c 100644 --- a/src/main/java/bridge/service/BridgeGame.java +++ b/src/main/java/bridge/service/BridgeGame.java @@ -26,8 +26,12 @@ public BridgeGame(Bridge bridge, Player player, AnswerTable answerTable) { */ public boolean move(String moving) { int position = player.getPosition(); - answerTable.setAnswerTable(moving, bridge.checkMoving(moving, position)); - return bridge.checkMoving(moving, position); + boolean isCorrect = bridge.checkMoving(moving, position); + answerTable.setAnswerTable(moving, isCorrect); + player.movePosition(); + System.out.println(answerTable.getUpper()); + System.out.println(answerTable.getLower()); + return isCorrect; } /** From 3072eae5a68127d3197ecfa0cc28b2250e70162f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sat, 12 Aug 2023 02:57:45 +0900 Subject: [PATCH 10/34] =?UTF-8?q?feat(InputView):=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/bridge/controller/BridgeController.java | 1 + src/main/java/bridge/view/InputView.java | 3 ++- src/main/java/bridge/view/OutputMessage.java | 3 ++- src/main/java/bridge/view/OutputView.java | 4 ++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index 4583eae2d6d..2f02a0eefbe 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -34,5 +34,6 @@ private void playUntilExit(Player player, Bridge bridge, BridgeGame bridgeGame) while (isPlay && player.getPosition() < bridge.size()) { isPlay = bridgeGame.move(inputView.readMoving()); } + inputView.readGameCommand(); } } diff --git a/src/main/java/bridge/view/InputView.java b/src/main/java/bridge/view/InputView.java index a6dfa7f3b82..ba0df2186b5 100644 --- a/src/main/java/bridge/view/InputView.java +++ b/src/main/java/bridge/view/InputView.java @@ -30,6 +30,7 @@ public String readMoving() { * 사용자가 게임을 다시 시도할지 종료할지 여부를 입력받는다. */ public String readGameCommand() { - return null; + outputView.printRetryMessage(); + return Console.readLine(); } } diff --git a/src/main/java/bridge/view/OutputMessage.java b/src/main/java/bridge/view/OutputMessage.java index c31ed3a4f45..387921a68a9 100644 --- a/src/main/java/bridge/view/OutputMessage.java +++ b/src/main/java/bridge/view/OutputMessage.java @@ -4,7 +4,8 @@ public enum OutputMessage { START_MESSAGE("다리 건너기 게임을 시작합니다."), LENGTH_MESSAGE("다리의 길이를 입력해주세요."), - MOVE_LOCATION("이동할 칸을 선택해주세요. (위: U, 아래: D)"); + MOVE_LOCATION("이동할 칸을 선택해주세요. (위: U, 아래: D)"), + RETRY_MESSAGE("게임을 다시 시도할지 여부를 입력해주세요. (재시도: R, 종료: Q)"); private final String message; diff --git a/src/main/java/bridge/view/OutputView.java b/src/main/java/bridge/view/OutputView.java index 40965323bea..9ea4de5f121 100644 --- a/src/main/java/bridge/view/OutputView.java +++ b/src/main/java/bridge/view/OutputView.java @@ -31,4 +31,8 @@ public void printLengthMessage() { public void printMoveLocation() { System.out.println(OutputMessage.MOVE_LOCATION); } + + public void printRetryMessage() { + System.out.println(OutputMessage.RETRY_MESSAGE); + } } From b7a70225ad3cddb9443e39df0128790077d92d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sat, 12 Aug 2023 03:01:37 +0900 Subject: [PATCH 11/34] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 15bf7c0ee3c..aeb5cc9db13 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,7 +4,7 @@ - [x] 게임 시작 안내 출력 - [x] 다리 길이 입력 (3 ~ 20사이 숫자) - [x] 이동할 칸 입력 (U / D) -- [ ] 재시도 입력 (R / Q) +- [x] 재시도 입력 (R / Q) **다리 생성** - 입력한 다리 길이만큼 다리 생성 @@ -13,10 +13,14 @@ **게임 진행** - [x] 생성된 다리와 사용자의 입력 비교 - - [ ] 이동 가능한 경우 계속 진행 + - [x] 이동 가능한 경우 계속 진행 - [ ] 이동 불가능한 경우 재시작 / 종료 - [ ] 재시작하는 경우 시도 횟수 증가 +**게임 진행 내용 저장** +- [x] 사용자의 입력이 맞는지 저장한다 + - 맞을 경우 O, 틀릴 경우 X 저장 + **결과 출력** - 다리 출력 - [ ] `[`로 시작, `]`로 끝, 구분자는 `|` From e0ec0e5d1877ebf2d728a0a2129cad0a1256620d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sat, 12 Aug 2023 03:53:17 +0900 Subject: [PATCH 12/34] =?UTF-8?q?feat(BridgeController):=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- .../bridge/controller/BridgeController.java | 29 +++++++++++++------ src/main/java/bridge/model/Constant.java | 6 ++-- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/docs/README.md b/docs/README.md index aeb5cc9db13..99859871cc6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -14,7 +14,7 @@ **게임 진행** - [x] 생성된 다리와 사용자의 입력 비교 - [x] 이동 가능한 경우 계속 진행 - - [ ] 이동 불가능한 경우 재시작 / 종료 + - [x] 이동 불가능한 경우 재시작 / 종료 - [ ] 재시작하는 경우 시도 횟수 증가 **게임 진행 내용 저장** diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index 2f02a0eefbe..3456bd1018a 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -4,7 +4,8 @@ import bridge.BridgeRandomNumberGenerator; import bridge.model.AnswerTable; import bridge.model.Bridge; -import bridge.model.Player; +import bridge.model.Constant; +import bridge.model.GameStatus; import bridge.service.BridgeGame; import bridge.view.InputView; import bridge.view.OutputView; @@ -24,16 +25,26 @@ public void start() { BridgeMaker bridgeMaker = new BridgeMaker(new BridgeRandomNumberGenerator()); Bridge bridge = new Bridge(bridgeMaker.makeBridge(inputView.readBridgeSize())); AnswerTable answerTable = new AnswerTable(); - Player player = new Player(); - BridgeGame bridgeGame = new BridgeGame(bridge, player, answerTable); - playUntilExit(player, bridge, bridgeGame); + GameStatus gameStatus = new GameStatus(); + BridgeGame bridgeGame = new BridgeGame(bridge, gameStatus, answerTable); + startGame(bridgeGame, gameStatus, bridge); } - private void playUntilExit(Player player, Bridge bridge, BridgeGame bridgeGame) { - boolean isPlay = true; - while (isPlay && player.getPosition() < bridge.size()) { - isPlay = bridgeGame.move(inputView.readMoving()); + private void startGame(BridgeGame bridgeGame, GameStatus gameStatus, Bridge bridge) { + while (gameStatus.getPosition() < bridge.size()) { + boolean isCorrect = bridgeGame.move(inputView.readMoving()); + if(!isCorrect && !retry(bridgeGame)) { + break; + } } - inputView.readGameCommand(); + } + + private boolean retry(BridgeGame bridgeGame) { + String userInput = inputView.readGameCommand(); + if (userInput.equals(Constant.RETRY.toString())) { + bridgeGame.retry(); + return true; + } + return false; } } diff --git a/src/main/java/bridge/model/Constant.java b/src/main/java/bridge/model/Constant.java index ff901b28fd9..f8ebfeed86b 100644 --- a/src/main/java/bridge/model/Constant.java +++ b/src/main/java/bridge/model/Constant.java @@ -4,7 +4,9 @@ public enum Constant { UPPER_CHAR("U"), LOWER_CHAR("D"), - BLANK(" "); + BLANK(" "), + RETRY("R"), + QUIT("Q"); private final String constant; @@ -14,6 +16,6 @@ public enum Constant { @Override public String toString() { - return constant; + return this.constant; } } From f041216b930ba65a2a53155691eecbbfc5f005fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sat, 12 Aug 2023 03:53:51 +0900 Subject: [PATCH 13/34] =?UTF-8?q?feat(BridgeGame):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=9E=AC=EC=8B=9C=EC=9E=91=20=EC=8B=9C=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=EB=90=9C=20=EB=82=B4=EC=9A=A9=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/bridge/service/BridgeGame.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/bridge/service/BridgeGame.java b/src/main/java/bridge/service/BridgeGame.java index f614bc6578c..fdcf3deb803 100644 --- a/src/main/java/bridge/service/BridgeGame.java +++ b/src/main/java/bridge/service/BridgeGame.java @@ -2,7 +2,7 @@ import bridge.model.AnswerTable; import bridge.model.Bridge; -import bridge.model.Player; +import bridge.model.GameStatus; /** * 다리 건너기 게임을 관리하는 클래스 @@ -10,12 +10,12 @@ public class BridgeGame { private final Bridge bridge; - private final Player player; + private final GameStatus gameStatus; private final AnswerTable answerTable; - public BridgeGame(Bridge bridge, Player player, AnswerTable answerTable) { + public BridgeGame(Bridge bridge, GameStatus gameStatus, AnswerTable answerTable) { this.bridge = bridge; - this.player = player; + this.gameStatus = gameStatus; this.answerTable = answerTable; } @@ -25,10 +25,10 @@ public BridgeGame(Bridge bridge, Player player, AnswerTable answerTable) { * 이동을 위해 필요한 메서드의 반환 타입(return type), 인자(parameter)는 자유롭게 추가하거나 변경할 수 있다. */ public boolean move(String moving) { - int position = player.getPosition(); + int position = gameStatus.getPosition(); boolean isCorrect = bridge.checkMoving(moving, position); answerTable.setAnswerTable(moving, isCorrect); - player.movePosition(); + gameStatus.movePosition(); System.out.println(answerTable.getUpper()); System.out.println(answerTable.getLower()); return isCorrect; @@ -40,5 +40,7 @@ public boolean move(String moving) { * 재시작을 위해 필요한 메서드의 반환 타입(return type), 인자(parameter)는 자유롭게 추가하거나 변경할 수 있다. */ public void retry() { + gameStatus.clear(); + answerTable.clear(); } } From 07a7a2482e571663819ca0d6b1e4cfe700a21777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sat, 12 Aug 2023 04:01:17 +0900 Subject: [PATCH 14/34] =?UTF-8?q?feat(GameStatus):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=9E=AC=EC=8B=9C=EC=9E=91=20=EC=8B=9C=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=20=ED=9A=9F=EC=88=98=20=EC=A6=9D=EA=B0=80=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 ++-- .../java/bridge/controller/BridgeController.java | 1 + .../bridge/model/{Player.java => GameStatus.java} | 15 +++++++++++++-- src/main/java/bridge/service/BridgeGame.java | 1 + 4 files changed, 17 insertions(+), 4 deletions(-) rename src/main/java/bridge/model/{Player.java => GameStatus.java} (54%) diff --git a/docs/README.md b/docs/README.md index 99859871cc6..f9e478da917 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,8 +15,8 @@ - [x] 생성된 다리와 사용자의 입력 비교 - [x] 이동 가능한 경우 계속 진행 - [x] 이동 불가능한 경우 재시작 / 종료 -- [ ] 재시작하는 경우 시도 횟수 증가 - +- [x] 재시작하는 경우 시도 횟수 증가 +현 **게임 진행 내용 저장** - [x] 사용자의 입력이 맞는지 저장한다 - 맞을 경우 O, 틀릴 경우 X 저장 diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index 3456bd1018a..8988381f5d2 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -37,6 +37,7 @@ private void startGame(BridgeGame bridgeGame, GameStatus gameStatus, Bridge brid break; } } + System.out.println(gameStatus.getRetry()); } private boolean retry(BridgeGame bridgeGame) { diff --git a/src/main/java/bridge/model/Player.java b/src/main/java/bridge/model/GameStatus.java similarity index 54% rename from src/main/java/bridge/model/Player.java rename to src/main/java/bridge/model/GameStatus.java index 6410d3701a0..370ae54b533 100644 --- a/src/main/java/bridge/model/Player.java +++ b/src/main/java/bridge/model/GameStatus.java @@ -1,18 +1,29 @@ package bridge.model; -public class Player { +public class GameStatus { private int position; + private int retry; private static final int START_POSITION = 0; + private static final int INIT_RETRY_COUNT = 1; - public Player() { + public GameStatus() { this.position = START_POSITION; + this.retry = INIT_RETRY_COUNT; } public void movePosition() { position++; } + public void increaseRetryCount() { + retry++; + } + + public int getRetry() { + return retry; + } + public int getPosition() { return position; } diff --git a/src/main/java/bridge/service/BridgeGame.java b/src/main/java/bridge/service/BridgeGame.java index fdcf3deb803..53219205f2c 100644 --- a/src/main/java/bridge/service/BridgeGame.java +++ b/src/main/java/bridge/service/BridgeGame.java @@ -40,6 +40,7 @@ public boolean move(String moving) { * 재시작을 위해 필요한 메서드의 반환 타입(return type), 인자(parameter)는 자유롭게 추가하거나 변경할 수 있다. */ public void retry() { + gameStatus.increaseRetryCount(); gameStatus.clear(); answerTable.clear(); } From aff2735564c4149cb4e458ecdbcdb45b8a9ca0d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sat, 12 Aug 2023 16:34:27 +0900 Subject: [PATCH 15/34] =?UTF-8?q?feat(OutputView):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EC=8B=9C=20=EB=8B=A4=EB=A6=AC=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 ++-- .../bridge/controller/BridgeController.java | 4 ++-- src/main/java/bridge/service/BridgeGame.java | 2 -- src/main/java/bridge/view/BridgeElement.java | 19 +++++++++++++++++++ src/main/java/bridge/view/OutputView.java | 15 ++++++++++++++- 5 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 src/main/java/bridge/view/BridgeElement.java diff --git a/docs/README.md b/docs/README.md index f9e478da917..3c431e77a04 100644 --- a/docs/README.md +++ b/docs/README.md @@ -23,7 +23,7 @@ **결과 출력** - 다리 출력 - - [ ] `[`로 시작, `]`로 끝, 구분자는 `|` - - [ ] 이동 가능한 경우 O / 불가능한 경우 X 출력 + - [x] `[`로 시작, `]`로 끝, 구분자는 `|` + - [x] 이동 가능한 경우 O / 불가능한 경우 X 출력 - [ ] 게임 성공 여부 - [ ] 총 시도 횟수 \ No newline at end of file diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index 8988381f5d2..d283eac2038 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -14,6 +14,7 @@ public class BridgeController { private final OutputView outputView; private final InputView inputView; + private final AnswerTable answerTable = new AnswerTable(); public BridgeController(OutputView outputView, InputView inputView) { this.outputView = outputView; @@ -24,7 +25,6 @@ public void start() { outputView.printGameStart(); BridgeMaker bridgeMaker = new BridgeMaker(new BridgeRandomNumberGenerator()); Bridge bridge = new Bridge(bridgeMaker.makeBridge(inputView.readBridgeSize())); - AnswerTable answerTable = new AnswerTable(); GameStatus gameStatus = new GameStatus(); BridgeGame bridgeGame = new BridgeGame(bridge, gameStatus, answerTable); startGame(bridgeGame, gameStatus, bridge); @@ -33,11 +33,11 @@ public void start() { private void startGame(BridgeGame bridgeGame, GameStatus gameStatus, Bridge bridge) { while (gameStatus.getPosition() < bridge.size()) { boolean isCorrect = bridgeGame.move(inputView.readMoving()); + outputView.printMap(answerTable); if(!isCorrect && !retry(bridgeGame)) { break; } } - System.out.println(gameStatus.getRetry()); } private boolean retry(BridgeGame bridgeGame) { diff --git a/src/main/java/bridge/service/BridgeGame.java b/src/main/java/bridge/service/BridgeGame.java index 53219205f2c..8b776c9984a 100644 --- a/src/main/java/bridge/service/BridgeGame.java +++ b/src/main/java/bridge/service/BridgeGame.java @@ -29,8 +29,6 @@ public boolean move(String moving) { boolean isCorrect = bridge.checkMoving(moving, position); answerTable.setAnswerTable(moving, isCorrect); gameStatus.movePosition(); - System.out.println(answerTable.getUpper()); - System.out.println(answerTable.getLower()); return isCorrect; } diff --git a/src/main/java/bridge/view/BridgeElement.java b/src/main/java/bridge/view/BridgeElement.java new file mode 100644 index 00000000000..b63d7df7a16 --- /dev/null +++ b/src/main/java/bridge/view/BridgeElement.java @@ -0,0 +1,19 @@ +package bridge.view; + +public enum BridgeElement { + BRIDGE_START("[ "), + BRIDGE_END(" ]"), + BRIDGE_DELIMITER(" | "); + + + private final String element; + + BridgeElement(String element) { + this.element = element; + } + + @Override + public String toString() { + return this.element; + } +} diff --git a/src/main/java/bridge/view/OutputView.java b/src/main/java/bridge/view/OutputView.java index 9ea4de5f121..d06fa7b3f59 100644 --- a/src/main/java/bridge/view/OutputView.java +++ b/src/main/java/bridge/view/OutputView.java @@ -1,5 +1,10 @@ package bridge.view; +import bridge.model.AnswerTable; + +import java.util.List; +import java.util.StringJoiner; + /** * 사용자에게 게임 진행 상황과 결과를 출력하는 역할을 한다. */ @@ -10,7 +15,9 @@ public class OutputView { *

* 출력을 위해 필요한 메서드의 인자(parameter)는 자유롭게 추가하거나 변경할 수 있다. */ - public void printMap() { + public void printMap(AnswerTable answerTable) { + printBridge(answerTable.getUpper()); + printBridge(answerTable.getLower()); } /** @@ -35,4 +42,10 @@ public void printMoveLocation() { public void printRetryMessage() { System.out.println(OutputMessage.RETRY_MESSAGE); } + + public void printBridge(List bridge) { + StringJoiner stringJoiner = new StringJoiner(BridgeElement.BRIDGE_DELIMITER.toString(), BridgeElement.BRIDGE_START.toString(), BridgeElement.BRIDGE_END.toString()); + bridge.forEach(stringJoiner::add); + System.out.println(stringJoiner); + } } From 49ee6623e7e5bca0287ab63501472ab091aadf61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 02:28:20 +0900 Subject: [PATCH 16/34] =?UTF-8?q?feat(OutputView):=20=EC=B5=9C=EC=A2=85=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 ++-- .../bridge/controller/BridgeController.java | 2 ++ src/main/java/bridge/model/GameStatus.java | 21 +++++++++++++++++++ src/main/java/bridge/view/OutputMessage.java | 5 ++++- src/main/java/bridge/view/OutputView.java | 7 ++++++- 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/docs/README.md b/docs/README.md index 3c431e77a04..cb8d37a2d3d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,5 +25,5 @@ - 다리 출력 - [x] `[`로 시작, `]`로 끝, 구분자는 `|` - [x] 이동 가능한 경우 O / 불가능한 경우 X 출력 -- [ ] 게임 성공 여부 -- [ ] 총 시도 횟수 \ No newline at end of file +- [x] 게임 성공 여부 +- [x] 총 시도 횟수 \ No newline at end of file diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index d283eac2038..d7752e28f82 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -35,9 +35,11 @@ private void startGame(BridgeGame bridgeGame, GameStatus gameStatus, Bridge brid boolean isCorrect = bridgeGame.move(inputView.readMoving()); outputView.printMap(answerTable); if(!isCorrect && !retry(bridgeGame)) { + gameStatus.setGameResultFailed(); break; } } + outputView.printResult(answerTable, gameStatus); } private boolean retry(BridgeGame bridgeGame) { diff --git a/src/main/java/bridge/model/GameStatus.java b/src/main/java/bridge/model/GameStatus.java index 370ae54b533..cf24fc9c392 100644 --- a/src/main/java/bridge/model/GameStatus.java +++ b/src/main/java/bridge/model/GameStatus.java @@ -4,12 +4,25 @@ public class GameStatus { private int position; private int retry; + private GameResult gameResult; private static final int START_POSITION = 0; private static final int INIT_RETRY_COUNT = 1; + private enum GameResult { + GAME_SUCCESS("성공"), + GAME_FAILED("실패"); + + private final String result; + + GameResult(String result) { + this.result = result; + } + } + public GameStatus() { this.position = START_POSITION; this.retry = INIT_RETRY_COUNT; + this.gameResult = GameResult.GAME_SUCCESS; } public void movePosition() { @@ -31,4 +44,12 @@ public int getPosition() { public void clear() { position = START_POSITION; } + + public void setGameResultFailed() { + gameResult = GameResult.GAME_FAILED; + } + + public String getGameResult() { + return gameResult.result; + } } diff --git a/src/main/java/bridge/view/OutputMessage.java b/src/main/java/bridge/view/OutputMessage.java index 387921a68a9..d641dd579c8 100644 --- a/src/main/java/bridge/view/OutputMessage.java +++ b/src/main/java/bridge/view/OutputMessage.java @@ -5,7 +5,10 @@ public enum OutputMessage { START_MESSAGE("다리 건너기 게임을 시작합니다."), LENGTH_MESSAGE("다리의 길이를 입력해주세요."), MOVE_LOCATION("이동할 칸을 선택해주세요. (위: U, 아래: D)"), - RETRY_MESSAGE("게임을 다시 시도할지 여부를 입력해주세요. (재시도: R, 종료: Q)"); + RETRY_MESSAGE("게임을 다시 시도할지 여부를 입력해주세요. (재시도: R, 종료: Q)"), + GAME_END_MESSAGE("최종 게임 결과"), + GAME_STATUS("게임 성공 여부: %s\n"), + RETRY_NUMBERS("총 시도한 횟수: %d\n"); private final String message; diff --git a/src/main/java/bridge/view/OutputView.java b/src/main/java/bridge/view/OutputView.java index d06fa7b3f59..7add6bdf168 100644 --- a/src/main/java/bridge/view/OutputView.java +++ b/src/main/java/bridge/view/OutputView.java @@ -1,6 +1,7 @@ package bridge.view; import bridge.model.AnswerTable; +import bridge.model.GameStatus; import java.util.List; import java.util.StringJoiner; @@ -25,7 +26,11 @@ public void printMap(AnswerTable answerTable) { *

* 출력을 위해 필요한 메서드의 인자(parameter)는 자유롭게 추가하거나 변경할 수 있다. */ - public void printResult() { + public void printResult(AnswerTable answerTable, GameStatus gameStatus) { + System.out.println(OutputMessage.GAME_END_MESSAGE); + printMap(answerTable); + System.out.printf((OutputMessage.GAME_STATUS.toString()), gameStatus.getGameResult()); + System.out.printf(OutputMessage.RETRY_NUMBERS.toString(), gameStatus.getRetry()); } public void printGameStart() { From c6709a324c0c7e4ca22bd415a0c35291363ed7cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 02:38:02 +0900 Subject: [PATCH 17/34] =?UTF-8?q?feat(OutputView):=20=EB=82=B4=EC=9A=A9=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=EC=8B=9C=20=EC=A4=84=20=EB=B0=94=EA=BF=88=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/bridge/view/InputView.java | 1 + src/main/java/bridge/view/OutputView.java | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/main/java/bridge/view/InputView.java b/src/main/java/bridge/view/InputView.java index ba0df2186b5..fec4674a161 100644 --- a/src/main/java/bridge/view/InputView.java +++ b/src/main/java/bridge/view/InputView.java @@ -15,6 +15,7 @@ public class InputView { public int readBridgeSize() { outputView.printLengthMessage(); String userInput = Console.readLine(); + outputView.printNewLine(); return Integer.parseInt(userInput); } diff --git a/src/main/java/bridge/view/OutputView.java b/src/main/java/bridge/view/OutputView.java index 7add6bdf168..9fc953faf20 100644 --- a/src/main/java/bridge/view/OutputView.java +++ b/src/main/java/bridge/view/OutputView.java @@ -11,6 +11,8 @@ */ public class OutputView { + private static final String NEW_LINE = ""; + /** * 현재까지 이동한 다리의 상태를 정해진 형식에 맞춰 출력한다. *

@@ -19,6 +21,7 @@ public class OutputView { public void printMap(AnswerTable answerTable) { printBridge(answerTable.getUpper()); printBridge(answerTable.getLower()); + printNewLine(); } /** @@ -35,6 +38,7 @@ public void printResult(AnswerTable answerTable, GameStatus gameStatus) { public void printGameStart() { System.out.println(OutputMessage.START_MESSAGE); + printNewLine(); } public void printLengthMessage() { @@ -53,4 +57,8 @@ public void printBridge(List bridge) { bridge.forEach(stringJoiner::add); System.out.println(stringJoiner); } + + public void printNewLine() { + System.out.println(NEW_LINE); + } } From 9d3eece7bcb11aacbb441dab6e6f6890bde1b0d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 04:49:49 +0900 Subject: [PATCH 18/34] =?UTF-8?q?feat(InputValidator):=20=EB=8B=A4?= =?UTF-8?q?=EB=A6=AC=20=EC=9D=B4=EB=8F=99=20=EC=9E=85=EB=A0=A5=20=EC=8B=9C?= =?UTF-8?q?=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5?= =?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 --- docs/README.md | 11 ++++++++++- src/main/java/bridge/view/ErrorMessage.java | 17 +++++++++++++++++ src/main/java/bridge/view/InputValidator.java | 16 ++++++++++++++++ src/main/java/bridge/view/InputView.java | 5 ++++- 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 src/main/java/bridge/view/ErrorMessage.java create mode 100644 src/main/java/bridge/view/InputValidator.java diff --git a/docs/README.md b/docs/README.md index cb8d37a2d3d..9d445c40f09 100644 --- a/docs/README.md +++ b/docs/README.md @@ -26,4 +26,13 @@ - [x] `[`로 시작, `]`로 끝, 구분자는 `|` - [x] 이동 가능한 경우 O / 불가능한 경우 X 출력 - [x] 게임 성공 여부 -- [x] 총 시도 횟수 \ No newline at end of file +- [x] 총 시도 횟수 + +**예외 처리** +- 이동할 칸 입력 + - [x] U/D 이외의 입력이 들어올 경우 +- 재시도 입력 + - [ ] R/Q 이외의 입력이 들어올 경우 +- 다리 길이 입력 + - [ ] 숫자가 아닌 입력이 들어온 경우 + - [ ] 범위 이외의 숫자가 들어온 경우 \ No newline at end of file diff --git a/src/main/java/bridge/view/ErrorMessage.java b/src/main/java/bridge/view/ErrorMessage.java new file mode 100644 index 00000000000..af42b25e77b --- /dev/null +++ b/src/main/java/bridge/view/ErrorMessage.java @@ -0,0 +1,17 @@ +package bridge.view; + +public enum ErrorMessage { + + INCORRECT_MOVING("U 또는 D로만 이동할 수 있습니다."); + + private static final String prefix = "[Error] "; + private final String message; + ErrorMessage(String message) { + this.message = message; + } + + @Override + public String toString() { + return prefix + message; + } +} diff --git a/src/main/java/bridge/view/InputValidator.java b/src/main/java/bridge/view/InputValidator.java new file mode 100644 index 00000000000..806f3f7781c --- /dev/null +++ b/src/main/java/bridge/view/InputValidator.java @@ -0,0 +1,16 @@ +package bridge.view; + +import bridge.model.Constant; + +public class InputValidator { + + public void validateMoving(String input) { + validateIsMovingInput(input); + } + + private void validateIsMovingInput(String input) { + if (!(input.equals(Constant.LOWER_CHAR.toString()) || input.equals(Constant.UPPER_CHAR.toString()))) { + throw new IllegalArgumentException(ErrorMessage.INCORRECT_MOVING.toString()); + } + } +} diff --git a/src/main/java/bridge/view/InputView.java b/src/main/java/bridge/view/InputView.java index fec4674a161..b8e497a1e06 100644 --- a/src/main/java/bridge/view/InputView.java +++ b/src/main/java/bridge/view/InputView.java @@ -8,6 +8,7 @@ public class InputView { private final OutputView outputView = new OutputView(); + private final InputValidator inputValidator = new InputValidator(); /** * 다리의 길이를 입력받는다. @@ -24,7 +25,9 @@ public int readBridgeSize() { */ public String readMoving() { outputView.printMoveLocation(); - return Console.readLine(); + String input = Console.readLine(); + inputValidator.validateMoving(input); + return input; } /** From ad15ef00c251747dbc3b8f3867664e5661dcd197 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 04:54:47 +0900 Subject: [PATCH 19/34] =?UTF-8?q?feat(InputValidator):=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=9E=85=EB=A0=A5=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/bridge/view/ErrorMessage.java | 3 ++- src/main/java/bridge/view/InputValidator.java | 10 ++++++++++ src/main/java/bridge/view/InputView.java | 4 +++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 9d445c40f09..ac4ce1b54ee 100644 --- a/docs/README.md +++ b/docs/README.md @@ -32,7 +32,7 @@ - 이동할 칸 입력 - [x] U/D 이외의 입력이 들어올 경우 - 재시도 입력 - - [ ] R/Q 이외의 입력이 들어올 경우 + - [x] R/Q 이외의 입력이 들어올 경우 - 다리 길이 입력 - [ ] 숫자가 아닌 입력이 들어온 경우 - [ ] 범위 이외의 숫자가 들어온 경우 \ No newline at end of file diff --git a/src/main/java/bridge/view/ErrorMessage.java b/src/main/java/bridge/view/ErrorMessage.java index af42b25e77b..33ce4c5efcf 100644 --- a/src/main/java/bridge/view/ErrorMessage.java +++ b/src/main/java/bridge/view/ErrorMessage.java @@ -2,7 +2,8 @@ public enum ErrorMessage { - INCORRECT_MOVING("U 또는 D로만 이동할 수 있습니다."); + INCORRECT_MOVING("U 또는 D로만 이동할 수 있습니다."), + INCORRECT_RETRY("R 또는 Q만 입력할 수 있습니다."); private static final String prefix = "[Error] "; private final String message; diff --git a/src/main/java/bridge/view/InputValidator.java b/src/main/java/bridge/view/InputValidator.java index 806f3f7781c..d12cacbc0c1 100644 --- a/src/main/java/bridge/view/InputValidator.java +++ b/src/main/java/bridge/view/InputValidator.java @@ -13,4 +13,14 @@ private void validateIsMovingInput(String input) { throw new IllegalArgumentException(ErrorMessage.INCORRECT_MOVING.toString()); } } + + public void validateRetry(String input) { + validateIsRetryInput(input); + } + + private void validateIsRetryInput(String input) { + if (!(input.equals(Constant.RETRY.toString()) || input.equals(Constant.QUIT.toString()))) { + throw new IllegalArgumentException(ErrorMessage.INCORRECT_RETRY.toString()); + } + } } diff --git a/src/main/java/bridge/view/InputView.java b/src/main/java/bridge/view/InputView.java index b8e497a1e06..842c10b9d08 100644 --- a/src/main/java/bridge/view/InputView.java +++ b/src/main/java/bridge/view/InputView.java @@ -35,6 +35,8 @@ public String readMoving() { */ public String readGameCommand() { outputView.printRetryMessage(); - return Console.readLine(); + String input = Console.readLine(); + inputValidator.validateRetry(input); + return input; } } From a96a505c94ad598d1bc811ba16bb56b964ac3fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 05:00:06 +0900 Subject: [PATCH 20/34] =?UTF-8?q?feat(InputValidator):=20=EB=8B=A4?= =?UTF-8?q?=EB=A6=AC=20=EA=B8=B8=EC=9D=B4=20=EC=9E=85=EB=A0=A5=20=EC=8B=9C?= =?UTF-8?q?=20=EC=88=AB=EC=9E=90=20=EC=9D=B4=EC=99=B8=EC=9D=98=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- ...rrorMessage.java => ExceptionMessage.java} | 7 +++--- src/main/java/bridge/view/InputValidator.java | 23 +++++++++++++++++-- src/main/java/bridge/view/InputView.java | 1 + 4 files changed, 27 insertions(+), 6 deletions(-) rename src/main/java/bridge/view/{ErrorMessage.java => ExceptionMessage.java} (74%) diff --git a/docs/README.md b/docs/README.md index ac4ce1b54ee..a07ffceb6e2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -34,5 +34,5 @@ - 재시도 입력 - [x] R/Q 이외의 입력이 들어올 경우 - 다리 길이 입력 - - [ ] 숫자가 아닌 입력이 들어온 경우 + - [x] 숫자가 아닌 입력이 들어온 경우 - [ ] 범위 이외의 숫자가 들어온 경우 \ No newline at end of file diff --git a/src/main/java/bridge/view/ErrorMessage.java b/src/main/java/bridge/view/ExceptionMessage.java similarity index 74% rename from src/main/java/bridge/view/ErrorMessage.java rename to src/main/java/bridge/view/ExceptionMessage.java index 33ce4c5efcf..146c6fd6783 100644 --- a/src/main/java/bridge/view/ErrorMessage.java +++ b/src/main/java/bridge/view/ExceptionMessage.java @@ -1,13 +1,14 @@ package bridge.view; -public enum ErrorMessage { +public enum ExceptionMessage { INCORRECT_MOVING("U 또는 D로만 이동할 수 있습니다."), - INCORRECT_RETRY("R 또는 Q만 입력할 수 있습니다."); + INCORRECT_RETRY("R 또는 Q만 입력할 수 있습니다."), + NOT_INTEGER("숫자만 입력할 수 있습니다."); private static final String prefix = "[Error] "; private final String message; - ErrorMessage(String message) { + ExceptionMessage(String message) { this.message = message; } diff --git a/src/main/java/bridge/view/InputValidator.java b/src/main/java/bridge/view/InputValidator.java index d12cacbc0c1..dc407984f69 100644 --- a/src/main/java/bridge/view/InputValidator.java +++ b/src/main/java/bridge/view/InputValidator.java @@ -2,15 +2,19 @@ import bridge.model.Constant; +import java.util.regex.Pattern; + public class InputValidator { + String NUMBER_REGEXP = "^\\d*$"; + public void validateMoving(String input) { validateIsMovingInput(input); } private void validateIsMovingInput(String input) { if (!(input.equals(Constant.LOWER_CHAR.toString()) || input.equals(Constant.UPPER_CHAR.toString()))) { - throw new IllegalArgumentException(ErrorMessage.INCORRECT_MOVING.toString()); + throw new IllegalArgumentException(ExceptionMessage.INCORRECT_MOVING.toString()); } } @@ -20,7 +24,22 @@ public void validateRetry(String input) { private void validateIsRetryInput(String input) { if (!(input.equals(Constant.RETRY.toString()) || input.equals(Constant.QUIT.toString()))) { - throw new IllegalArgumentException(ErrorMessage.INCORRECT_RETRY.toString()); + throw new IllegalArgumentException(ExceptionMessage.INCORRECT_RETRY.toString()); + } + } + + public void validateBridgeLength(String input) { + validateIsNumber(input); + } + + private void validateIsNumber(String input) { + if (!Pattern.matches(NUMBER_REGEXP, input)) { + ExceptionMessage exceptionMessage = ExceptionMessage.NOT_INTEGER; + throw new IllegalArgumentException(exceptionMessage.toString()); } } + + private void validateIsCorrectRange(int input) { + + } } diff --git a/src/main/java/bridge/view/InputView.java b/src/main/java/bridge/view/InputView.java index 842c10b9d08..fae5d17cb46 100644 --- a/src/main/java/bridge/view/InputView.java +++ b/src/main/java/bridge/view/InputView.java @@ -16,6 +16,7 @@ public class InputView { public int readBridgeSize() { outputView.printLengthMessage(); String userInput = Console.readLine(); + inputValidator.validateBridgeLength(userInput); outputView.printNewLine(); return Integer.parseInt(userInput); } From f35197d6cf8e0d6e1213ca1695fff81a4503ddbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 05:06:58 +0900 Subject: [PATCH 21/34] =?UTF-8?q?feat(InputValidator):=20=EB=8B=A4?= =?UTF-8?q?=EB=A6=AC=20=EA=B8=B8=EC=9D=B4=20=EC=9E=85=EB=A0=A5=20=EC=8B=9C?= =?UTF-8?q?=20=EC=88=AB=EC=9E=90=20=EB=B2=94=EC=9C=84=20=EA=B2=80=EC=82=AC?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/bridge/view/ExceptionMessage.java | 3 ++- src/main/java/bridge/view/InputValidator.java | 10 ++++++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/README.md b/docs/README.md index a07ffceb6e2..462fdc3c4a8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -35,4 +35,4 @@ - [x] R/Q 이외의 입력이 들어올 경우 - 다리 길이 입력 - [x] 숫자가 아닌 입력이 들어온 경우 - - [ ] 범위 이외의 숫자가 들어온 경우 \ No newline at end of file + - [x] 범위 이외의 숫자가 들어온 경우 \ No newline at end of file diff --git a/src/main/java/bridge/view/ExceptionMessage.java b/src/main/java/bridge/view/ExceptionMessage.java index 146c6fd6783..06e71e85ca7 100644 --- a/src/main/java/bridge/view/ExceptionMessage.java +++ b/src/main/java/bridge/view/ExceptionMessage.java @@ -4,7 +4,8 @@ public enum ExceptionMessage { INCORRECT_MOVING("U 또는 D로만 이동할 수 있습니다."), INCORRECT_RETRY("R 또는 Q만 입력할 수 있습니다."), - NOT_INTEGER("숫자만 입력할 수 있습니다."); + NOT_INTEGER("숫자만 입력할 수 있습니다."), + INCORRECT_RANGE("다리 길이는 3부터 20 사이의 숫자여야 합니다."); private static final String prefix = "[Error] "; private final String message; diff --git a/src/main/java/bridge/view/InputValidator.java b/src/main/java/bridge/view/InputValidator.java index dc407984f69..2d85c9d4902 100644 --- a/src/main/java/bridge/view/InputValidator.java +++ b/src/main/java/bridge/view/InputValidator.java @@ -6,7 +6,9 @@ public class InputValidator { - String NUMBER_REGEXP = "^\\d*$"; + private static final String NUMBER_REGEXP = "^\\d*$"; + private static final int MAX_BRIDGE_LENGTH = 20; + private static final int MIN_BRIDGE_LENGTH = 1; public void validateMoving(String input) { validateIsMovingInput(input); @@ -30,6 +32,7 @@ private void validateIsRetryInput(String input) { public void validateBridgeLength(String input) { validateIsNumber(input); + validateIsCorrectRange(Integer.parseInt(input)); } private void validateIsNumber(String input) { @@ -40,6 +43,9 @@ private void validateIsNumber(String input) { } private void validateIsCorrectRange(int input) { - + if (!(MIN_BRIDGE_LENGTH <= input && input <= MAX_BRIDGE_LENGTH)) { + ExceptionMessage exceptionMessage = ExceptionMessage.INCORRECT_RANGE; + throw new IllegalArgumentException(exceptionMessage.toString()); + } } } From bf6c9ad3c1d19f51691c122e6b19cdab7f40c15c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 05:30:02 +0900 Subject: [PATCH 22/34] =?UTF-8?q?refactor(BridgeController):=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A7=84=ED=96=89=20=EA=B8=B0=EB=8A=A5=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bridge/controller/BridgeController.java | 24 ++++++++++++++----- .../java/bridge/view/ExceptionMessage.java | 2 +- src/main/java/bridge/view/OutputView.java | 4 ++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main/java/bridge/controller/BridgeController.java b/src/main/java/bridge/controller/BridgeController.java index d7752e28f82..b6d1f3b5e59 100644 --- a/src/main/java/bridge/controller/BridgeController.java +++ b/src/main/java/bridge/controller/BridgeController.java @@ -15,6 +15,7 @@ public class BridgeController { private final OutputView outputView; private final InputView inputView; private final AnswerTable answerTable = new AnswerTable(); + private final GameStatus gameStatus = new GameStatus(); public BridgeController(OutputView outputView, InputView inputView) { this.outputView = outputView; @@ -22,15 +23,23 @@ public BridgeController(OutputView outputView, InputView inputView) { } public void start() { + try { + Bridge bridge = makeBridge(); + progressGame(bridge); + printResult(); + } catch (IllegalArgumentException exception) { + outputView.printExceptionMessage(exception.getMessage()); + } + } + + private Bridge makeBridge() { outputView.printGameStart(); BridgeMaker bridgeMaker = new BridgeMaker(new BridgeRandomNumberGenerator()); - Bridge bridge = new Bridge(bridgeMaker.makeBridge(inputView.readBridgeSize())); - GameStatus gameStatus = new GameStatus(); - BridgeGame bridgeGame = new BridgeGame(bridge, gameStatus, answerTable); - startGame(bridgeGame, gameStatus, bridge); + return new Bridge(bridgeMaker.makeBridge(inputView.readBridgeSize())); } - private void startGame(BridgeGame bridgeGame, GameStatus gameStatus, Bridge bridge) { + private void progressGame(Bridge bridge) { + BridgeGame bridgeGame = new BridgeGame(bridge, gameStatus, answerTable); while (gameStatus.getPosition() < bridge.size()) { boolean isCorrect = bridgeGame.move(inputView.readMoving()); outputView.printMap(answerTable); @@ -39,7 +48,6 @@ private void startGame(BridgeGame bridgeGame, GameStatus gameStatus, Bridge brid break; } } - outputView.printResult(answerTable, gameStatus); } private boolean retry(BridgeGame bridgeGame) { @@ -50,4 +58,8 @@ private boolean retry(BridgeGame bridgeGame) { } return false; } + + private void printResult() { + outputView.printResult(answerTable, gameStatus); + } } diff --git a/src/main/java/bridge/view/ExceptionMessage.java b/src/main/java/bridge/view/ExceptionMessage.java index 06e71e85ca7..df31bc39192 100644 --- a/src/main/java/bridge/view/ExceptionMessage.java +++ b/src/main/java/bridge/view/ExceptionMessage.java @@ -7,7 +7,7 @@ public enum ExceptionMessage { NOT_INTEGER("숫자만 입력할 수 있습니다."), INCORRECT_RANGE("다리 길이는 3부터 20 사이의 숫자여야 합니다."); - private static final String prefix = "[Error] "; + private static final String prefix = "[ERROR] "; private final String message; ExceptionMessage(String message) { this.message = message; diff --git a/src/main/java/bridge/view/OutputView.java b/src/main/java/bridge/view/OutputView.java index 9fc953faf20..1c251845a73 100644 --- a/src/main/java/bridge/view/OutputView.java +++ b/src/main/java/bridge/view/OutputView.java @@ -61,4 +61,8 @@ public void printBridge(List bridge) { public void printNewLine() { System.out.println(NEW_LINE); } + + public void printExceptionMessage(String message) { + System.out.println(message); + } } From 01d2feacc7b134fa5d4985b9b23a58962e3843b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 19:50:20 +0900 Subject: [PATCH 23/34] =?UTF-8?q?docs:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 462fdc3c4a8..1118b513754 100644 --- a/docs/README.md +++ b/docs/README.md @@ -35,4 +35,24 @@ - [x] R/Q 이외의 입력이 들어올 경우 - 다리 길이 입력 - [x] 숫자가 아닌 입력이 들어온 경우 - - [x] 범위 이외의 숫자가 들어온 경우 \ No newline at end of file + - [x] 범위 이외의 숫자가 들어온 경우 + +### 테스트 목록 + +**BridgeMaker** +- [ ] 다리 길이 입력시 길이에 맞는 다리를 생성하는가 + +**InputValidator** +- [ ] 움직임 입력 시 U/D 이외의 문자를 입력하면 예외가 발생하는가 +- [ ] 재시작 입력 시 R/Q 이외의 문자를 입력하면 예외가 발생하는가 +- [ ] 다리 길이를 입력할 경우 문자를 입력하면 예외가 발생하는가 +- [ ] 다리 길이를 입력할 경우 3~20 이외의 숫자를 입력하면 예외가 발생하는가 + +**LocationCoverter** +- [ ] 0 = D, 1 = U로 변환을 하는가 + +**BridgeGame** +- [ ] 게임 진행 시 사용자가 입력한 내용과 다리의 내용이 일치하는지 확인 +- [ ] 정답 계산 이후 사용자 위치 움직였는지 확인 +- [ ] 게임 재시작 시 재시작 카운트 증가 +- [ ] 게임 재시작 시 사용자 위치, 다리 건넌 기록 초기화 \ No newline at end of file From f1e69cd8024468b97284d3a5e672a27f2bf6e1fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 19:58:37 +0900 Subject: [PATCH 24/34] =?UTF-8?q?test:=20=EB=8B=A4=EB=A6=AC=20=EA=B8=B8?= =?UTF-8?q?=EC=9D=B4=20=EC=9E=85=EB=A0=A5=20=EC=8B=9C=20=EB=8B=A4=EB=A6=AC?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- .../java/bridge/model/BridgeMakerTest.java | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/test/java/bridge/model/BridgeMakerTest.java diff --git a/docs/README.md b/docs/README.md index 1118b513754..25850d8d7a1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -40,7 +40,7 @@ ### 테스트 목록 **BridgeMaker** -- [ ] 다리 길이 입력시 길이에 맞는 다리를 생성하는가 +- [x] 다리 길이 입력시 길이에 맞는 다리를 생성하는가 **InputValidator** - [ ] 움직임 입력 시 U/D 이외의 문자를 입력하면 예외가 발생하는가 diff --git a/src/test/java/bridge/model/BridgeMakerTest.java b/src/test/java/bridge/model/BridgeMakerTest.java new file mode 100644 index 00000000000..47ca82e76d6 --- /dev/null +++ b/src/test/java/bridge/model/BridgeMakerTest.java @@ -0,0 +1,38 @@ +package bridge.model; + +import bridge.BridgeNumberGenerator; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.util.Lists.newArrayList; + +public class BridgeMakerTest { + + @DisplayName("다리 길이 입력시 길이에 맞는 다리를 생성하는가") + @Test + void makeBridge() { + BridgeNumberGenerator numberGenerator = new BridgeMakerTest.TestNumberGenerator(newArrayList(1, 0, 0)); + bridge.BridgeMaker bridgeMaker = new bridge.BridgeMaker(numberGenerator); + + List bridge = bridgeMaker.makeBridge(3); + + assertThat(bridge).hasSize(3); + } + + static class TestNumberGenerator implements BridgeNumberGenerator { + + private final List numbers; + + TestNumberGenerator(List numbers) { + this.numbers = numbers; + } + + @Override + public int generate() { + return numbers.remove(0); + } + } +} From 3dfbc755437c1e8b714483f4ab431466c742e3bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 20:04:09 +0900 Subject: [PATCH 25/34] =?UTF-8?q?test:=200->D=20=EB=B3=80=ED=99=98=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 +-- .../bridge/model/LocationConverterTest.java | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/test/java/bridge/model/LocationConverterTest.java diff --git a/docs/README.md b/docs/README.md index 25850d8d7a1..ab16fe4b71f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -48,8 +48,8 @@ - [ ] 다리 길이를 입력할 경우 문자를 입력하면 예외가 발생하는가 - [ ] 다리 길이를 입력할 경우 3~20 이외의 숫자를 입력하면 예외가 발생하는가 -**LocationCoverter** -- [ ] 0 = D, 1 = U로 변환을 하는가 +**LocationConverter** +- [x] 0 = D, 1 = U로 변환을 하는가 **BridgeGame** - [ ] 게임 진행 시 사용자가 입력한 내용과 다리의 내용이 일치하는지 확인 diff --git a/src/test/java/bridge/model/LocationConverterTest.java b/src/test/java/bridge/model/LocationConverterTest.java new file mode 100644 index 00000000000..f5ef001b04d --- /dev/null +++ b/src/test/java/bridge/model/LocationConverterTest.java @@ -0,0 +1,26 @@ +package bridge.model; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + + +import static org.assertj.core.api.Assertions.assertThat; + +public class LocationConverterTest { + + @DisplayName("0을 입력할 경우 D로 변환한다.") + @Test + void convertToD() { + int bridge = 0; + String convertContent = LocationConverter.convert(bridge); + assertThat(convertContent).isEqualTo("D"); + } + + @DisplayName("1을 입력할 경우 U로 변환한다.") + @Test + void convertToU() { + int bridge = 1; + String convertContent = LocationConverter.convert(bridge); + assertThat(convertContent).isEqualTo("U"); + } +} From eefbfb11b96ed65b2a0244ef2e4b16536811f87a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 20:11:35 +0900 Subject: [PATCH 26/34] =?UTF-8?q?test:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 8 ++-- src/test/java/bridge/InputValidatorTest.java | 45 ++++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 src/test/java/bridge/InputValidatorTest.java diff --git a/docs/README.md b/docs/README.md index ab16fe4b71f..8629c7aae77 100644 --- a/docs/README.md +++ b/docs/README.md @@ -43,10 +43,10 @@ - [x] 다리 길이 입력시 길이에 맞는 다리를 생성하는가 **InputValidator** -- [ ] 움직임 입력 시 U/D 이외의 문자를 입력하면 예외가 발생하는가 -- [ ] 재시작 입력 시 R/Q 이외의 문자를 입력하면 예외가 발생하는가 -- [ ] 다리 길이를 입력할 경우 문자를 입력하면 예외가 발생하는가 -- [ ] 다리 길이를 입력할 경우 3~20 이외의 숫자를 입력하면 예외가 발생하는가 +- [x] 움직임 입력 시 U/D 이외의 문자를 입력하면 예외가 발생하는가 +- [x] 재시작 입력 시 R/Q 이외의 문자를 입력하면 예외가 발생하는가 +- [x] 다리 길이를 입력할 경우 문자를 입력하면 예외가 발생하는가 +- [x] 다리 길이를 입력할 경우 3~20 이외의 숫자를 입력하면 예외가 발생하는가 **LocationConverter** - [x] 0 = D, 1 = U로 변환을 하는가 diff --git a/src/test/java/bridge/InputValidatorTest.java b/src/test/java/bridge/InputValidatorTest.java new file mode 100644 index 00000000000..1931ba69347 --- /dev/null +++ b/src/test/java/bridge/InputValidatorTest.java @@ -0,0 +1,45 @@ +package bridge; + +import bridge.view.InputValidator; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class InputValidatorTest { + + InputValidator inputValidator = new InputValidator(); + String ERROR_MESSAGE = "[ERROR]"; + + @DisplayName("위치 이동 시 U, D 이외 입력이 들어올 경우 예외 발생") + @Test + void movingInputException() { + assertThatThrownBy(() -> inputValidator.validateMoving("K")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining(ERROR_MESSAGE); + } + + @DisplayName("재시작 시 R, Q 이외 입력이 들어올 경우 예외 발생") + @Test + void retryInputException() { + assertThatThrownBy(() -> inputValidator.validateRetry("K")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining(ERROR_MESSAGE); + } + + @DisplayName("다리 길이 입력 시 숫자 외 문자 입력이 들어올 경우 예외 발생") + @Test + void bridgeLengthException() { + assertThatThrownBy(() -> inputValidator.validateBridgeLength("K")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining(ERROR_MESSAGE); + } + + @DisplayName("다리 길이기 3~20 이외의 숫자일 경우 예외 발생") + @Test + void bridgeLengthRangeException() { + assertThatThrownBy(() -> inputValidator.validateBridgeLength("21")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining(ERROR_MESSAGE); + } +} From 2acce540350e9e54f65d89c8e9eedb707cd15614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 22:28:18 +0900 Subject: [PATCH 27/34] =?UTF-8?q?test:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EA=B3=BC=20=EB=8B=A4=EB=A6=AC=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EB=B9=84=EA=B5=90=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- .../java/bridge/model/BridgeGameTest.java | 55 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/test/java/bridge/model/BridgeGameTest.java diff --git a/docs/README.md b/docs/README.md index 8629c7aae77..3c0458cd8fc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -52,7 +52,7 @@ - [x] 0 = D, 1 = U로 변환을 하는가 **BridgeGame** -- [ ] 게임 진행 시 사용자가 입력한 내용과 다리의 내용이 일치하는지 확인 +- [x] 게임 진행 시 사용자가 입력한 내용과 다리의 내용이 일치하는지 확인 - [ ] 정답 계산 이후 사용자 위치 움직였는지 확인 - [ ] 게임 재시작 시 재시작 카운트 증가 - [ ] 게임 재시작 시 사용자 위치, 다리 건넌 기록 초기화 \ No newline at end of file diff --git a/src/test/java/bridge/model/BridgeGameTest.java b/src/test/java/bridge/model/BridgeGameTest.java new file mode 100644 index 00000000000..68543f27130 --- /dev/null +++ b/src/test/java/bridge/model/BridgeGameTest.java @@ -0,0 +1,55 @@ +package bridge.model; + +import bridge.BridgeNumberGenerator; +import bridge.service.BridgeGame; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.util.Lists.newArrayList; + +public class BridgeGameTest { + + Bridge bridge; + GameStatus gameStatus; + AnswerTable answerTable; + BridgeGame bridgeGame; + + @BeforeEach + void setUpGame() { + BridgeNumberGenerator numberGenerator = new BridgeGameTest.TestNumberGenerator(newArrayList(1, 0, 0)); + bridge.BridgeMaker bridgeMaker = new bridge.BridgeMaker(numberGenerator); + + bridge = new Bridge(bridgeMaker.makeBridge(3)); + gameStatus = new GameStatus(); + answerTable = new AnswerTable(); + bridgeGame = new BridgeGame(bridge, gameStatus, answerTable); + } + + @DisplayName("게임 진행 시 사용자가 입력한 내용과 다리의 내용이 일치하는지 확인") + @Test + void makeBridge() { + String moving = "U"; + + boolean movingResult = bridgeGame.move(moving); + + assertThat(movingResult).isTrue(); + } + + static class TestNumberGenerator implements BridgeNumberGenerator { + + private final List numbers; + + TestNumberGenerator(List numbers) { + this.numbers = numbers; + } + + @Override + public int generate() { + return numbers.remove(0); + } + } +} From 2a98b522dca72d66ce9a3518b14b292a18f6fd65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 22:31:47 +0900 Subject: [PATCH 28/34] =?UTF-8?q?test:=20=EC=A0=95=EB=8B=B5=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=20=ED=9B=84=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=ED=99=95=EC=9D=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/bridge/model/BridgeGameTest.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/test/java/bridge/model/BridgeGameTest.java b/src/test/java/bridge/model/BridgeGameTest.java index 68543f27130..77c0d6eba6c 100644 --- a/src/test/java/bridge/model/BridgeGameTest.java +++ b/src/test/java/bridge/model/BridgeGameTest.java @@ -31,7 +31,7 @@ void setUpGame() { @DisplayName("게임 진행 시 사용자가 입력한 내용과 다리의 내용이 일치하는지 확인") @Test - void makeBridge() { + void comparisonMoving() { String moving = "U"; boolean movingResult = bridgeGame.move(moving); @@ -39,6 +39,15 @@ void makeBridge() { assertThat(movingResult).isTrue(); } + @DisplayName("정답 계산 이후 사용자 위치 움직였는지 확인") + @Test + void comparisonPosition() { + String moving = "U"; + bridgeGame.move(moving); + + assertThat(gameStatus.getPosition()).isEqualTo(1); + } + static class TestNumberGenerator implements BridgeNumberGenerator { private final List numbers; From fc25b733241ce270be65419eb74a640be5d0e282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 22:34:35 +0900 Subject: [PATCH 29/34] =?UTF-8?q?test:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=8B=9C=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EC=B9=B4=EC=9A=B4=ED=8A=B8=20=EC=A6=9D=EA=B0=80=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 ++-- src/test/java/bridge/model/BridgeGameTest.java | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 3c0458cd8fc..0555bd53068 100644 --- a/docs/README.md +++ b/docs/README.md @@ -53,6 +53,6 @@ **BridgeGame** - [x] 게임 진행 시 사용자가 입력한 내용과 다리의 내용이 일치하는지 확인 -- [ ] 정답 계산 이후 사용자 위치 움직였는지 확인 -- [ ] 게임 재시작 시 재시작 카운트 증가 +- [x] 정답 계산 이후 사용자 위치 움직였는지 확인 +- [x] 게임 재시작 시 재시작 카운트 증가 - [ ] 게임 재시작 시 사용자 위치, 다리 건넌 기록 초기화 \ No newline at end of file diff --git a/src/test/java/bridge/model/BridgeGameTest.java b/src/test/java/bridge/model/BridgeGameTest.java index 77c0d6eba6c..d68459c14fa 100644 --- a/src/test/java/bridge/model/BridgeGameTest.java +++ b/src/test/java/bridge/model/BridgeGameTest.java @@ -48,6 +48,14 @@ void comparisonPosition() { assertThat(gameStatus.getPosition()).isEqualTo(1); } + @DisplayName("게임 재시작 시 재시작 카운트 증가 확인") + @Test + void checkRetryCount() { + bridgeGame.retry(); + + assertThat(gameStatus.getRetry()).isEqualTo(2); + } + static class TestNumberGenerator implements BridgeNumberGenerator { private final List numbers; From 4538c3f97e2f9cf88e26f5b6f1f8b70239e1b17a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 22:45:15 +0900 Subject: [PATCH 30/34] =?UTF-8?q?test:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=8B=9C=20=EC=9D=B4=EC=A0=84=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A7=84=ED=96=89=20=EB=82=B4=EC=9A=A9=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/test/java/bridge/model/BridgeGameTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 0555bd53068..3ee733ded75 100644 --- a/docs/README.md +++ b/docs/README.md @@ -55,4 +55,4 @@ - [x] 게임 진행 시 사용자가 입력한 내용과 다리의 내용이 일치하는지 확인 - [x] 정답 계산 이후 사용자 위치 움직였는지 확인 - [x] 게임 재시작 시 재시작 카운트 증가 -- [ ] 게임 재시작 시 사용자 위치, 다리 건넌 기록 초기화 \ No newline at end of file +- [x] 게임 재시작 시 사용자 위치, 다리 건넌 기록 초기화 \ No newline at end of file diff --git a/src/test/java/bridge/model/BridgeGameTest.java b/src/test/java/bridge/model/BridgeGameTest.java index d68459c14fa..3d2bd01b6dd 100644 --- a/src/test/java/bridge/model/BridgeGameTest.java +++ b/src/test/java/bridge/model/BridgeGameTest.java @@ -56,6 +56,16 @@ void checkRetryCount() { assertThat(gameStatus.getRetry()).isEqualTo(2); } + @DisplayName("게임 재시작 시 이전 게임 진행 내용 초기화") + @Test + void checkClear() { + bridgeGame.retry(); + + assertThat(answerTable.getLower().size()).isEqualTo(0); + assertThat(answerTable.getUpper().size()).isEqualTo(0); + assertThat(gameStatus.getPosition()).isEqualTo(0); + } + static class TestNumberGenerator implements BridgeNumberGenerator { private final List numbers; From 933edb0792350bf5f9be326a7dbf467dd2010c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Sun, 13 Aug 2023 22:45:29 +0900 Subject: [PATCH 31/34] =?UTF-8?q?test:=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/bridge/ApplicationTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/test/java/bridge/ApplicationTest.java b/src/test/java/bridge/ApplicationTest.java index 1a163ec0a2a..5b965cd93b6 100644 --- a/src/test/java/bridge/ApplicationTest.java +++ b/src/test/java/bridge/ApplicationTest.java @@ -39,6 +39,25 @@ class ApplicationTest extends NsTest { }, 1, 0, 1); } + @Test + void 재시작_테스트() { + assertRandomNumberInRangeTest(() -> { + run("3", "U", "D", "D", "R", "U", "D", "U"); + assertThat(output()).contains( + "게임을 다시 시도할지 여부를 입력해주세요. (재시도: R, 종료: Q)", + "최종 게임 결과", + "[ O | | O ]", + "[ | O | ]", + "게임 성공 여부: 성공", + "총 시도한 횟수: 2" + ); + + int upSideIndex = output().indexOf("[ O | | O ]"); + int downSideIndex = output().indexOf("[ | O | ]"); + assertThat(upSideIndex).isLessThan(downSideIndex); + }, 1, 0, 1); + } + @Test void 예외_테스트() { assertSimpleTest(() -> { From 9b51dccb1da0be84cac4cd226868e56a15e03ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Mon, 14 Aug 2023 04:39:13 +0900 Subject: [PATCH 32/34] =?UTF-8?q?Refactor(LocationConverter):=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=AA=85=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/bridge/BridgeMaker.java | 4 ++-- .../model/{LocationConverter.java => BridgeConverter.java} | 2 +- ...{LocationConverterTest.java => BridgeConverterTest.java} | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/bridge/model/{LocationConverter.java => BridgeConverter.java} (89%) rename src/test/java/bridge/model/{LocationConverterTest.java => BridgeConverterTest.java} (75%) diff --git a/src/main/java/bridge/BridgeMaker.java b/src/main/java/bridge/BridgeMaker.java index e71a24c2b61..567561e7403 100644 --- a/src/main/java/bridge/BridgeMaker.java +++ b/src/main/java/bridge/BridgeMaker.java @@ -1,6 +1,6 @@ package bridge; -import bridge.model.LocationConverter; +import bridge.model.BridgeConverter; import java.util.ArrayList; import java.util.List; @@ -23,7 +23,7 @@ public BridgeMaker(BridgeNumberGenerator bridgeNumberGenerator) { public List makeBridge(int size) { List bridge = new ArrayList<>(); while (bridge.size() != size) { - bridge.add(LocationConverter.convert(bridgeNumberGenerator.generate())); + bridge.add(BridgeConverter.convert(bridgeNumberGenerator.generate())); } return bridge; } diff --git a/src/main/java/bridge/model/LocationConverter.java b/src/main/java/bridge/model/BridgeConverter.java similarity index 89% rename from src/main/java/bridge/model/LocationConverter.java rename to src/main/java/bridge/model/BridgeConverter.java index 03c996f4b78..43d39cd7f34 100644 --- a/src/main/java/bridge/model/LocationConverter.java +++ b/src/main/java/bridge/model/BridgeConverter.java @@ -1,6 +1,6 @@ package bridge.model; -public class LocationConverter { +public class BridgeConverter { private static final int LOWER_CASE = 0; diff --git a/src/test/java/bridge/model/LocationConverterTest.java b/src/test/java/bridge/model/BridgeConverterTest.java similarity index 75% rename from src/test/java/bridge/model/LocationConverterTest.java rename to src/test/java/bridge/model/BridgeConverterTest.java index f5ef001b04d..56eddd62c51 100644 --- a/src/test/java/bridge/model/LocationConverterTest.java +++ b/src/test/java/bridge/model/BridgeConverterTest.java @@ -6,13 +6,13 @@ import static org.assertj.core.api.Assertions.assertThat; -public class LocationConverterTest { +public class BridgeConverterTest { @DisplayName("0을 입력할 경우 D로 변환한다.") @Test void convertToD() { int bridge = 0; - String convertContent = LocationConverter.convert(bridge); + String convertContent = BridgeConverter.convert(bridge); assertThat(convertContent).isEqualTo("D"); } @@ -20,7 +20,7 @@ void convertToD() { @Test void convertToU() { int bridge = 1; - String convertContent = LocationConverter.convert(bridge); + String convertContent = BridgeConverter.convert(bridge); assertThat(convertContent).isEqualTo("U"); } } From fc56ae12f63f2d4709ce7e79681fb0a349e3aa85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Mon, 14 Aug 2023 04:39:42 +0900 Subject: [PATCH 33/34] =?UTF-8?q?Refactor(AnswerTable):=20=EA=B0=92?= =?UTF-8?q?=EC=9D=B4=20=EC=97=86=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EB=B0=9C=EC=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/bridge/model/AnswerTable.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/bridge/model/AnswerTable.java b/src/main/java/bridge/model/AnswerTable.java index 16586a49ccf..ec2d1d5adb5 100644 --- a/src/main/java/bridge/model/AnswerTable.java +++ b/src/main/java/bridge/model/AnswerTable.java @@ -1,5 +1,7 @@ package bridge.model; +import bridge.view.ExceptionMessage; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -21,7 +23,7 @@ public void setAnswerTable(String userInput, boolean success) { private void setUpperCase(String userInput, boolean success) { if(userInput.equals(Constant.UPPER_CHAR.toString())) { - MovingResult correctMessage = calculateMovingResult(userInput, success); + MovingResult correctMessage = calculateMovingResult(success); upper.add(correctMessage.getAnswer()); lower.add(Constant.BLANK.toString()); } @@ -29,18 +31,17 @@ private void setUpperCase(String userInput, boolean success) { private void setLowerCase(String userInput, boolean success) { if(userInput.equals(Constant.LOWER_CHAR.toString())) { - MovingResult correctMessage = calculateMovingResult(userInput, success); + MovingResult correctMessage = calculateMovingResult(success); lower.add(correctMessage.getAnswer()); upper.add(Constant.BLANK.toString()); } } - private MovingResult calculateMovingResult(String userInput, boolean success) { + private MovingResult calculateMovingResult(boolean success) { return Arrays.stream(MovingResult.values()) - .filter(movingResult -> movingResult.getInput().equals(userInput)) .filter(movingResult -> movingResult.getSuccess() == success) .findAny() - .orElse(null); + .orElseThrow(() -> new IllegalArgumentException(ExceptionMessage.MOVING_RESULT_NONE.toString())); } public List getUpper() { From 1bd61a7c500a0897c7c52d41d92000cb6a08fa59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=97=B0=EC=A7=84?= Date: Mon, 14 Aug 2023 04:41:33 +0900 Subject: [PATCH 34/34] =?UTF-8?q?Refactor(BridgeComparison):=20=EB=8B=A4?= =?UTF-8?q?=EB=A6=AC=EC=99=80=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EA=B0=92=20=EB=B9=84=EA=B5=90=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/bridge/model/Bridge.java | 9 ++------- src/main/java/bridge/model/BridgeComparison.java | 15 +++++++++++++++ src/main/java/bridge/model/MovingResult.java | 14 +++----------- src/main/java/bridge/service/BridgeGame.java | 7 ++++--- src/main/java/bridge/view/ExceptionMessage.java | 3 ++- 5 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 src/main/java/bridge/model/BridgeComparison.java diff --git a/src/main/java/bridge/model/Bridge.java b/src/main/java/bridge/model/Bridge.java index 95a7da55174..5e26e3f3685 100644 --- a/src/main/java/bridge/model/Bridge.java +++ b/src/main/java/bridge/model/Bridge.java @@ -10,13 +10,8 @@ public Bridge(List bridge) { this.bridge = bridge; } - public boolean checkMoving(String moving, int position) { - String correctMoving = bridge.get(position); - return correctMoving.equals(moving); - } - - public List getBridge() { - return bridge; + public String getBridgeByPosition(int position) { + return bridge.get(position); } public int size() { diff --git a/src/main/java/bridge/model/BridgeComparison.java b/src/main/java/bridge/model/BridgeComparison.java new file mode 100644 index 00000000000..a4a3b738404 --- /dev/null +++ b/src/main/java/bridge/model/BridgeComparison.java @@ -0,0 +1,15 @@ +package bridge.model; + +public class BridgeComparison { + + private final Bridge bridge; + + public BridgeComparison(Bridge bridge) { + this.bridge = bridge; + } + + public boolean checkMoving(String moving, int position) { + String correctMoving = bridge.getBridgeByPosition(position); + return correctMoving.equals(moving); + } +} diff --git a/src/main/java/bridge/model/MovingResult.java b/src/main/java/bridge/model/MovingResult.java index 3da3c72d088..7f327224a3a 100644 --- a/src/main/java/bridge/model/MovingResult.java +++ b/src/main/java/bridge/model/MovingResult.java @@ -2,25 +2,17 @@ public enum MovingResult { - UPPER_SUCCESS("U", "O", true), - UPPER_FAILED("U", "X", false), - LOWER_SUCCESS("D", "O", true), - LOWER_FAILED("D", "X", false); + MOVING_SUCCESS("O", true), + MOVING_FAILED("X", false); - private final String input; private final String answer; private final boolean success; - MovingResult(String input, String answer, boolean success) { - this.input = input; + MovingResult(String answer, boolean success) { this.answer = answer; this.success = success; } - public String getInput() { - return input; - } - public String getAnswer() { return answer; } diff --git a/src/main/java/bridge/service/BridgeGame.java b/src/main/java/bridge/service/BridgeGame.java index 8b776c9984a..a6ac36f2d86 100644 --- a/src/main/java/bridge/service/BridgeGame.java +++ b/src/main/java/bridge/service/BridgeGame.java @@ -2,6 +2,7 @@ import bridge.model.AnswerTable; import bridge.model.Bridge; +import bridge.model.BridgeComparison; import bridge.model.GameStatus; /** @@ -9,14 +10,14 @@ */ public class BridgeGame { - private final Bridge bridge; private final GameStatus gameStatus; private final AnswerTable answerTable; + private final BridgeComparison bridgeComparison; public BridgeGame(Bridge bridge, GameStatus gameStatus, AnswerTable answerTable) { - this.bridge = bridge; this.gameStatus = gameStatus; this.answerTable = answerTable; + this.bridgeComparison = new BridgeComparison(bridge); } /** @@ -26,7 +27,7 @@ public BridgeGame(Bridge bridge, GameStatus gameStatus, AnswerTable answerTable) */ public boolean move(String moving) { int position = gameStatus.getPosition(); - boolean isCorrect = bridge.checkMoving(moving, position); + boolean isCorrect = bridgeComparison.checkMoving(moving, position); answerTable.setAnswerTable(moving, isCorrect); gameStatus.movePosition(); return isCorrect; diff --git a/src/main/java/bridge/view/ExceptionMessage.java b/src/main/java/bridge/view/ExceptionMessage.java index df31bc39192..41ee20a3208 100644 --- a/src/main/java/bridge/view/ExceptionMessage.java +++ b/src/main/java/bridge/view/ExceptionMessage.java @@ -5,7 +5,8 @@ public enum ExceptionMessage { INCORRECT_MOVING("U 또는 D로만 이동할 수 있습니다."), INCORRECT_RETRY("R 또는 Q만 입력할 수 있습니다."), NOT_INTEGER("숫자만 입력할 수 있습니다."), - INCORRECT_RANGE("다리 길이는 3부터 20 사이의 숫자여야 합니다."); + INCORRECT_RANGE("다리 길이는 3부터 20 사이의 숫자여야 합니다."), + MOVING_RESULT_NONE("해당 방향으로 움직일 수 없습니다.."); private static final String prefix = "[ERROR] "; private final String message;