From 4fe02a233f2eabff3481ed4436e2ac6ae51c3013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Wed, 1 Nov 2023 23:08:08 +0900 Subject: [PATCH 01/22] =?UTF-8?q?git=20first=20commit=20-=20=EC=96=B4?= =?UTF-8?q?=EB=8A=90=EC=A0=95=EB=8F=84=20=ED=8B=80=20=EA=B5=AC=ED=98=84,?= =?UTF-8?q?=20=EB=85=B8=ED=8A=B8=EB=B6=81=20->=20PC=EB=A1=9C=20=EC=98=AE?= =?UTF-8?q?=EA=B8=B0=EA=B8=B0=20=EC=9C=84=ED=95=B4=20=EB=B8=8C=EB=9E=9C?= =?UTF-8?q?=EC=B9=98=20x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 26 ++++++++++++++++ src/main/java/baseball/GameLauncher.java | 7 +++++ src/main/java/baseball/Result.java | 31 +++++++++++++++++++ .../java/baseball/enums/PrintMessage.java | 20 ++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 src/main/java/baseball/GameLauncher.java create mode 100644 src/main/java/baseball/Result.java create mode 100644 src/main/java/baseball/enums/PrintMessage.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34214..2a7bb85842 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,33 @@ package baseball; +import java.util.HashSet; +import java.util.Random; +import java.util.Set; + public class Application { + + public static void main(String[] args) { // TODO: 프로그램 구현 + + // 랜덤한 값 서로 다른 수 3자리를 생성한다. TODO 함수로 뺄 예정 + Random random = new Random(); + random.setSeed(System.currentTimeMillis()); + Set targetSet = new HashSet<>(); + while (targetSet.size() < 3) { + int randomNum = random.nextInt(9)+1; + targetSet.add(randomNum); + } + + // 사용자 수 받아오기 + + + // 사용자 수와 컴퓨터 수 검증하기 + + + // + + + } } diff --git a/src/main/java/baseball/GameLauncher.java b/src/main/java/baseball/GameLauncher.java new file mode 100644 index 0000000000..8c80a1b9ef --- /dev/null +++ b/src/main/java/baseball/GameLauncher.java @@ -0,0 +1,7 @@ +package baseball; + +public class GameLauncher { + + + +} diff --git a/src/main/java/baseball/Result.java b/src/main/java/baseball/Result.java new file mode 100644 index 0000000000..4aa67236c4 --- /dev/null +++ b/src/main/java/baseball/Result.java @@ -0,0 +1,31 @@ +package baseball; + +public class Result { + int ballCount; + int strikeCount; + + public Result(int ballCount, int strikeCount) { + this.ballCount = ballCount; + this.strikeCount = strikeCount; + } + + public int getBallCount() { + return ballCount; + } + + public int getStrikeCount() { + return strikeCount; + } + + public void increaseBallCount() { + this.ballCount++; + } + + public void increaseStrikeCount() { + this.strikeCount++; + } + + + // 게임 결과 출력 + +} diff --git a/src/main/java/baseball/enums/PrintMessage.java b/src/main/java/baseball/enums/PrintMessage.java new file mode 100644 index 0000000000..8e16d38ce4 --- /dev/null +++ b/src/main/java/baseball/enums/PrintMessage.java @@ -0,0 +1,20 @@ +package baseball.enums; + +public enum PrintMessage { + START("숫자 야구 게임을 시작합니다." ), + INPUT_NUMBER("숫자를 입력해주세요 : "), + WIN("3개의 숫자를 모두 맞히셨습니다! 게임 종료"), + LOSE(""), + PLAY_NEXT_GAME_OR_NOT("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."), + NOTHING("낫씽"), + BALL("볼"), + STRIKE("스트라이크"); + + String korMessage; + + PrintMessage(String korMessage) { + this.korMessage = korMessage; + } + + +} From f86ddcaa829908a1ad1468f15811c14ba4fd2848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Fri, 3 Nov 2023 22:19:03 +0900 Subject: [PATCH 02/22] =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=9D=80=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=ED=96=88=EB=8B=A4.=20=EC=9D=B4=EC=A0=9C=20=EB=A6=AC?= =?UTF-8?q?=ED=8E=99=ED=86=A0=EB=A7=81=EC=9D=84=20=ED=95=B4=EC=95=BC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 64 +++++++++++++----- src/main/java/baseball/GameInputValue.java | 67 +++++++++++++++++++ src/main/java/baseball/PrintMessage.java | 22 ++++++ src/main/java/baseball/enums/GameFlag.java | 7 ++ src/main/java/baseball/enums/Message.java | 38 +++++++++++ src/main/java/baseball/enums/OrNot.java | 15 +++++ .../java/baseball/enums/PrintMessage.java | 20 ------ .../java/baseball/exception/Exception.java | 4 ++ 8 files changed, 201 insertions(+), 36 deletions(-) create mode 100644 src/main/java/baseball/GameInputValue.java create mode 100644 src/main/java/baseball/PrintMessage.java create mode 100644 src/main/java/baseball/enums/GameFlag.java create mode 100644 src/main/java/baseball/enums/Message.java create mode 100644 src/main/java/baseball/enums/OrNot.java delete mode 100644 src/main/java/baseball/enums/PrintMessage.java create mode 100644 src/main/java/baseball/exception/Exception.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 2a7bb85842..634d820a31 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,33 +1,65 @@ package baseball; +import baseball.enums.GameFlag; +import baseball.enums.Message; +import baseball.enums.OrNot; + import java.util.HashSet; import java.util.Random; +import java.util.Scanner; import java.util.Set; public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 - - // 랜덤한 값 서로 다른 수 3자리를 생성한다. TODO 함수로 뺄 예정 - Random random = new Random(); - random.setSeed(System.currentTimeMillis()); - Set targetSet = new HashSet<>(); - while (targetSet.size() < 3) { - int randomNum = random.nextInt(9)+1; - targetSet.add(randomNum); - } - - // 사용자 수 받아오기 + GameFlag flag = GameFlag.START; + PrintMessage.printlnMessage(Message.START); + while (flag == GameFlag.START) { + // 랜덤한 값 서로 다른 수 3자리를 생성한다. TODO 함수로 뺄 예정 + Random random = new Random(); + random.setSeed(System.currentTimeMillis()); + Set targetSet = new HashSet<>(); + while (targetSet.size() < 3) { + int randomNum = random.nextInt(9)+1; + targetSet.add(randomNum); + } + GameInputValue gameValue = new GameInputValue(targetSet.stream() + .map(String::valueOf) + .reduce("", String::concat)); + flag = GameFlag.ING; - // 사용자 수와 컴퓨터 수 검증하기 - - - // + // 맞출 때 까지 반복 + while (flag == GameFlag.ING){ + PrintMessage.printMessage(Message.INPUT_NUMBER); + Scanner sc = new Scanner(System.in); + gameValue.setUserInputValue(sc.nextLine()); + // 사용자 수와 컴퓨터 수 검증하기 + if (!gameValue.isEqaulsUserAndComputerValue()) { + // TODO 예외 사항 1. 입력 수가 3자리 이상일때 2. 입력수가 유효하지 않을 때(모두 숫자가 아닐시) + Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); + if (gameValue.isNothing()) { + PrintMessage.printlnMessage(Message.NOTHING); + }else{ + PrintMessage.printlnMessage(Message.makeHintMessage(result)); + } + continue; + } + PrintMessage.printlnMessage(Message.PLAY_NEXT_GAME_OR_NOT); + Scanner sc2 = new Scanner(System.in); + String answer = sc2.nextLine(); + if (answer.equals(OrNot.YES.getProcessCode())) { + flag = GameFlag.START; + break; + } + if (answer.equals(OrNot.NO.getProcessCode())) { + flag = GameFlag.END; + } + } + } } } diff --git a/src/main/java/baseball/GameInputValue.java b/src/main/java/baseball/GameInputValue.java new file mode 100644 index 0000000000..4dc611c8a7 --- /dev/null +++ b/src/main/java/baseball/GameInputValue.java @@ -0,0 +1,67 @@ +package baseball; + +import java.util.HashSet; + +public class GameInputValue { + private String userInputValue; + private final String computerValue; + + public GameInputValue(String computerValue) { + this.computerValue = computerValue; + this.userInputValue = ""; + } + + public String getUserInputValue() { + return userInputValue; + } + + public String getComputerValue() { + return computerValue; + } + + public void setUserInputValue(String userInputValue) { + this.userInputValue = userInputValue; + } + + public boolean isEqaulsUserAndComputerValue() { + return this.userInputValue.equals(this.computerValue); + } + + public int countSameNumber() { + if (isDuplicationNumberInUserInputValue()) { + // TODO 그에 맞는 예외처리 생각하기 + throw new IllegalArgumentException(); + } + int count = 0; + for (char c : this.userInputValue.toCharArray()) { + if (this.computerValue.contains(String.valueOf(c))) { + count++; + } + } + return count; + } + + public int countSamePositionAndNumber(){ + int count = 0; + char[] computerValueCharArr = computerValue.toCharArray(); + char[] userVauleCharArr = userInputValue.toCharArray(); + for (int i = 0; i < computerValueCharArr.length; i++) { + if (computerValueCharArr[i] == userVauleCharArr[i]) { + count++; + } + } + return count; + } + + public boolean isDuplicationNumberInUserInputValue() { + HashSet set = new HashSet<>(); + for (char c : this.userInputValue.toCharArray()) { + set.add(c); + } + return set.size() != 3; + } + + public boolean isNothing() { + return countSameNumber() == 0; + } +} diff --git a/src/main/java/baseball/PrintMessage.java b/src/main/java/baseball/PrintMessage.java new file mode 100644 index 0000000000..6bc7f5fcb4 --- /dev/null +++ b/src/main/java/baseball/PrintMessage.java @@ -0,0 +1,22 @@ +package baseball; + +import baseball.enums.Message; + +public class PrintMessage { + + public static void printlnMessage(Message message) { + System.out.println(message.getKorMessage()); + } + + public static void printMessage(Message message) { + System.out.print(message.getKorMessage()); + } + + public static void printMessage(String message) { + System.out.print(message); + } + + public static void printlnMessage(String message) { + System.out.println(message); + } +} diff --git a/src/main/java/baseball/enums/GameFlag.java b/src/main/java/baseball/enums/GameFlag.java new file mode 100644 index 0000000000..96d04c8179 --- /dev/null +++ b/src/main/java/baseball/enums/GameFlag.java @@ -0,0 +1,7 @@ +package baseball.enums; + +public enum GameFlag { + END, + START, + ING, +} diff --git a/src/main/java/baseball/enums/Message.java b/src/main/java/baseball/enums/Message.java new file mode 100644 index 0000000000..ef4e8d3c24 --- /dev/null +++ b/src/main/java/baseball/enums/Message.java @@ -0,0 +1,38 @@ +package baseball.enums; + +import baseball.Result; + +public enum Message { + START("숫자 야구 게임을 시작합니다." ), + INPUT_NUMBER("숫자를 입력해주세요 : "), + WIN("3개의 숫자를 모두 맞히셨습니다! 게임 종료"), + LOSE(""), + PLAY_NEXT_GAME_OR_NOT("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."), + NOTHING("낫씽"), + BALL("볼"), + STRIKE("스트라이크"); + + String korMessage; + + Message(String korMessage) { + this.korMessage = korMessage; + } + + public String getKorMessage() { + return korMessage; + } + + public static String makeHintMessage(Result result) { + StringBuilder builder = new StringBuilder(); + if (result.getBallCount() > 0) { + builder.append(String.format("%d볼",result.getBallCount())); + } + if (result.getStrikeCount() > 0) { + if (!builder.isEmpty()) { + builder.append(" "); + } + builder.append(String.format("%d스트라이크", result.getStrikeCount())); + } + return builder.toString(); + } +} diff --git a/src/main/java/baseball/enums/OrNot.java b/src/main/java/baseball/enums/OrNot.java new file mode 100644 index 0000000000..7fdb04ef38 --- /dev/null +++ b/src/main/java/baseball/enums/OrNot.java @@ -0,0 +1,15 @@ +package baseball.enums; + +public enum OrNot { + YES("1"), + NO("2"); + private String processCode; + + OrNot(String processCode) { + this.processCode = processCode; + } + + public String getProcessCode() { + return processCode; + } +} diff --git a/src/main/java/baseball/enums/PrintMessage.java b/src/main/java/baseball/enums/PrintMessage.java deleted file mode 100644 index 8e16d38ce4..0000000000 --- a/src/main/java/baseball/enums/PrintMessage.java +++ /dev/null @@ -1,20 +0,0 @@ -package baseball.enums; - -public enum PrintMessage { - START("숫자 야구 게임을 시작합니다." ), - INPUT_NUMBER("숫자를 입력해주세요 : "), - WIN("3개의 숫자를 모두 맞히셨습니다! 게임 종료"), - LOSE(""), - PLAY_NEXT_GAME_OR_NOT("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."), - NOTHING("낫씽"), - BALL("볼"), - STRIKE("스트라이크"); - - String korMessage; - - PrintMessage(String korMessage) { - this.korMessage = korMessage; - } - - -} diff --git a/src/main/java/baseball/exception/Exception.java b/src/main/java/baseball/exception/Exception.java new file mode 100644 index 0000000000..4bd848aa8b --- /dev/null +++ b/src/main/java/baseball/exception/Exception.java @@ -0,0 +1,4 @@ +package baseball.exception; + +public class Exception { +} From 5db856ce5e9a6342dadff1abc359b39cc60edce6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Sat, 4 Nov 2023 11:21:05 +0900 Subject: [PATCH 03/22] =?UTF-8?q?=EC=9E=98=EB=AA=BB=EB=90=9C=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EC=97=90=20=EB=8C=80=ED=95=9C=20=EC=BB=A4=EC=8A=A4?= =?UTF-8?q?=ED=85=80=20=EC=98=88=EC=99=B8=20=EC=83=9D=EC=84=B1=20=EB=B0=8F?= =?UTF-8?q?=20message=20setting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + src/main/java/baseball/Application.java | 1 + src/main/java/baseball/enums/ExceptionMessage.java | 13 +++++++++++++ src/main/java/baseball/exception/Exception.java | 4 ---- .../baseball/exception/WrongInputException.java | 8 ++++++++ 5 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 src/main/java/baseball/enums/ExceptionMessage.java delete mode 100644 src/main/java/baseball/exception/Exception.java create mode 100644 src/main/java/baseball/exception/WrongInputException.java diff --git a/build.gradle b/build.gradle index 080ed8c12e..76352c0838 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,7 @@ repositories { dependencies { implementation 'com.github.woowacourse-projects:mission-utils:1.1.0' + implementation 'org.projectlombok:lombok:1.18.22' } java { diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 634d820a31..c3c40d2f37 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -39,6 +39,7 @@ public static void main(String[] args) { // 사용자 수와 컴퓨터 수 검증하기 if (!gameValue.isEqaulsUserAndComputerValue()) { // TODO 예외 사항 1. 입력 수가 3자리 이상일때 2. 입력수가 유효하지 않을 때(모두 숫자가 아닐시) + Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); if (gameValue.isNothing()) { PrintMessage.printlnMessage(Message.NOTHING); diff --git a/src/main/java/baseball/enums/ExceptionMessage.java b/src/main/java/baseball/enums/ExceptionMessage.java new file mode 100644 index 0000000000..6957984445 --- /dev/null +++ b/src/main/java/baseball/enums/ExceptionMessage.java @@ -0,0 +1,13 @@ +package baseball.enums; + +public enum ExceptionMessage { + WRONG_INPUT_DEFAULT("잘못된 입력입니다."), + WRONG_INPUT_NOT_THREE_DIGITS("3자리만 입력 할 수 있습니다."), + WRONG_INPUT_NOT_VALID_VALUE("유효한 값(숫자)이 아닙니다."), + WRONG_INPUT_DUPLICATE_VALUE("숫자가 중복되어 있습니다."); + String message; + + ExceptionMessage(String message) { + this.message = message; + } +} diff --git a/src/main/java/baseball/exception/Exception.java b/src/main/java/baseball/exception/Exception.java deleted file mode 100644 index 4bd848aa8b..0000000000 --- a/src/main/java/baseball/exception/Exception.java +++ /dev/null @@ -1,4 +0,0 @@ -package baseball.exception; - -public class Exception { -} diff --git a/src/main/java/baseball/exception/WrongInputException.java b/src/main/java/baseball/exception/WrongInputException.java new file mode 100644 index 0000000000..8fff6dc529 --- /dev/null +++ b/src/main/java/baseball/exception/WrongInputException.java @@ -0,0 +1,8 @@ +package baseball.exception; + +public class WrongInputException extends RuntimeException { + + public WrongInputException(String message) { + super(message); + } +} From 5cfbedae596cd00077b13b689a43a8fb087e87b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Sat, 4 Nov 2023 21:11:19 +0900 Subject: [PATCH 04/22] =?UTF-8?q?=EC=9C=A0=ED=9A=A8=ED=95=9C=20=EA=B0=92?= =?UTF-8?q?=20=EC=B2=B4=ED=81=AC=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=20=EB=B3=B5=EA=B5=AC=EB=A1=9C=20=EC=B2=98=EB=A6=AC=ED=96=88?= =?UTF-8?q?=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 11 ++++-- src/main/java/baseball/GameInputValue.java | 35 ++++++++++++++++--- .../java/baseball/enums/ExceptionMessage.java | 6 +++- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index c3c40d2f37..ba11aadd16 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -3,6 +3,7 @@ import baseball.enums.GameFlag; import baseball.enums.Message; import baseball.enums.OrNot; +import baseball.exception.WrongInputException; import java.util.HashSet; import java.util.Random; @@ -12,7 +13,7 @@ public class Application { - public static void main(String[] args) { + public static void main(String[] args) throws WrongInputException { GameFlag flag = GameFlag.START; PrintMessage.printlnMessage(Message.START); while (flag == GameFlag.START) { @@ -35,11 +36,15 @@ public static void main(String[] args) { PrintMessage.printMessage(Message.INPUT_NUMBER); Scanner sc = new Scanner(System.in); gameValue.setUserInputValue(sc.nextLine()); + try { + gameValue.checkValidUserInput(); + }catch (WrongInputException exception){ + PrintMessage.printlnMessage(exception.getMessage()); + continue; + } // 사용자 수와 컴퓨터 수 검증하기 if (!gameValue.isEqaulsUserAndComputerValue()) { - // TODO 예외 사항 1. 입력 수가 3자리 이상일때 2. 입력수가 유효하지 않을 때(모두 숫자가 아닐시) - Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); if (gameValue.isNothing()) { PrintMessage.printlnMessage(Message.NOTHING); diff --git a/src/main/java/baseball/GameInputValue.java b/src/main/java/baseball/GameInputValue.java index 4dc611c8a7..0e7c241169 100644 --- a/src/main/java/baseball/GameInputValue.java +++ b/src/main/java/baseball/GameInputValue.java @@ -1,5 +1,8 @@ package baseball; +import baseball.enums.ExceptionMessage; +import baseball.exception.WrongInputException; + import java.util.HashSet; public class GameInputValue { @@ -28,10 +31,6 @@ public boolean isEqaulsUserAndComputerValue() { } public int countSameNumber() { - if (isDuplicationNumberInUserInputValue()) { - // TODO 그에 맞는 예외처리 생각하기 - throw new IllegalArgumentException(); - } int count = 0; for (char c : this.userInputValue.toCharArray()) { if (this.computerValue.contains(String.valueOf(c))) { @@ -64,4 +63,32 @@ public boolean isDuplicationNumberInUserInputValue() { public boolean isNothing() { return countSameNumber() == 0; } + + + public boolean checkValidUserInput() { + + if (!isThreeDigits()) { + throw new WrongInputException(ExceptionMessage.WRONG_INPUT_NOT_THREE_DIGITS.getMessage()); + } + + if (!isNumber()){ + throw new WrongInputException(ExceptionMessage.WRONG_INPUT_NOT_NUMBER.getMessage()); + } + + if(isDuplicationNumberInUserInputValue()){ + throw new WrongInputException(ExceptionMessage.WRONG_INPUT_DUPLICATE_VALUE.getMessage()); + } + + return true; + } + + + private boolean isThreeDigits() { + return userInputValue.length() == 3; + } + + private boolean isNumber() { + return userInputValue != null && userInputValue.matches("[-+]?\\d*\\.?\\d+"); + } + } diff --git a/src/main/java/baseball/enums/ExceptionMessage.java b/src/main/java/baseball/enums/ExceptionMessage.java index 6957984445..b474f22314 100644 --- a/src/main/java/baseball/enums/ExceptionMessage.java +++ b/src/main/java/baseball/enums/ExceptionMessage.java @@ -3,11 +3,15 @@ public enum ExceptionMessage { WRONG_INPUT_DEFAULT("잘못된 입력입니다."), WRONG_INPUT_NOT_THREE_DIGITS("3자리만 입력 할 수 있습니다."), - WRONG_INPUT_NOT_VALID_VALUE("유효한 값(숫자)이 아닙니다."), + WRONG_INPUT_NOT_NUMBER("숫자가 아닙니다."), WRONG_INPUT_DUPLICATE_VALUE("숫자가 중복되어 있습니다."); String message; ExceptionMessage(String message) { this.message = message; } + + public String getMessage() { + return message; + } } From 2793756de9adc64a7e205fe024a356ee16196433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Sat, 4 Nov 2023 21:19:01 +0900 Subject: [PATCH 05/22] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= =?UTF-8?q?=20=EB=B0=8F=20=EC=A3=BC=EC=84=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 27 ++++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index ba11aadd16..9ab66beae2 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -4,6 +4,7 @@ import baseball.enums.Message; import baseball.enums.OrNot; import baseball.exception.WrongInputException; +import camp.nextstep.edu.missionutils.Randoms; import java.util.HashSet; import java.util.Random; @@ -14,52 +15,58 @@ public class Application { public static void main(String[] args) throws WrongInputException { + // Game 시작 Setting GameFlag flag = GameFlag.START; PrintMessage.printlnMessage(Message.START); + while (flag == GameFlag.START) { - // 랜덤한 값 서로 다른 수 3자리를 생성한다. TODO 함수로 뺄 예정 - Random random = new Random(); - random.setSeed(System.currentTimeMillis()); + + // 컴퓨터 수 생성 Set targetSet = new HashSet<>(); while (targetSet.size() < 3) { - int randomNum = random.nextInt(9)+1; - targetSet.add(randomNum); + int randomNumber = Randoms.pickNumberInRange(1, 9); + targetSet.add(randomNumber); } GameInputValue gameValue = new GameInputValue(targetSet.stream() .map(String::valueOf) .reduce("", String::concat)); + flag = GameFlag.ING; // 맞출 때 까지 반복 - while (flag == GameFlag.ING){ + while (flag == GameFlag.ING) { PrintMessage.printMessage(Message.INPUT_NUMBER); Scanner sc = new Scanner(System.in); gameValue.setUserInputValue(sc.nextLine()); + + // 입력값 검증 try { gameValue.checkValidUserInput(); - }catch (WrongInputException exception){ + } catch (WrongInputException exception) { PrintMessage.printlnMessage(exception.getMessage()); continue; } - // 사용자 수와 컴퓨터 수 검증하기 + // 사용자 수와 컴퓨터 수 비교 if (!gameValue.isEqaulsUserAndComputerValue()) { Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); if (gameValue.isNothing()) { PrintMessage.printlnMessage(Message.NOTHING); - }else{ + } else { PrintMessage.printlnMessage(Message.makeHintMessage(result)); } continue; } + + // 리플레이 또는 종료 PrintMessage.printlnMessage(Message.PLAY_NEXT_GAME_OR_NOT); Scanner sc2 = new Scanner(System.in); String answer = sc2.nextLine(); + if (answer.equals(OrNot.YES.getProcessCode())) { flag = GameFlag.START; - break; } if (answer.equals(OrNot.NO.getProcessCode())) { flag = GameFlag.END; From 52b8e372de513ed066d848d109592004e0edb242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Sat, 4 Nov 2023 21:20:53 +0900 Subject: [PATCH 06/22] =?UTF-8?q?import=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 9ab66beae2..22cfa807ce 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -7,7 +7,6 @@ import camp.nextstep.edu.missionutils.Randoms; import java.util.HashSet; -import java.util.Random; import java.util.Scanner; import java.util.Set; From 1a1e3cdffd7276cbb2f57da6328e06e69db49356 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Sat, 4 Nov 2023 21:48:54 +0900 Subject: [PATCH 07/22] =?UTF-8?q?[=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=88=98?= =?UTF-8?q?=ED=96=89=20=EC=A4=91=20failed=20=EC=88=98=EC=A0=95]=20?= =?UTF-8?q?=EB=A9=94=EC=84=B8=EC=A7=80=20=EC=B6=9C=EB=A0=A5=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=20=EB=B0=8F=20=EB=A9=94=EC=84=B8=EC=A7=80=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=ED=94=84=EB=A1=9C=EC=84=B8=EC=8A=A4=20=EC=82=B4?= =?UTF-8?q?=EC=A7=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 32 ++++++++++----------- src/main/java/baseball/enums/Message.java | 2 +- src/test/java/baseball/ApplicationTest.java | 3 +- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 22cfa807ce..a7ecaac74c 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -48,27 +48,25 @@ public static void main(String[] args) throws WrongInputException { } // 사용자 수와 컴퓨터 수 비교 - if (!gameValue.isEqaulsUserAndComputerValue()) { - Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); - if (gameValue.isNothing()) { - PrintMessage.printlnMessage(Message.NOTHING); - } else { - PrintMessage.printlnMessage(Message.makeHintMessage(result)); - } - continue; + Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); + if (gameValue.isNothing()) { + PrintMessage.printlnMessage(Message.NOTHING); + } else { + PrintMessage.printlnMessage(Message.makeHintMessage(result)); } - // 리플레이 또는 종료 - PrintMessage.printlnMessage(Message.PLAY_NEXT_GAME_OR_NOT); - Scanner sc2 = new Scanner(System.in); - String answer = sc2.nextLine(); + if(gameValue.isEqaulsUserAndComputerValue()){ + PrintMessage.printlnMessage(Message.PLAY_NEXT_GAME_OR_NOT); + Scanner sc2 = new Scanner(System.in); + String answer = sc2.nextLine(); - if (answer.equals(OrNot.YES.getProcessCode())) { - flag = GameFlag.START; - } - if (answer.equals(OrNot.NO.getProcessCode())) { - flag = GameFlag.END; + if (answer.equals(OrNot.YES.getProcessCode())) { + flag = GameFlag.START; + } + if (answer.equals(OrNot.NO.getProcessCode())) { + flag = GameFlag.END; + } } } diff --git a/src/main/java/baseball/enums/Message.java b/src/main/java/baseball/enums/Message.java index ef4e8d3c24..6d0aa03b0a 100644 --- a/src/main/java/baseball/enums/Message.java +++ b/src/main/java/baseball/enums/Message.java @@ -8,7 +8,7 @@ public enum Message { WIN("3개의 숫자를 모두 맞히셨습니다! 게임 종료"), LOSE(""), PLAY_NEXT_GAME_OR_NOT("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."), - NOTHING("낫씽"), + NOTHING("낫싱"), BALL("볼"), STRIKE("스트라이크"); diff --git a/src/test/java/baseball/ApplicationTest.java b/src/test/java/baseball/ApplicationTest.java index 3fa29fa67b..c5a50c4ced 100644 --- a/src/test/java/baseball/ApplicationTest.java +++ b/src/test/java/baseball/ApplicationTest.java @@ -1,5 +1,6 @@ package baseball; +import baseball.exception.WrongInputException; import camp.nextstep.edu.missionutils.test.NsTest; import org.junit.jupiter.api.Test; @@ -24,7 +25,7 @@ class ApplicationTest extends NsTest { void 예외_테스트() { assertSimpleTest(() -> assertThatThrownBy(() -> runException("1234")) - .isInstanceOf(IllegalArgumentException.class) + .isInstanceOf(WrongInputException.class) ); } From aac9f69d83f7b5b15a15073ff01d82f00341d6f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Sat, 4 Nov 2023 22:03:25 +0900 Subject: [PATCH 08/22] =?UTF-8?q?=EC=A7=80=EC=9B=90=ED=95=B4=EC=A3=BC?= =?UTF-8?q?=EB=8A=94=20api=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98=EC=97=AC?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=EA=B3=BC=20=EB=9E=9C=EB=8D=A4=EC=88=98=EB=A5=BC=20=EA=B0=80?= =?UTF-8?q?=EC=A0=B8=EC=98=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 27 +++++++++---------- src/main/java/baseball/PrintMessage.java | 10 +++---- ...{Message.java => GameProgressMessage.java} | 8 +++--- src/test/java/baseball/ApplicationTest.java | 2 +- 4 files changed, 22 insertions(+), 25 deletions(-) rename src/main/java/baseball/enums/{Message.java => GameProgressMessage.java} (74%) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index a7ecaac74c..1291f4ca99 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,30 +1,29 @@ package baseball; import baseball.enums.GameFlag; -import baseball.enums.Message; +import baseball.enums.GameProgressMessage; import baseball.enums.OrNot; import baseball.exception.WrongInputException; -import camp.nextstep.edu.missionutils.Randoms; - import java.util.HashSet; -import java.util.Scanner; import java.util.Set; +import static camp.nextstep.edu.missionutils.Console.readLine; +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; + public class Application { public static void main(String[] args) throws WrongInputException { // Game 시작 Setting GameFlag flag = GameFlag.START; - PrintMessage.printlnMessage(Message.START); + PrintMessage.printlnMessage(GameProgressMessage.START); while (flag == GameFlag.START) { // 컴퓨터 수 생성 Set targetSet = new HashSet<>(); while (targetSet.size() < 3) { - int randomNumber = Randoms.pickNumberInRange(1, 9); - targetSet.add(randomNumber); + targetSet.add(pickNumberInRange(1, 9)); } GameInputValue gameValue = new GameInputValue(targetSet.stream() @@ -35,9 +34,8 @@ public static void main(String[] args) throws WrongInputException { // 맞출 때 까지 반복 while (flag == GameFlag.ING) { - PrintMessage.printMessage(Message.INPUT_NUMBER); - Scanner sc = new Scanner(System.in); - gameValue.setUserInputValue(sc.nextLine()); + PrintMessage.printMessage(GameProgressMessage.INPUT_NUMBER); + gameValue.setUserInputValue(readLine()); // 입력값 검증 try { @@ -50,16 +48,15 @@ public static void main(String[] args) throws WrongInputException { // 사용자 수와 컴퓨터 수 비교 Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); if (gameValue.isNothing()) { - PrintMessage.printlnMessage(Message.NOTHING); + PrintMessage.printlnMessage(GameProgressMessage.NOTHING); } else { - PrintMessage.printlnMessage(Message.makeHintMessage(result)); + PrintMessage.printlnMessage(GameProgressMessage.makeHintMessage(result)); } // 리플레이 또는 종료 if(gameValue.isEqaulsUserAndComputerValue()){ - PrintMessage.printlnMessage(Message.PLAY_NEXT_GAME_OR_NOT); - Scanner sc2 = new Scanner(System.in); - String answer = sc2.nextLine(); + PrintMessage.printlnMessage(GameProgressMessage.PLAY_NEXT_GAME_OR_NOT); + String answer = readLine(); if (answer.equals(OrNot.YES.getProcessCode())) { flag = GameFlag.START; diff --git a/src/main/java/baseball/PrintMessage.java b/src/main/java/baseball/PrintMessage.java index 6bc7f5fcb4..455a50b619 100644 --- a/src/main/java/baseball/PrintMessage.java +++ b/src/main/java/baseball/PrintMessage.java @@ -1,15 +1,15 @@ package baseball; -import baseball.enums.Message; +import baseball.enums.GameProgressMessage; public class PrintMessage { - public static void printlnMessage(Message message) { - System.out.println(message.getKorMessage()); + public static void printlnMessage(GameProgressMessage gameProgressMessage) { + System.out.println(gameProgressMessage.getKorMessage()); } - public static void printMessage(Message message) { - System.out.print(message.getKorMessage()); + public static void printMessage(GameProgressMessage gameProgressMessage) { + System.out.print(gameProgressMessage.getKorMessage()); } public static void printMessage(String message) { diff --git a/src/main/java/baseball/enums/Message.java b/src/main/java/baseball/enums/GameProgressMessage.java similarity index 74% rename from src/main/java/baseball/enums/Message.java rename to src/main/java/baseball/enums/GameProgressMessage.java index 6d0aa03b0a..339f112755 100644 --- a/src/main/java/baseball/enums/Message.java +++ b/src/main/java/baseball/enums/GameProgressMessage.java @@ -2,7 +2,7 @@ import baseball.Result; -public enum Message { +public enum GameProgressMessage { START("숫자 야구 게임을 시작합니다." ), INPUT_NUMBER("숫자를 입력해주세요 : "), WIN("3개의 숫자를 모두 맞히셨습니다! 게임 종료"), @@ -14,7 +14,7 @@ public enum Message { String korMessage; - Message(String korMessage) { + GameProgressMessage(String korMessage) { this.korMessage = korMessage; } @@ -25,13 +25,13 @@ public String getKorMessage() { public static String makeHintMessage(Result result) { StringBuilder builder = new StringBuilder(); if (result.getBallCount() > 0) { - builder.append(String.format("%d볼",result.getBallCount())); + builder.append(String.format("%d%s",result.getBallCount(), GameProgressMessage.BALL.korMessage)); } if (result.getStrikeCount() > 0) { if (!builder.isEmpty()) { builder.append(" "); } - builder.append(String.format("%d스트라이크", result.getStrikeCount())); + builder.append(String.format("%d%s", result.getStrikeCount(), GameProgressMessage.STRIKE.korMessage)); } return builder.toString(); } diff --git a/src/test/java/baseball/ApplicationTest.java b/src/test/java/baseball/ApplicationTest.java index c5a50c4ced..aa187b113e 100644 --- a/src/test/java/baseball/ApplicationTest.java +++ b/src/test/java/baseball/ApplicationTest.java @@ -15,7 +15,7 @@ class ApplicationTest extends NsTest { assertRandomNumberInRangeTest( () -> { run("246", "135", "1", "597", "589", "2"); - assertThat(output()).contains("낫싱", "3스트라이크", "1볼 1스트라이크", "3스트라이크", "게임 종료"); + assertThat(output()).contains("낫싱", "3스트라이크", "1볼 1스트라이크", "3스트라이크", "3개의 숫자를 모두 맞히셨습니다! 게임 종료"); }, 1, 3, 5, 5, 8, 9 ); From 01cbfdbac2a77288ed4c9bc67e77f3816774fbf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Sat, 4 Nov 2023 22:22:15 +0900 Subject: [PATCH 09/22] =?UTF-8?q?=EA=B8=B0=EB=B0=98=20=ED=95=84=EC=88=98?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 70 +---------------- src/main/java/baseball/Computer.java | 5 ++ src/main/java/baseball/GameLauncher.java | 7 -- src/main/java/baseball/Judgement.java | 4 + .../baseball/NumberBaseBallGameLauncher.java | 78 +++++++++++++++++++ src/main/java/baseball/User.java | 5 ++ 6 files changed, 95 insertions(+), 74 deletions(-) create mode 100644 src/main/java/baseball/Computer.java delete mode 100644 src/main/java/baseball/GameLauncher.java create mode 100644 src/main/java/baseball/Judgement.java create mode 100644 src/main/java/baseball/NumberBaseBallGameLauncher.java create mode 100644 src/main/java/baseball/User.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 1291f4ca99..10bbccf135 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,72 +1,8 @@ package baseball; - -import baseball.enums.GameFlag; -import baseball.enums.GameProgressMessage; -import baseball.enums.OrNot; -import baseball.exception.WrongInputException; -import java.util.HashSet; -import java.util.Set; - -import static camp.nextstep.edu.missionutils.Console.readLine; -import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; - public class Application { - - public static void main(String[] args) throws WrongInputException { - // Game 시작 Setting - GameFlag flag = GameFlag.START; - PrintMessage.printlnMessage(GameProgressMessage.START); - - while (flag == GameFlag.START) { - - // 컴퓨터 수 생성 - Set targetSet = new HashSet<>(); - while (targetSet.size() < 3) { - targetSet.add(pickNumberInRange(1, 9)); - } - - GameInputValue gameValue = new GameInputValue(targetSet.stream() - .map(String::valueOf) - .reduce("", String::concat)); - - flag = GameFlag.ING; - - // 맞출 때 까지 반복 - while (flag == GameFlag.ING) { - PrintMessage.printMessage(GameProgressMessage.INPUT_NUMBER); - gameValue.setUserInputValue(readLine()); - - // 입력값 검증 - try { - gameValue.checkValidUserInput(); - } catch (WrongInputException exception) { - PrintMessage.printlnMessage(exception.getMessage()); - continue; - } - - // 사용자 수와 컴퓨터 수 비교 - Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); - if (gameValue.isNothing()) { - PrintMessage.printlnMessage(GameProgressMessage.NOTHING); - } else { - PrintMessage.printlnMessage(GameProgressMessage.makeHintMessage(result)); - } - - // 리플레이 또는 종료 - if(gameValue.isEqaulsUserAndComputerValue()){ - PrintMessage.printlnMessage(GameProgressMessage.PLAY_NEXT_GAME_OR_NOT); - String answer = readLine(); - - if (answer.equals(OrNot.YES.getProcessCode())) { - flag = GameFlag.START; - } - if (answer.equals(OrNot.NO.getProcessCode())) { - flag = GameFlag.END; - } - } - } - - } + public static void main(String[] args) { + NumberBaseBallGameLauncher launcher = new NumberBaseBallGameLauncher(); + launcher.startGame(); } } diff --git a/src/main/java/baseball/Computer.java b/src/main/java/baseball/Computer.java new file mode 100644 index 0000000000..5c9099b1d3 --- /dev/null +++ b/src/main/java/baseball/Computer.java @@ -0,0 +1,5 @@ +package baseball; + +public class Computer { + +} diff --git a/src/main/java/baseball/GameLauncher.java b/src/main/java/baseball/GameLauncher.java deleted file mode 100644 index 8c80a1b9ef..0000000000 --- a/src/main/java/baseball/GameLauncher.java +++ /dev/null @@ -1,7 +0,0 @@ -package baseball; - -public class GameLauncher { - - - -} diff --git a/src/main/java/baseball/Judgement.java b/src/main/java/baseball/Judgement.java new file mode 100644 index 0000000000..7f3f1a66aa --- /dev/null +++ b/src/main/java/baseball/Judgement.java @@ -0,0 +1,4 @@ +package baseball; + +public class Judgement { +} diff --git a/src/main/java/baseball/NumberBaseBallGameLauncher.java b/src/main/java/baseball/NumberBaseBallGameLauncher.java new file mode 100644 index 0000000000..c5113d3435 --- /dev/null +++ b/src/main/java/baseball/NumberBaseBallGameLauncher.java @@ -0,0 +1,78 @@ +package baseball; + +import baseball.enums.GameFlag; +import baseball.enums.GameProgressMessage; +import baseball.enums.OrNot; +import baseball.exception.WrongInputException; + +import java.util.HashSet; +import java.util.Set; + +import static camp.nextstep.edu.missionutils.Console.readLine; +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; + +public class NumberBaseBallGameLauncher { + + public void startGame() { + init(); + } + + private void init() { + // Game 시작 Setting + GameFlag flag = GameFlag.START; + PrintMessage.printlnMessage(GameProgressMessage.START); + + while (flag == GameFlag.START) { + + // 컴퓨터 수 생성 + Set targetSet = new HashSet<>(); + while (targetSet.size() < 3) { + targetSet.add(pickNumberInRange(1, 9)); + } + + GameInputValue gameValue = new GameInputValue(targetSet.stream() + .map(String::valueOf) + .reduce("", String::concat)); + + flag = GameFlag.ING; + + // 맞출 때 까지 반복 + while (flag == GameFlag.ING) { + PrintMessage.printMessage(GameProgressMessage.INPUT_NUMBER); + gameValue.setUserInputValue(readLine()); + + // 입력값 검증 + try { + gameValue.checkValidUserInput(); + } catch (WrongInputException exception) { + PrintMessage.printlnMessage(exception.getMessage()); + continue; + } + + // 사용자 수와 컴퓨터 수 비교 + Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); + if (gameValue.isNothing()) { + PrintMessage.printlnMessage(GameProgressMessage.NOTHING); + } else { + PrintMessage.printlnMessage(GameProgressMessage.makeHintMessage(result)); + } + + // 리플레이 또는 종료 + if(gameValue.isEqaulsUserAndComputerValue()){ + PrintMessage.printlnMessage(GameProgressMessage.PLAY_NEXT_GAME_OR_NOT); + String answer = readLine(); + + if (answer.equals(OrNot.YES.getProcessCode())) { + flag = GameFlag.START; + } + if (answer.equals(OrNot.NO.getProcessCode())) { + flag = GameFlag.END; + } + } + } + + } + + } + +} diff --git a/src/main/java/baseball/User.java b/src/main/java/baseball/User.java new file mode 100644 index 0000000000..fd0f85b8bd --- /dev/null +++ b/src/main/java/baseball/User.java @@ -0,0 +1,5 @@ +package baseball; + +public class User { + +} From e420c892b52c4b5e2aaf96d4c30719291e213b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Sat, 4 Nov 2023 23:32:26 +0900 Subject: [PATCH 10/22] =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=20=EC=99=84=EB=A3=8C=20todo=20=EC=95=84=EC=89=AC?= =?UTF-8?q?=EC=9A=B4=EC=A0=90=20..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 2 +- src/main/java/baseball/Computer.java | 15 +++ src/main/java/baseball/GameInputValue.java | 7 +- src/main/java/baseball/GameLauncher.java | 11 +++ src/main/java/baseball/Judgement.java | 13 +++ .../baseball/NumberBaseBallGameLauncher.java | 97 +++++++++---------- src/main/java/baseball/User.java | 2 + 7 files changed, 91 insertions(+), 56 deletions(-) create mode 100644 src/main/java/baseball/GameLauncher.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 10bbccf135..64941c1224 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -2,7 +2,7 @@ public class Application { public static void main(String[] args) { - NumberBaseBallGameLauncher launcher = new NumberBaseBallGameLauncher(); + GameLauncher launcher = new NumberBaseBallGameLauncher(); launcher.startGame(); } } diff --git a/src/main/java/baseball/Computer.java b/src/main/java/baseball/Computer.java index 5c9099b1d3..a17d7cc8f2 100644 --- a/src/main/java/baseball/Computer.java +++ b/src/main/java/baseball/Computer.java @@ -1,5 +1,20 @@ package baseball; +import java.util.HashSet; +import java.util.Set; + +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; + public class Computer { + public String createGameValue() { + // 컴퓨터 수 생성 + Set targetSet = new HashSet<>(); + while (targetSet.size() < 3) { + targetSet.add(pickNumberInRange(1, 9)); + } + return targetSet.stream() + .map(String::valueOf) + .reduce("", String::concat); + } } diff --git a/src/main/java/baseball/GameInputValue.java b/src/main/java/baseball/GameInputValue.java index 0e7c241169..0dc8725d91 100644 --- a/src/main/java/baseball/GameInputValue.java +++ b/src/main/java/baseball/GameInputValue.java @@ -22,8 +22,10 @@ public String getComputerValue() { return computerValue; } + // TODO 조금 더 명확한 목적을 띄는 메서드 ... public void setUserInputValue(String userInputValue) { this.userInputValue = userInputValue; + checkValidUserInput(); } public boolean isEqaulsUserAndComputerValue() { @@ -65,8 +67,7 @@ public boolean isNothing() { } - public boolean checkValidUserInput() { - + public void checkValidUserInput() { if (!isThreeDigits()) { throw new WrongInputException(ExceptionMessage.WRONG_INPUT_NOT_THREE_DIGITS.getMessage()); } @@ -78,8 +79,6 @@ public boolean checkValidUserInput() { if(isDuplicationNumberInUserInputValue()){ throw new WrongInputException(ExceptionMessage.WRONG_INPUT_DUPLICATE_VALUE.getMessage()); } - - return true; } diff --git a/src/main/java/baseball/GameLauncher.java b/src/main/java/baseball/GameLauncher.java new file mode 100644 index 0000000000..e3d86e9812 --- /dev/null +++ b/src/main/java/baseball/GameLauncher.java @@ -0,0 +1,11 @@ +package baseball; + +public interface GameLauncher{ + void startGame(); + + void initGame(); + + void endGame(); + + void play(GameInputValue value); //TODO 확장성이 아쉬운 느낌 ..? +} diff --git a/src/main/java/baseball/Judgement.java b/src/main/java/baseball/Judgement.java index 7f3f1a66aa..e3fe42f971 100644 --- a/src/main/java/baseball/Judgement.java +++ b/src/main/java/baseball/Judgement.java @@ -1,4 +1,17 @@ package baseball; +import baseball.enums.GameProgressMessage; + public class Judgement { + + public void judge(GameInputValue gameValue) { + // 사용자 수와 컴퓨터 수 비교 => 판정하는 클래스가 해야할 일 + Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); + if (gameValue.isNothing()) { + PrintMessage.printlnMessage(GameProgressMessage.NOTHING); + } else { + PrintMessage.printlnMessage(GameProgressMessage.makeHintMessage(result)); + } + } + } diff --git a/src/main/java/baseball/NumberBaseBallGameLauncher.java b/src/main/java/baseball/NumberBaseBallGameLauncher.java index c5113d3435..162832b981 100644 --- a/src/main/java/baseball/NumberBaseBallGameLauncher.java +++ b/src/main/java/baseball/NumberBaseBallGameLauncher.java @@ -3,76 +3,71 @@ import baseball.enums.GameFlag; import baseball.enums.GameProgressMessage; import baseball.enums.OrNot; -import baseball.exception.WrongInputException; - -import java.util.HashSet; -import java.util.Set; import static camp.nextstep.edu.missionutils.Console.readLine; -import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; +public class NumberBaseBallGameLauncher implements GameLauncher{ -public class NumberBaseBallGameLauncher { + private GameFlag flag = GameFlag.START; + private Computer computer = new Computer(); + private Judgement judgement = new Judgement(); + @Override public void startGame() { - init(); - } - - private void init() { - // Game 시작 Setting - GameFlag flag = GameFlag.START; PrintMessage.printlnMessage(GameProgressMessage.START); + initGame(); + } - while (flag == GameFlag.START) { + @Override + public void initGame() { + if(flag == GameFlag.START){ + GameInputValue gameValue = new GameInputValue(computer.createGameValue()); + flag = GameFlag.ING; + play(gameValue); + } - // 컴퓨터 수 생성 - Set targetSet = new HashSet<>(); - while (targetSet.size() < 3) { - targetSet.add(pickNumberInRange(1, 9)); - } + } - GameInputValue gameValue = new GameInputValue(targetSet.stream() - .map(String::valueOf) - .reduce("", String::concat)); + @Override + public void endGame() {} - flag = GameFlag.ING; + @Override + public void play(GameInputValue gameValue) { + if (flag == GameFlag.ING) { + PrintMessage.printMessage(GameProgressMessage.INPUT_NUMBER); + gameValue.setUserInputValue(readLine()); + judgement.judge(gameValue); - // 맞출 때 까지 반복 - while (flag == GameFlag.ING) { - PrintMessage.printMessage(GameProgressMessage.INPUT_NUMBER); - gameValue.setUserInputValue(readLine()); + // 리플레이 또는 종료 + if(isWin(gameValue)){ + PrintMessage.printlnMessage(GameProgressMessage.PLAY_NEXT_GAME_OR_NOT); + replayOrEnd(); - // 입력값 검증 - try { - gameValue.checkValidUserInput(); - } catch (WrongInputException exception) { - PrintMessage.printlnMessage(exception.getMessage()); - continue; + if (flag == GameFlag.START) { + initGame(); } - // 사용자 수와 컴퓨터 수 비교 - Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); - if (gameValue.isNothing()) { - PrintMessage.printlnMessage(GameProgressMessage.NOTHING); - } else { - PrintMessage.printlnMessage(GameProgressMessage.makeHintMessage(result)); + if (flag == GameFlag.END) { + endGame(); } - // 리플레이 또는 종료 - if(gameValue.isEqaulsUserAndComputerValue()){ - PrintMessage.printlnMessage(GameProgressMessage.PLAY_NEXT_GAME_OR_NOT); - String answer = readLine(); - - if (answer.equals(OrNot.YES.getProcessCode())) { - flag = GameFlag.START; - } - if (answer.equals(OrNot.NO.getProcessCode())) { - flag = GameFlag.END; - } - } + return; } - + play(gameValue); } + } + public boolean isWin(GameInputValue gameValue) { + return gameValue.isEqaulsUserAndComputerValue(); + } + + public void replayOrEnd() { + String answer = readLine(); + if (answer.equals(OrNot.YES.getProcessCode())) { + flag = GameFlag.START; + } + if (answer.equals(OrNot.NO.getProcessCode())) { + flag = GameFlag.END; + } } } diff --git a/src/main/java/baseball/User.java b/src/main/java/baseball/User.java index fd0f85b8bd..a853a929e2 100644 --- a/src/main/java/baseball/User.java +++ b/src/main/java/baseball/User.java @@ -1,5 +1,7 @@ package baseball; public class User { + private void inputNumber() { + } } From cb3a5f19427930f524cbc1bada176b4d7a77fff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Mon, 6 Nov 2023 23:19:30 +0900 Subject: [PATCH 11/22] =?UTF-8?q?=EC=A0=9C=EB=AA=A9=20=EC=97=86=EB=8A=94?= =?UTF-8?q?=20=EB=8B=A4=EC=9D=B4=EC=96=B4=EA=B7=B8=EB=9E=A8.drawio?= =?UTF-8?q?=EC=9D=B4=20=EC=B6=94=EA=B0=80=EB=90=98=EC=97=88=EC=8A=B5?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...235\264\354\226\264\352\267\270\353\236\250.drawio" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" diff --git "a/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" "b/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" new file mode 100644 index 0000000000..3eefb84508 --- /dev/null +++ "b/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" @@ -0,0 +1,10 @@ + + + + + + + + + + From 81c2f92943bcd205d3c7fbed479cdb68f95982e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Tue, 7 Nov 2023 00:01:25 +0900 Subject: [PATCH 12/22] =?UTF-8?q?=EA=B0=9D=EC=B2=B4=EC=A7=80=ED=96=A5?= =?UTF-8?q?=EC=A0=81=20=EC=84=A4=EA=B3=84=20=EB=B0=8F=20=EC=9E=AC=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/README.md | 45 +++++++++++++++++++ src/main/java/baseball_oop/Application.java | 19 ++++++++ .../domain/game/BaseBallGame.java | 31 +++++++++++++ .../java/baseball_oop/domain/game/Game.java | 5 +++ .../domain/participant/AnswerGeneratable.java | 7 +++ .../domain/participant/computer/Computer.java | 6 +++ .../domain/participant/computer/Hitter.java | 11 +++++ .../domain/participant/judgment/Judgment.java | 8 ++++ .../domain/participant/judgment/Umpire.java | 11 +++++ .../domain/participant/player/Pitcher.java | 10 +++++ .../domain/participant/player/Player.java | 7 +++ src/main/java/baseball_oop/vo/Answer.java | 15 +++++++ src/main/java/baseball_oop/vo/Result.java | 7 +++ 13 files changed, 182 insertions(+) create mode 100644 src/main/java/README.md create mode 100644 src/main/java/baseball_oop/Application.java create mode 100644 src/main/java/baseball_oop/domain/game/BaseBallGame.java create mode 100644 src/main/java/baseball_oop/domain/game/Game.java create mode 100644 src/main/java/baseball_oop/domain/participant/AnswerGeneratable.java create mode 100644 src/main/java/baseball_oop/domain/participant/computer/Computer.java create mode 100644 src/main/java/baseball_oop/domain/participant/computer/Hitter.java create mode 100644 src/main/java/baseball_oop/domain/participant/judgment/Judgment.java create mode 100644 src/main/java/baseball_oop/domain/participant/judgment/Umpire.java create mode 100644 src/main/java/baseball_oop/domain/participant/player/Pitcher.java create mode 100644 src/main/java/baseball_oop/domain/participant/player/Player.java create mode 100644 src/main/java/baseball_oop/vo/Answer.java create mode 100644 src/main/java/baseball_oop/vo/Result.java diff --git a/src/main/java/README.md b/src/main/java/README.md new file mode 100644 index 0000000000..1ea1fe1656 --- /dev/null +++ b/src/main/java/README.md @@ -0,0 +1,45 @@ +같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. +예) 상대방(컴퓨터)의 수가 425일 때 +123을 제시한 경우 : 1스트라이크 +456을 제시한 경우 : 1볼 1스트라이크 +789를 제시한 경우 : 낫싱 +위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. +컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. +게임 플레이어는 컴퓨터가 생각하고 있는 서로 다른 3개의 숫자를 입력하고, +컴퓨터는 입력한 숫자에 대한 결과를 출력한다. +이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다. + +사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다. + +# 요구사항 분석 +- 컴퓨터가 수를 선택한다. + - 수는 3자리 숫자이고, 랜덤으로 정해진다. +- 정답을 맞출 때 까지 반복한다. +- 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. +- 컴퓨터수와 사용자의 수를 비교해 위치는 틀리지만 수가 맞으면 볼을 출력 +- 컴퓨터수와 사용자의 수를 비교해 위치도 맞고 수가 맞으면 스트라이크를 출력 +- 컴퓨터수와 사용자의 수를 비교해 위치도, 수도 맞은게 없다면 낫싱을 출력 +- 사용자가 수를 입력할 수 있다. +- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생 후 종료 +- 컴퓨터의 수를 맞추면 게임 종료. 종료 후 한번 더 할지, 끝낼지 입력받는다. + +# 역할을 나눈다. + +## 답을 생성하는 역할 +- 컴퓨터가 수를 선택한다. + - 수는 서로 다른 3자리 숫자이고, 랜덤으로 정해진다. + +## 정답을 입력을 할 수 있는 역할 +- 사용자가 수를 입력할 수 있다. + - 수는 서로 다른 3자리 숫자이다. (검증필요) +- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생 후 종료 + +## 정답이 맞는지 판단하고 힌트를 주는 역할 +- 컴퓨터수와 사용자의 수를 비교해 위치는 틀리지만 수가 맞으면 볼을 출력 +- 컴퓨터수와 사용자의 수를 비교해 위치도 맞고 수가 맞으면 스트라이크를 출력 +- 컴퓨터수와 사용자의 수를 비교해 위치도, 수도 맞은게 없다면 낫싱을 출력 + +## 게임을 제어하는 역할 +- 정답을 맞출 때 까지 반복한다. +- 정답을 맞추면 게임 종료. + - 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다. 종료 후 한번 더 할지, 끝낼지 입력받는다. \ No newline at end of file diff --git a/src/main/java/baseball_oop/Application.java b/src/main/java/baseball_oop/Application.java new file mode 100644 index 0000000000..0954a25088 --- /dev/null +++ b/src/main/java/baseball_oop/Application.java @@ -0,0 +1,19 @@ +package baseball_oop; + +import baseball_oop.domain.game.BaseBallGame; +import baseball_oop.domain.game.Game; +import baseball_oop.domain.participant.computer.Hitter; +import baseball_oop.domain.participant.player.Pitcher; +import baseball_oop.domain.participant.judgment.Umpire; + +public class Application { + + public static void main(String[] args) { + Game game = new BaseBallGame( + new Hitter(), + new Pitcher(), + new Umpire() + ); + game.start(); + } +} diff --git a/src/main/java/baseball_oop/domain/game/BaseBallGame.java b/src/main/java/baseball_oop/domain/game/BaseBallGame.java new file mode 100644 index 0000000000..9937dc6c0b --- /dev/null +++ b/src/main/java/baseball_oop/domain/game/BaseBallGame.java @@ -0,0 +1,31 @@ +package baseball_oop.domain.game; + +import baseball_oop.vo.Answer; +import baseball_oop.domain.participant.computer.Computer; +import baseball_oop.domain.participant.judgment.Judgment; +import baseball_oop.domain.participant.player.Player; +import baseball_oop.vo.Result; + +public class BaseBallGame implements Game { + private final Computer computer; + private final Judgment judgment; + private final Player player; + + public BaseBallGame(Computer computer, Player player, Judgment judgment) { + this.computer = computer; + this.judgment = judgment; + this.player = player; + } + @Override + public void start() { + do { + play(); + } while (true); + } + + private void play() { + Answer answer = computer.generateAnswer(); + Answer input = player.generateAnswer(); + Result result = judgment.judge(answer, input); + } +} diff --git a/src/main/java/baseball_oop/domain/game/Game.java b/src/main/java/baseball_oop/domain/game/Game.java new file mode 100644 index 0000000000..2309d09612 --- /dev/null +++ b/src/main/java/baseball_oop/domain/game/Game.java @@ -0,0 +1,5 @@ +package baseball_oop.domain.game; + +public interface Game { + void start(); +} diff --git a/src/main/java/baseball_oop/domain/participant/AnswerGeneratable.java b/src/main/java/baseball_oop/domain/participant/AnswerGeneratable.java new file mode 100644 index 0000000000..67da4a6a66 --- /dev/null +++ b/src/main/java/baseball_oop/domain/participant/AnswerGeneratable.java @@ -0,0 +1,7 @@ +package baseball_oop.domain.participant; + +import baseball_oop.vo.Answer; + +public interface AnswerGeneratable { + Answer generateAnswer(); +} diff --git a/src/main/java/baseball_oop/domain/participant/computer/Computer.java b/src/main/java/baseball_oop/domain/participant/computer/Computer.java new file mode 100644 index 0000000000..4040ace6f3 --- /dev/null +++ b/src/main/java/baseball_oop/domain/participant/computer/Computer.java @@ -0,0 +1,6 @@ +package baseball_oop.domain.participant.computer; + +import baseball_oop.domain.participant.AnswerGeneratable; + +public interface Computer extends AnswerGeneratable { +} diff --git a/src/main/java/baseball_oop/domain/participant/computer/Hitter.java b/src/main/java/baseball_oop/domain/participant/computer/Hitter.java new file mode 100644 index 0000000000..c7588aa797 --- /dev/null +++ b/src/main/java/baseball_oop/domain/participant/computer/Hitter.java @@ -0,0 +1,11 @@ +package baseball_oop.domain.participant.computer; + +import baseball_oop.vo.Answer; + +public class Hitter implements Computer { + + @Override + public Answer generateAnswer() { + return null; + } +} diff --git a/src/main/java/baseball_oop/domain/participant/judgment/Judgment.java b/src/main/java/baseball_oop/domain/participant/judgment/Judgment.java new file mode 100644 index 0000000000..79d4eb887c --- /dev/null +++ b/src/main/java/baseball_oop/domain/participant/judgment/Judgment.java @@ -0,0 +1,8 @@ +package baseball_oop.domain.participant.judgment; + +import baseball_oop.vo.Answer; +import baseball_oop.vo.Result; + +public interface Judgment { + Result judge(Answer answer, Answer input); +} diff --git a/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java b/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java new file mode 100644 index 0000000000..6cb170bdb3 --- /dev/null +++ b/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java @@ -0,0 +1,11 @@ +package baseball_oop.domain.participant.judgment; + +import baseball_oop.vo.Answer; +import baseball_oop.vo.Result; + +public class Umpire implements Judgment { + @Override + public Result judge(Answer answer, Answer input) { + return null; + } +} diff --git a/src/main/java/baseball_oop/domain/participant/player/Pitcher.java b/src/main/java/baseball_oop/domain/participant/player/Pitcher.java new file mode 100644 index 0000000000..fac18f267f --- /dev/null +++ b/src/main/java/baseball_oop/domain/participant/player/Pitcher.java @@ -0,0 +1,10 @@ +package baseball_oop.domain.participant.player; + +import baseball_oop.vo.Answer; + +public class Pitcher implements Player { + @Override + public Answer generateAnswer() { + return null; + } +} diff --git a/src/main/java/baseball_oop/domain/participant/player/Player.java b/src/main/java/baseball_oop/domain/participant/player/Player.java new file mode 100644 index 0000000000..4e7de6ab38 --- /dev/null +++ b/src/main/java/baseball_oop/domain/participant/player/Player.java @@ -0,0 +1,7 @@ +package baseball_oop.domain.participant.player; + +import baseball_oop.domain.participant.AnswerGeneratable; + +public interface Player extends AnswerGeneratable { + +} diff --git a/src/main/java/baseball_oop/vo/Answer.java b/src/main/java/baseball_oop/vo/Answer.java new file mode 100644 index 0000000000..f4e69da95b --- /dev/null +++ b/src/main/java/baseball_oop/vo/Answer.java @@ -0,0 +1,15 @@ +package baseball_oop.vo; + +import java.util.List; + +public class Answer implements Comparable { + List values; + private final int LENGTH_LIMIT = 3; + + + + @Override + public int compareTo(Answer o) { + return 0; + } +} diff --git a/src/main/java/baseball_oop/vo/Result.java b/src/main/java/baseball_oop/vo/Result.java new file mode 100644 index 0000000000..de781edd54 --- /dev/null +++ b/src/main/java/baseball_oop/vo/Result.java @@ -0,0 +1,7 @@ +package baseball_oop.vo; + +public class Result { + int ballCount; + int strikeCount; + boolean isWin; +} From 7201201ad5c3eb57d960a0bf1b9ba70c0c04d5c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Tue, 7 Nov 2023 00:05:59 +0900 Subject: [PATCH 13/22] =?UTF-8?q?=EC=A0=9C=EB=AA=A9=20=EC=97=86=EB=8A=94?= =?UTF-8?q?=20=EB=8B=A4=EC=9D=B4=EC=96=B4=EA=B7=B8=EB=9E=A8.drawio=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\226\264\352\267\270\353\236\250.drawio" | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git "a/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" "b/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" index 3eefb84508..5365afefb4 100644 --- "a/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" +++ "b/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" @@ -1,9 +1,59 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ec163383a0e80268f55144fa4bf7cf81564a4a30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Tue, 7 Nov 2023 16:18:40 +0900 Subject: [PATCH 14/22] =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=EC=84=A4?= =?UTF-8?q?=EA=B3=84=20=EB=AC=B8=EC=84=9C=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 | 48 +++++++++++++++ ...54\235\270\354\204\244\352\263\204.drawio" | 1 + ...54\226\264\352\267\270\353\236\250.drawio" | 60 ------------------- src/main/java/README.md | 45 -------------- 4 files changed, 49 insertions(+), 105 deletions(-) create mode 100644 "docs/\353\217\204\353\251\224\354\235\270\354\204\244\352\263\204.drawio" delete mode 100644 "docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" delete mode 100644 src/main/java/README.md diff --git a/docs/README.md b/docs/README.md index e69de29bb2..e3914a259d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,48 @@ +# 요구사항 분석 +- 컴퓨터가 수를 선택한다. + - 수는 3자리 숫자이고, 랜덤으로 정해진다. +- 정답을 맞출 때 까지 반복한다. +- 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. +- 컴퓨터수와 사용자의 수를 비교해 위치는 틀리지만 수가 맞으면 볼을 출력 +- 컴퓨터수와 사용자의 수를 비교해 위치도 맞고 수가 맞으면 스트라이크를 출력 +- 컴퓨터수와 사용자의 수를 비교해 위치도, 수도 맞은게 없다면 낫싱을 출력 +- 사용자가 수를 입력할 수 있다. +- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생 후 종료 +- 컴퓨터의 수를 맞추면 게임 종료. 종료 후 한번 더 할지, 끝낼지 입력받는다. + +# 역할을 나눈다. + +## 답을 생성하는 역할 +- 컴퓨터가 수를 선택한다. + - 수는 서로 다른 3자리 숫자이고, 랜덤으로 정해진다. + +## 정답을 입력을 할 수 있는 역할 +- 사용자가 수를 입력할 수 있다. + - 수는 서로 다른 3자리 숫자이다. (검증필요) +- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생 후 종료 + +## 정답이 맞는지 판단하고 힌트를 주는 역할 +- 컴퓨터수와 사용자의 수를 비교해 위치는 틀리지만 수가 맞으면 볼을 출력 +- 컴퓨터수와 사용자의 수를 비교해 위치도 맞고 수가 맞으면 스트라이크를 출력 +- 컴퓨터수와 사용자의 수를 비교해 위치도, 수도 맞은게 없다면 낫싱을 출력 + +## 게임을 제어하는 역할 +- 정답을 맞출 때 까지 반복한다. +- 정답을 맞추면 게임 종료. + - 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다. 종료 후 한번 더 할지, 끝낼지 입력받는다. + +# 도메인 설계 및 기능 목록 + +## BaseBallGame +- 게임을 제어하는 역할 + +## Hitter +- 답을 생성하는 역할 + +## Pitcher +- 정답을 입력을 할 수 있는 역할 + + +## Umpire +- 정답이 맞는지 판단하고 힌트를 주는 역할 + diff --git "a/docs/\353\217\204\353\251\224\354\235\270\354\204\244\352\263\204.drawio" "b/docs/\353\217\204\353\251\224\354\235\270\354\204\244\352\263\204.drawio" new file mode 100644 index 0000000000..9c24293507 --- /dev/null +++ "b/docs/\353\217\204\353\251\224\354\235\270\354\204\244\352\263\204.drawio" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" "b/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" deleted file mode 100644 index 5365afefb4..0000000000 --- "a/docs/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/java/README.md b/src/main/java/README.md deleted file mode 100644 index 1ea1fe1656..0000000000 --- a/src/main/java/README.md +++ /dev/null @@ -1,45 +0,0 @@ -같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. -예) 상대방(컴퓨터)의 수가 425일 때 -123을 제시한 경우 : 1스트라이크 -456을 제시한 경우 : 1볼 1스트라이크 -789를 제시한 경우 : 낫싱 -위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. -컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. -게임 플레이어는 컴퓨터가 생각하고 있는 서로 다른 3개의 숫자를 입력하고, -컴퓨터는 입력한 숫자에 대한 결과를 출력한다. -이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다. - -사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다. - -# 요구사항 분석 -- 컴퓨터가 수를 선택한다. - - 수는 3자리 숫자이고, 랜덤으로 정해진다. -- 정답을 맞출 때 까지 반복한다. -- 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. -- 컴퓨터수와 사용자의 수를 비교해 위치는 틀리지만 수가 맞으면 볼을 출력 -- 컴퓨터수와 사용자의 수를 비교해 위치도 맞고 수가 맞으면 스트라이크를 출력 -- 컴퓨터수와 사용자의 수를 비교해 위치도, 수도 맞은게 없다면 낫싱을 출력 -- 사용자가 수를 입력할 수 있다. -- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생 후 종료 -- 컴퓨터의 수를 맞추면 게임 종료. 종료 후 한번 더 할지, 끝낼지 입력받는다. - -# 역할을 나눈다. - -## 답을 생성하는 역할 -- 컴퓨터가 수를 선택한다. - - 수는 서로 다른 3자리 숫자이고, 랜덤으로 정해진다. - -## 정답을 입력을 할 수 있는 역할 -- 사용자가 수를 입력할 수 있다. - - 수는 서로 다른 3자리 숫자이다. (검증필요) -- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생 후 종료 - -## 정답이 맞는지 판단하고 힌트를 주는 역할 -- 컴퓨터수와 사용자의 수를 비교해 위치는 틀리지만 수가 맞으면 볼을 출력 -- 컴퓨터수와 사용자의 수를 비교해 위치도 맞고 수가 맞으면 스트라이크를 출력 -- 컴퓨터수와 사용자의 수를 비교해 위치도, 수도 맞은게 없다면 낫싱을 출력 - -## 게임을 제어하는 역할 -- 정답을 맞출 때 까지 반복한다. -- 정답을 맞추면 게임 종료. - - 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다. 종료 후 한번 더 할지, 끝낼지 입력받는다. \ No newline at end of file From 91a03fc59b217defc2b19b269347ff7a7ab02702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Tue, 7 Nov 2023 16:47:59 +0900 Subject: [PATCH 15/22] =?UTF-8?q?Answer=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=ED=86=B5=ED=95=B4=20=EA=B0=81=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EB=B3=84=EB=A1=9C=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EB=8B=A4=EB=A5=B4?= =?UTF-8?q?=EA=B2=8C=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8A=94=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=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 +++--- .../domain/participant/computer/Hitter.java | 2 +- .../domain/participant/player/Pitcher.java | 4 ++-- src/main/java/baseball_oop/vo/Answer.java | 19 +++++++++++++++++++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index e3914a259d..0d2cb7a366 100644 --- a/docs/README.md +++ b/docs/README.md @@ -36,12 +36,12 @@ ## BaseBallGame - 게임을 제어하는 역할 -## Hitter +## Hitter - 답을 생성하는 역할 - + (왜 컴퓨터가 Hitter냐? 플레이어가 포수에게 주는 볼을 잡아서 스트라이크를 면해야되기 때문에 타자입니다.) ## Pitcher - 정답을 입력을 할 수 있는 역할 - + (왜 플레이어가 Pitcher냐? 3스트라이크 즉, 3번 타자가 못치게끔 포수에게 잘 던져줘야 하기 때문에 투수입니다.) ## Umpire - 정답이 맞는지 판단하고 힌트를 주는 역할 diff --git a/src/main/java/baseball_oop/domain/participant/computer/Hitter.java b/src/main/java/baseball_oop/domain/participant/computer/Hitter.java index c7588aa797..d24cf23efa 100644 --- a/src/main/java/baseball_oop/domain/participant/computer/Hitter.java +++ b/src/main/java/baseball_oop/domain/participant/computer/Hitter.java @@ -6,6 +6,6 @@ public class Hitter implements Computer { @Override public Answer generateAnswer() { - return null; + return new Answer(); } } diff --git a/src/main/java/baseball_oop/domain/participant/player/Pitcher.java b/src/main/java/baseball_oop/domain/participant/player/Pitcher.java index fac18f267f..05038e9169 100644 --- a/src/main/java/baseball_oop/domain/participant/player/Pitcher.java +++ b/src/main/java/baseball_oop/domain/participant/player/Pitcher.java @@ -1,10 +1,10 @@ package baseball_oop.domain.participant.player; import baseball_oop.vo.Answer; - +import static camp.nextstep.edu.missionutils.Console.readLine; public class Pitcher implements Player { @Override public Answer generateAnswer() { - return null; + return new Answer(readLine()); } } diff --git a/src/main/java/baseball_oop/vo/Answer.java b/src/main/java/baseball_oop/vo/Answer.java index f4e69da95b..fa442690fd 100644 --- a/src/main/java/baseball_oop/vo/Answer.java +++ b/src/main/java/baseball_oop/vo/Answer.java @@ -1,12 +1,31 @@ package baseball_oop.vo; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; public class Answer implements Comparable { List values; private final int LENGTH_LIMIT = 3; + public Answer() { + Set set = new HashSet<>(); + while (set.size() < LENGTH_LIMIT) { + set.add(pickNumberInRange(1, 9)); + } + this.values = set.stream().toList(); + } + + public Answer(String input) { + this.values = Arrays.stream(input.split("")) + .map(Integer::parseInt) + .collect(Collectors.toList()); + } @Override public int compareTo(Answer o) { From 0a41f1cf2f7f278aa8ba9f9cf5b7da63272e6035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Tue, 7 Nov 2023 16:58:50 +0900 Subject: [PATCH 16/22] =?UTF-8?q?=EA=B2=8C=EC=9E=84=EC=9D=84=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=20=ED=95=A0=EC=A7=80=20=EB=8B=A4=EC=8B=9C=ED=95=A0?= =?UTF-8?q?=EC=A7=80=201,2=EC=9D=98=20=EC=BD=94=EB=93=9C=EB=A5=BC=20ReplyO?= =?UTF-8?q?rNot=20enum=EC=9C=BC=EB=A1=9C=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball_oop/domain/game/BaseBallGame.java | 6 +++++- src/main/java/baseball_oop/enums/ReplyOrNot.java | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/main/java/baseball_oop/enums/ReplyOrNot.java diff --git a/src/main/java/baseball_oop/domain/game/BaseBallGame.java b/src/main/java/baseball_oop/domain/game/BaseBallGame.java index 9937dc6c0b..a2876d8e55 100644 --- a/src/main/java/baseball_oop/domain/game/BaseBallGame.java +++ b/src/main/java/baseball_oop/domain/game/BaseBallGame.java @@ -1,11 +1,14 @@ package baseball_oop.domain.game; +import baseball_oop.enums.ReplyOrNot; import baseball_oop.vo.Answer; import baseball_oop.domain.participant.computer.Computer; import baseball_oop.domain.participant.judgment.Judgment; import baseball_oop.domain.participant.player.Player; import baseball_oop.vo.Result; +import static camp.nextstep.edu.missionutils.Console.readLine; + public class BaseBallGame implements Game { private final Computer computer; private final Judgment judgment; @@ -18,9 +21,10 @@ public BaseBallGame(Computer computer, Player player, Judgment judgment) { } @Override public void start() { + String command; do { play(); - } while (true); + } while (ReplyOrNot.REPLY.getCode().equals(command = readLine())); } private void play() { diff --git a/src/main/java/baseball_oop/enums/ReplyOrNot.java b/src/main/java/baseball_oop/enums/ReplyOrNot.java new file mode 100644 index 0000000000..c2a23d714f --- /dev/null +++ b/src/main/java/baseball_oop/enums/ReplyOrNot.java @@ -0,0 +1,16 @@ +package baseball_oop.enums; + +public enum ReplyOrNot { + REPLY("1"), + END("2"); + + public final String code; + + ReplyOrNot(String code) { + this.code = code; + } + + public String getCode() { + return code; + } +} From 0fe393bc6d965a3d2f6984044d95363c404f703e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Tue, 7 Nov 2023 19:23:16 +0900 Subject: [PATCH 17/22] =?UTF-8?q?=EA=B0=92=EC=97=90=20=EB=8C=80=ED=95=9C?= =?UTF-8?q?=20=ED=9C=B4=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=A6=9D=20=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- .../domain/game/BaseBallGame.java | 12 +++-- .../domain/participant/judgment/Umpire.java | 3 ++ .../baseball_oop/enums/ExceptionMessage.java | 17 ++++++ src/main/java/baseball_oop/vo/Answer.java | 52 +++++++++++++++++-- src/main/java/baseball_oop/vo/Result.java | 18 +++++-- 6 files changed, 92 insertions(+), 12 deletions(-) create mode 100644 src/main/java/baseball_oop/enums/ExceptionMessage.java diff --git a/docs/README.md b/docs/README.md index 0d2cb7a366..f7f7291b69 100644 --- a/docs/README.md +++ b/docs/README.md @@ -29,7 +29,7 @@ ## 게임을 제어하는 역할 - 정답을 맞출 때 까지 반복한다. - 정답을 맞추면 게임 종료. - - 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다. 종료 후 한번 더 할지, 끝낼지 입력받는다. + - 게임을 종료 후 한번 더 할지, 끝낼지 입력받는다. # 도메인 설계 및 기능 목록 diff --git a/src/main/java/baseball_oop/domain/game/BaseBallGame.java b/src/main/java/baseball_oop/domain/game/BaseBallGame.java index a2876d8e55..4efa6970d0 100644 --- a/src/main/java/baseball_oop/domain/game/BaseBallGame.java +++ b/src/main/java/baseball_oop/domain/game/BaseBallGame.java @@ -24,12 +24,18 @@ public void start() { String command; do { play(); - } while (ReplyOrNot.REPLY.getCode().equals(command = readLine())); + command = readLine(); + + } while (ReplyOrNot.REPLY.getCode().equals(command)); } private void play() { Answer answer = computer.generateAnswer(); - Answer input = player.generateAnswer(); - Result result = judgment.judge(answer, input); + Answer input; + Result result = null; + while (!result.isWin()) { + input = player.generateAnswer(); + result = judgment.judge(answer, input); + } } } diff --git a/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java b/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java index 6cb170bdb3..fc46156d51 100644 --- a/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java +++ b/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java @@ -8,4 +8,7 @@ public class Umpire implements Judgment { public Result judge(Answer answer, Answer input) { return null; } + + + } diff --git a/src/main/java/baseball_oop/enums/ExceptionMessage.java b/src/main/java/baseball_oop/enums/ExceptionMessage.java new file mode 100644 index 0000000000..c768746fe8 --- /dev/null +++ b/src/main/java/baseball_oop/enums/ExceptionMessage.java @@ -0,0 +1,17 @@ +package baseball_oop.enums; + +public enum ExceptionMessage { + WRONG_INPUT_DEFAULT("잘못된 입력입니다."), + WRONG_INPUT_NOT_THREE_DIGITS("3자리만 입력 할 수 있습니다."), + WRONG_INPUT_NOT_NUMBER("숫자가 아닙니다."), + WRONG_INPUT_DUPLICATE_VALUE("숫자가 중복되어 있습니다."); + String message; + + ExceptionMessage(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } +} diff --git a/src/main/java/baseball_oop/vo/Answer.java b/src/main/java/baseball_oop/vo/Answer.java index fa442690fd..9a8181c127 100644 --- a/src/main/java/baseball_oop/vo/Answer.java +++ b/src/main/java/baseball_oop/vo/Answer.java @@ -1,5 +1,7 @@ package baseball_oop.vo; +import baseball_oop.enums.ExceptionMessage; + import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -8,9 +10,9 @@ import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; -public class Answer implements Comparable { +public class Answer { List values; - private final int LENGTH_LIMIT = 3; + private final static int LENGTH_LIMIT = 3; public Answer() { Set set = new HashSet<>(); @@ -22,13 +24,53 @@ public Answer() { public Answer(String input) { + checkValidation(input); this.values = Arrays.stream(input.split("")) .map(Integer::parseInt) .collect(Collectors.toList()); } - @Override - public int compareTo(Answer o) { - return 0; + private static void checkValidation(String value) { + checkLength(value); + checkDuplicate(value); + checkNumber(value); + } + + private static void checkDuplicate(String value) { + if (hasDuplicate(value)) { + throw new IllegalArgumentException(ExceptionMessage.WRONG_INPUT_DUPLICATE_VALUE.getMessage()); + } + } + + private static void checkLength(String value) { + if (!isLimitedLength(value)) { + throw new IllegalArgumentException(ExceptionMessage.WRONG_INPUT_NOT_THREE_DIGITS.getMessage()); + } + } + + private static void checkNumber(String value) { + if (!isNumber(value)) { + throw new IllegalArgumentException(ExceptionMessage.WRONG_INPUT_NOT_NUMBER.getMessage()); + } + } + + private static boolean isLimitedLength(String value) { + return value.length() == LENGTH_LIMIT; + } + + private static boolean hasDuplicate(String value) { + Set set = new HashSet<>(); + for (String str : value.split("")) { + set.add(str); + } + return set.size() != value.length(); + } + + private static boolean isNumber(String value) { + return value != null && value.matches("[-+]?\\d*\\.?\\d+"); + } + + public Result compare(Answer input) { + return null; } } diff --git a/src/main/java/baseball_oop/vo/Result.java b/src/main/java/baseball_oop/vo/Result.java index de781edd54..3ee799f9bf 100644 --- a/src/main/java/baseball_oop/vo/Result.java +++ b/src/main/java/baseball_oop/vo/Result.java @@ -1,7 +1,19 @@ package baseball_oop.vo; public class Result { - int ballCount; - int strikeCount; - boolean isWin; + private int ballCount; + private int strikeCount; + + private final int LENGTH_LIMIT = 3; + + + public Result(int ballCount, int strikeCount) { + this.ballCount = ballCount; + this.strikeCount = strikeCount; + } + + public boolean isWin() { + return this.strikeCount == LENGTH_LIMIT; + } + } From e70e39480053740c1190ec46c58c6203e4d9d20f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Thu, 9 Nov 2023 09:32:46 +0900 Subject: [PATCH 18/22] =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B1=85?= =?UTF-8?q?=EC=9E=84=20=EB=B6=84=EB=A6=AC,=20=EC=9E=90=EC=9E=98=ED=95=9C?= =?UTF-8?q?=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/game/BaseBallGame.java | 54 +++++++++++++++++-- .../{ReplyOrNot.java => ReplayOrNot.java} | 6 +-- 2 files changed, 52 insertions(+), 8 deletions(-) rename src/main/java/baseball_oop/enums/{ReplyOrNot.java => ReplayOrNot.java} (69%) diff --git a/src/main/java/baseball_oop/domain/game/BaseBallGame.java b/src/main/java/baseball_oop/domain/game/BaseBallGame.java index 4efa6970d0..587d1c58cc 100644 --- a/src/main/java/baseball_oop/domain/game/BaseBallGame.java +++ b/src/main/java/baseball_oop/domain/game/BaseBallGame.java @@ -1,6 +1,6 @@ package baseball_oop.domain.game; -import baseball_oop.enums.ReplyOrNot; +import baseball_oop.enums.ReplayOrNot; import baseball_oop.vo.Answer; import baseball_oop.domain.participant.computer.Computer; import baseball_oop.domain.participant.judgment.Judgment; @@ -23,19 +23,63 @@ public BaseBallGame(Computer computer, Player player, Judgment judgment) { public void start() { String command; do { + PrintMessage.printGameStart(); play(); command = readLine(); - - } while (ReplyOrNot.REPLY.getCode().equals(command)); + } while (askReplay()); } private void play() { Answer answer = computer.generateAnswer(); Answer input; Result result = null; - while (!result.isWin()) { - input = player.generateAnswer(); + while (!gameEnd(result)) { + input = selectInputToPlayer(); result = judgment.judge(answer, input); } } + + private static boolean askReplay() { + PrintMessage.printGameReplayOrNot(); + return readLine().equals(ReplayOrNot.REPLAY.getCode()); + } + + private static boolean gameEnd(Result result) { + if (result == null) { + return false; + } + + boolean isEnd = result.isWin(); + if (isEnd) { + PrintMessage.printWinAndEnd(); + } + return isEnd; + } + + private Answer selectInputToPlayer() { + PrintMessage.printRequestInputNumber(); + return player.generateAnswer(); + } + + private static class PrintMessage { + private final static String START = "숫자 야구 게임을 시작합니다."; + private final static String INPUT_NUMBER = "숫자를 입력해주세요 : "; + private final static String WIN = "3개의 숫자를 모두 맞히셨습니다! 게임 종료"; + private final static String PLAY_NEXT_GAME_OR_NOT = "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; + private final static String NOTHING = "낫싱"; + private final static String BALL = "볼"; + private final static String STRIKE = "스트라이크"; + public static void printRequestInputNumber() { + System.out.println(INPUT_NUMBER); + } + public static void printGameStart() { + System.out.println(START); + } + public static void printWinAndEnd() { + System.out.println(WIN); + } + public static void printGameReplayOrNot() { + System.out.println(PLAY_NEXT_GAME_OR_NOT); + } + } } diff --git a/src/main/java/baseball_oop/enums/ReplyOrNot.java b/src/main/java/baseball_oop/enums/ReplayOrNot.java similarity index 69% rename from src/main/java/baseball_oop/enums/ReplyOrNot.java rename to src/main/java/baseball_oop/enums/ReplayOrNot.java index c2a23d714f..028d268888 100644 --- a/src/main/java/baseball_oop/enums/ReplyOrNot.java +++ b/src/main/java/baseball_oop/enums/ReplayOrNot.java @@ -1,12 +1,12 @@ package baseball_oop.enums; -public enum ReplyOrNot { - REPLY("1"), +public enum ReplayOrNot { + REPLAY("1"), END("2"); public final String code; - ReplyOrNot(String code) { + ReplayOrNot(String code) { this.code = code; } From e237bcc7b6a37fcb8b1a435640dacd8050e9acb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Thu, 9 Nov 2023 10:37:10 +0900 Subject: [PATCH 19/22] =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20result=EB=A5=BC=20?= =?UTF-8?q?=ED=8C=90=EB=8B=A8=ED=95=98=EC=97=AC=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=ED=95=98=EA=B3=A0=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=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 --- .../domain/game/BaseBallGame.java | 32 ++++++++++++++++- .../domain/participant/judgment/Umpire.java | 7 ++-- src/main/java/baseball_oop/vo/Answer.java | 35 +++++++++++++++---- src/main/java/baseball_oop/vo/Result.java | 13 +++++-- 4 files changed, 73 insertions(+), 14 deletions(-) diff --git a/src/main/java/baseball_oop/domain/game/BaseBallGame.java b/src/main/java/baseball_oop/domain/game/BaseBallGame.java index 587d1c58cc..8272b1c96b 100644 --- a/src/main/java/baseball_oop/domain/game/BaseBallGame.java +++ b/src/main/java/baseball_oop/domain/game/BaseBallGame.java @@ -35,7 +35,7 @@ private void play() { Result result = null; while (!gameEnd(result)) { input = selectInputToPlayer(); - result = judgment.judge(answer, input); + printHint(result = judgment.judge(answer, input)); } } @@ -61,6 +61,28 @@ private Answer selectInputToPlayer() { return player.generateAnswer(); } + private void printHint(Result result) { + if (result == null) { + return; + } + int strikeCount = result.getStrikeCount(); + int ballCount = result.getBallCount(); + + if (result.getBallCount() == 0 && result.getStrikeCount() == 0) { + PrintMessage.printResultNothing(); + return; + } + if (strikeCount != 0 && ballCount == 0) { + PrintMessage.printMessage(strikeCount + PrintMessage.STRIKE); + } + if (strikeCount == 0 && ballCount != 0) { + PrintMessage.printMessage(ballCount + PrintMessage.BALL); + } + if (strikeCount != 0 && ballCount != 0) { + PrintMessage.printMessage(ballCount + PrintMessage.BALL + " " + strikeCount + PrintMessage.STRIKE); + } + } + private static class PrintMessage { private final static String START = "숫자 야구 게임을 시작합니다."; private final static String INPUT_NUMBER = "숫자를 입력해주세요 : "; @@ -81,5 +103,13 @@ public static void printWinAndEnd() { public static void printGameReplayOrNot() { System.out.println(PLAY_NEXT_GAME_OR_NOT); } + + public static void printResultNothing() { + System.out.println(NOTHING); + } + + public static void printMessage(String message) { + System.out.println(message); + } } } diff --git a/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java b/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java index fc46156d51..32a6295396 100644 --- a/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java +++ b/src/main/java/baseball_oop/domain/participant/judgment/Umpire.java @@ -6,9 +6,10 @@ public class Umpire implements Judgment { @Override public Result judge(Answer answer, Answer input) { - return null; - } - + int strikeCount = Answer.countSameElementAndPosition(answer.getValues(), input.getValues()); + int ballCount = Answer.countContainElement(answer.getValues(), input.getValues()) - strikeCount; + return new Result(strikeCount, ballCount); + } } diff --git a/src/main/java/baseball_oop/vo/Answer.java b/src/main/java/baseball_oop/vo/Answer.java index 9a8181c127..3623101b49 100644 --- a/src/main/java/baseball_oop/vo/Answer.java +++ b/src/main/java/baseball_oop/vo/Answer.java @@ -2,16 +2,13 @@ import baseball_oop.enums.ExceptionMessage; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; public class Answer { - List values; + List values = new ArrayList<>(); private final static int LENGTH_LIMIT = 3; public Answer() { @@ -70,7 +67,31 @@ private static boolean isNumber(String value) { return value != null && value.matches("[-+]?\\d*\\.?\\d+"); } - public Result compare(Answer input) { - return null; + public static int countSameElementAndPosition(List answerValues, List inputValues) { + int count = 0; + int index = 0; + for (Integer value : answerValues) { + if (value.equals(inputValues.get(index))) { + count++; + } + index++; + } + return count; + } + + public static int countContainElement(List answerValues, List inputValues) { + int count = 0; + int index = 0; + for (Integer value : answerValues) { + if (inputValues.contains(value)) { + count++; + } + index++; + } + return count; + } + + public List getValues() { + return this.values; } } diff --git a/src/main/java/baseball_oop/vo/Result.java b/src/main/java/baseball_oop/vo/Result.java index 3ee799f9bf..f6673e0803 100644 --- a/src/main/java/baseball_oop/vo/Result.java +++ b/src/main/java/baseball_oop/vo/Result.java @@ -1,19 +1,26 @@ package baseball_oop.vo; public class Result { - private int ballCount; private int strikeCount; + private int ballCount; private final int LENGTH_LIMIT = 3; - public Result(int ballCount, int strikeCount) { - this.ballCount = ballCount; + public Result(int strikeCount, int ballCount) { this.strikeCount = strikeCount; + this.ballCount = ballCount; } public boolean isWin() { return this.strikeCount == LENGTH_LIMIT; } + public int getStrikeCount() { + return strikeCount; + } + + public int getBallCount() { + return ballCount; + } } From b3642f0bcd784a56851cbbec2fa6a0ab81ca5739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Thu, 9 Nov 2023 10:45:41 +0900 Subject: [PATCH 20/22] =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EC=A4=84=EB=B0=94?= =?UTF-8?q?=EA=BF=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball_oop/domain/game/BaseBallGame.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball_oop/domain/game/BaseBallGame.java b/src/main/java/baseball_oop/domain/game/BaseBallGame.java index 8272b1c96b..923e66d78b 100644 --- a/src/main/java/baseball_oop/domain/game/BaseBallGame.java +++ b/src/main/java/baseball_oop/domain/game/BaseBallGame.java @@ -22,10 +22,9 @@ public BaseBallGame(Computer computer, Player player, Judgment judgment) { @Override public void start() { String command; + PrintMessage.printGameStart(); do { - PrintMessage.printGameStart(); play(); - command = readLine(); } while (askReplay()); } @@ -61,7 +60,7 @@ private Answer selectInputToPlayer() { return player.generateAnswer(); } - private void printHint(Result result) { + private void printHint(Result result) { // TODO 코드리팩토링 필요 if (result == null) { return; } @@ -92,7 +91,7 @@ private static class PrintMessage { private final static String BALL = "볼"; private final static String STRIKE = "스트라이크"; public static void printRequestInputNumber() { - System.out.println(INPUT_NUMBER); + System.out.print(INPUT_NUMBER); } public static void printGameStart() { System.out.println(START); From 81e5708b5cf495813c400cd3a2bc71d0780c2e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Thu, 9 Nov 2023 10:47:47 +0900 Subject: [PATCH 21/22] =?UTF-8?q?=EC=A0=88=EC=B0=A8=EC=A7=80=ED=96=A5?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=84=A4=EA=B3=84=ED=96=88?= =?UTF-8?q?=EB=8D=98=20=ED=8C=A8=ED=82=A4=EC=A7=80(=EC=9D=B4=EC=A0=84=20?= =?UTF-8?q?=EC=99=84=EC=84=B1=EB=B3=B8)=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 8 -- src/main/java/baseball/Computer.java | 20 ---- src/main/java/baseball/GameInputValue.java | 93 ------------------- src/main/java/baseball/GameLauncher.java | 11 --- src/main/java/baseball/Judgement.java | 17 ---- .../baseball/NumberBaseBallGameLauncher.java | 73 --------------- src/main/java/baseball/PrintMessage.java | 22 ----- src/main/java/baseball/Result.java | 31 ------- src/main/java/baseball/User.java | 7 -- .../java/baseball/enums/ExceptionMessage.java | 17 ---- src/main/java/baseball/enums/GameFlag.java | 7 -- .../baseball/enums/GameProgressMessage.java | 38 -------- src/main/java/baseball/enums/OrNot.java | 15 --- .../exception/WrongInputException.java | 8 -- 14 files changed, 367 deletions(-) delete mode 100644 src/main/java/baseball/Application.java delete mode 100644 src/main/java/baseball/Computer.java delete mode 100644 src/main/java/baseball/GameInputValue.java delete mode 100644 src/main/java/baseball/GameLauncher.java delete mode 100644 src/main/java/baseball/Judgement.java delete mode 100644 src/main/java/baseball/NumberBaseBallGameLauncher.java delete mode 100644 src/main/java/baseball/PrintMessage.java delete mode 100644 src/main/java/baseball/Result.java delete mode 100644 src/main/java/baseball/User.java delete mode 100644 src/main/java/baseball/enums/ExceptionMessage.java delete mode 100644 src/main/java/baseball/enums/GameFlag.java delete mode 100644 src/main/java/baseball/enums/GameProgressMessage.java delete mode 100644 src/main/java/baseball/enums/OrNot.java delete mode 100644 src/main/java/baseball/exception/WrongInputException.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java deleted file mode 100644 index 64941c1224..0000000000 --- a/src/main/java/baseball/Application.java +++ /dev/null @@ -1,8 +0,0 @@ -package baseball; -public class Application { - - public static void main(String[] args) { - GameLauncher launcher = new NumberBaseBallGameLauncher(); - launcher.startGame(); - } -} diff --git a/src/main/java/baseball/Computer.java b/src/main/java/baseball/Computer.java deleted file mode 100644 index a17d7cc8f2..0000000000 --- a/src/main/java/baseball/Computer.java +++ /dev/null @@ -1,20 +0,0 @@ -package baseball; - -import java.util.HashSet; -import java.util.Set; - -import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; - -public class Computer { - public String createGameValue() { - // 컴퓨터 수 생성 - Set targetSet = new HashSet<>(); - while (targetSet.size() < 3) { - targetSet.add(pickNumberInRange(1, 9)); - } - - return targetSet.stream() - .map(String::valueOf) - .reduce("", String::concat); - } -} diff --git a/src/main/java/baseball/GameInputValue.java b/src/main/java/baseball/GameInputValue.java deleted file mode 100644 index 0dc8725d91..0000000000 --- a/src/main/java/baseball/GameInputValue.java +++ /dev/null @@ -1,93 +0,0 @@ -package baseball; - -import baseball.enums.ExceptionMessage; -import baseball.exception.WrongInputException; - -import java.util.HashSet; - -public class GameInputValue { - private String userInputValue; - private final String computerValue; - - public GameInputValue(String computerValue) { - this.computerValue = computerValue; - this.userInputValue = ""; - } - - public String getUserInputValue() { - return userInputValue; - } - - public String getComputerValue() { - return computerValue; - } - - // TODO 조금 더 명확한 목적을 띄는 메서드 ... - public void setUserInputValue(String userInputValue) { - this.userInputValue = userInputValue; - checkValidUserInput(); - } - - public boolean isEqaulsUserAndComputerValue() { - return this.userInputValue.equals(this.computerValue); - } - - public int countSameNumber() { - int count = 0; - for (char c : this.userInputValue.toCharArray()) { - if (this.computerValue.contains(String.valueOf(c))) { - count++; - } - } - return count; - } - - public int countSamePositionAndNumber(){ - int count = 0; - char[] computerValueCharArr = computerValue.toCharArray(); - char[] userVauleCharArr = userInputValue.toCharArray(); - for (int i = 0; i < computerValueCharArr.length; i++) { - if (computerValueCharArr[i] == userVauleCharArr[i]) { - count++; - } - } - return count; - } - - public boolean isDuplicationNumberInUserInputValue() { - HashSet set = new HashSet<>(); - for (char c : this.userInputValue.toCharArray()) { - set.add(c); - } - return set.size() != 3; - } - - public boolean isNothing() { - return countSameNumber() == 0; - } - - - public void checkValidUserInput() { - if (!isThreeDigits()) { - throw new WrongInputException(ExceptionMessage.WRONG_INPUT_NOT_THREE_DIGITS.getMessage()); - } - - if (!isNumber()){ - throw new WrongInputException(ExceptionMessage.WRONG_INPUT_NOT_NUMBER.getMessage()); - } - - if(isDuplicationNumberInUserInputValue()){ - throw new WrongInputException(ExceptionMessage.WRONG_INPUT_DUPLICATE_VALUE.getMessage()); - } - } - - - private boolean isThreeDigits() { - return userInputValue.length() == 3; - } - - private boolean isNumber() { - return userInputValue != null && userInputValue.matches("[-+]?\\d*\\.?\\d+"); - } - -} diff --git a/src/main/java/baseball/GameLauncher.java b/src/main/java/baseball/GameLauncher.java deleted file mode 100644 index e3d86e9812..0000000000 --- a/src/main/java/baseball/GameLauncher.java +++ /dev/null @@ -1,11 +0,0 @@ -package baseball; - -public interface GameLauncher{ - void startGame(); - - void initGame(); - - void endGame(); - - void play(GameInputValue value); //TODO 확장성이 아쉬운 느낌 ..? -} diff --git a/src/main/java/baseball/Judgement.java b/src/main/java/baseball/Judgement.java deleted file mode 100644 index e3fe42f971..0000000000 --- a/src/main/java/baseball/Judgement.java +++ /dev/null @@ -1,17 +0,0 @@ -package baseball; - -import baseball.enums.GameProgressMessage; - -public class Judgement { - - public void judge(GameInputValue gameValue) { - // 사용자 수와 컴퓨터 수 비교 => 판정하는 클래스가 해야할 일 - Result result = new Result(gameValue.countSameNumber() - gameValue.countSamePositionAndNumber(), gameValue.countSamePositionAndNumber()); - if (gameValue.isNothing()) { - PrintMessage.printlnMessage(GameProgressMessage.NOTHING); - } else { - PrintMessage.printlnMessage(GameProgressMessage.makeHintMessage(result)); - } - } - -} diff --git a/src/main/java/baseball/NumberBaseBallGameLauncher.java b/src/main/java/baseball/NumberBaseBallGameLauncher.java deleted file mode 100644 index 162832b981..0000000000 --- a/src/main/java/baseball/NumberBaseBallGameLauncher.java +++ /dev/null @@ -1,73 +0,0 @@ -package baseball; - -import baseball.enums.GameFlag; -import baseball.enums.GameProgressMessage; -import baseball.enums.OrNot; - -import static camp.nextstep.edu.missionutils.Console.readLine; -public class NumberBaseBallGameLauncher implements GameLauncher{ - - private GameFlag flag = GameFlag.START; - private Computer computer = new Computer(); - private Judgement judgement = new Judgement(); - - @Override - public void startGame() { - PrintMessage.printlnMessage(GameProgressMessage.START); - initGame(); - } - - @Override - public void initGame() { - if(flag == GameFlag.START){ - GameInputValue gameValue = new GameInputValue(computer.createGameValue()); - flag = GameFlag.ING; - play(gameValue); - } - - } - - @Override - public void endGame() {} - - @Override - public void play(GameInputValue gameValue) { - if (flag == GameFlag.ING) { - PrintMessage.printMessage(GameProgressMessage.INPUT_NUMBER); - gameValue.setUserInputValue(readLine()); - judgement.judge(gameValue); - - // 리플레이 또는 종료 - if(isWin(gameValue)){ - PrintMessage.printlnMessage(GameProgressMessage.PLAY_NEXT_GAME_OR_NOT); - replayOrEnd(); - - if (flag == GameFlag.START) { - initGame(); - } - - if (flag == GameFlag.END) { - endGame(); - } - - return; - } - play(gameValue); - } - } - - public boolean isWin(GameInputValue gameValue) { - return gameValue.isEqaulsUserAndComputerValue(); - } - - public void replayOrEnd() { - String answer = readLine(); - if (answer.equals(OrNot.YES.getProcessCode())) { - flag = GameFlag.START; - } - if (answer.equals(OrNot.NO.getProcessCode())) { - flag = GameFlag.END; - } - } - -} diff --git a/src/main/java/baseball/PrintMessage.java b/src/main/java/baseball/PrintMessage.java deleted file mode 100644 index 455a50b619..0000000000 --- a/src/main/java/baseball/PrintMessage.java +++ /dev/null @@ -1,22 +0,0 @@ -package baseball; - -import baseball.enums.GameProgressMessage; - -public class PrintMessage { - - public static void printlnMessage(GameProgressMessage gameProgressMessage) { - System.out.println(gameProgressMessage.getKorMessage()); - } - - public static void printMessage(GameProgressMessage gameProgressMessage) { - System.out.print(gameProgressMessage.getKorMessage()); - } - - public static void printMessage(String message) { - System.out.print(message); - } - - public static void printlnMessage(String message) { - System.out.println(message); - } -} diff --git a/src/main/java/baseball/Result.java b/src/main/java/baseball/Result.java deleted file mode 100644 index 4aa67236c4..0000000000 --- a/src/main/java/baseball/Result.java +++ /dev/null @@ -1,31 +0,0 @@ -package baseball; - -public class Result { - int ballCount; - int strikeCount; - - public Result(int ballCount, int strikeCount) { - this.ballCount = ballCount; - this.strikeCount = strikeCount; - } - - public int getBallCount() { - return ballCount; - } - - public int getStrikeCount() { - return strikeCount; - } - - public void increaseBallCount() { - this.ballCount++; - } - - public void increaseStrikeCount() { - this.strikeCount++; - } - - - // 게임 결과 출력 - -} diff --git a/src/main/java/baseball/User.java b/src/main/java/baseball/User.java deleted file mode 100644 index a853a929e2..0000000000 --- a/src/main/java/baseball/User.java +++ /dev/null @@ -1,7 +0,0 @@ -package baseball; - -public class User { - private void inputNumber() { - - } -} diff --git a/src/main/java/baseball/enums/ExceptionMessage.java b/src/main/java/baseball/enums/ExceptionMessage.java deleted file mode 100644 index b474f22314..0000000000 --- a/src/main/java/baseball/enums/ExceptionMessage.java +++ /dev/null @@ -1,17 +0,0 @@ -package baseball.enums; - -public enum ExceptionMessage { - WRONG_INPUT_DEFAULT("잘못된 입력입니다."), - WRONG_INPUT_NOT_THREE_DIGITS("3자리만 입력 할 수 있습니다."), - WRONG_INPUT_NOT_NUMBER("숫자가 아닙니다."), - WRONG_INPUT_DUPLICATE_VALUE("숫자가 중복되어 있습니다."); - String message; - - ExceptionMessage(String message) { - this.message = message; - } - - public String getMessage() { - return message; - } -} diff --git a/src/main/java/baseball/enums/GameFlag.java b/src/main/java/baseball/enums/GameFlag.java deleted file mode 100644 index 96d04c8179..0000000000 --- a/src/main/java/baseball/enums/GameFlag.java +++ /dev/null @@ -1,7 +0,0 @@ -package baseball.enums; - -public enum GameFlag { - END, - START, - ING, -} diff --git a/src/main/java/baseball/enums/GameProgressMessage.java b/src/main/java/baseball/enums/GameProgressMessage.java deleted file mode 100644 index 339f112755..0000000000 --- a/src/main/java/baseball/enums/GameProgressMessage.java +++ /dev/null @@ -1,38 +0,0 @@ -package baseball.enums; - -import baseball.Result; - -public enum GameProgressMessage { - START("숫자 야구 게임을 시작합니다." ), - INPUT_NUMBER("숫자를 입력해주세요 : "), - WIN("3개의 숫자를 모두 맞히셨습니다! 게임 종료"), - LOSE(""), - PLAY_NEXT_GAME_OR_NOT("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."), - NOTHING("낫싱"), - BALL("볼"), - STRIKE("스트라이크"); - - String korMessage; - - GameProgressMessage(String korMessage) { - this.korMessage = korMessage; - } - - public String getKorMessage() { - return korMessage; - } - - public static String makeHintMessage(Result result) { - StringBuilder builder = new StringBuilder(); - if (result.getBallCount() > 0) { - builder.append(String.format("%d%s",result.getBallCount(), GameProgressMessage.BALL.korMessage)); - } - if (result.getStrikeCount() > 0) { - if (!builder.isEmpty()) { - builder.append(" "); - } - builder.append(String.format("%d%s", result.getStrikeCount(), GameProgressMessage.STRIKE.korMessage)); - } - return builder.toString(); - } -} diff --git a/src/main/java/baseball/enums/OrNot.java b/src/main/java/baseball/enums/OrNot.java deleted file mode 100644 index 7fdb04ef38..0000000000 --- a/src/main/java/baseball/enums/OrNot.java +++ /dev/null @@ -1,15 +0,0 @@ -package baseball.enums; - -public enum OrNot { - YES("1"), - NO("2"); - private String processCode; - - OrNot(String processCode) { - this.processCode = processCode; - } - - public String getProcessCode() { - return processCode; - } -} diff --git a/src/main/java/baseball/exception/WrongInputException.java b/src/main/java/baseball/exception/WrongInputException.java deleted file mode 100644 index 8fff6dc529..0000000000 --- a/src/main/java/baseball/exception/WrongInputException.java +++ /dev/null @@ -1,8 +0,0 @@ -package baseball.exception; - -public class WrongInputException extends RuntimeException { - - public WrongInputException(String message) { - super(message); - } -} From 1e13076fa63bef1f1d76c225c61d545dcf0ea88e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=83=9C?= Date: Thu, 9 Nov 2023 10:50:31 +0900 Subject: [PATCH 22/22] =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../java/{baseball => baseball_oop}/ApplicationTest.java | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) rename src/test/java/{baseball => baseball_oop}/ApplicationTest.java (89%) diff --git a/README.md b/README.md index e7af80b4ff..df56327130 100644 --- a/README.md +++ b/README.md @@ -139,6 +139,6 @@ while (computer.size() < 3) { ## ✏️ 과제 진행 요구 사항 -- 미션은 [java-baseball-6](https://github.com/woowacourse-precourse/java-baseball-6) 저장소를 Fork & Clone해 시작한다. +- 미션은 [java-baseball_oop-6](https://github.com/woowacourse-precourse/java-baseball-6) 저장소를 Fork & Clone해 시작한다. - **기능을 구현하기 전 `docs/README.md`에 구현할 기능 목록을 정리**해 추가한다. - 과제 진행 및 제출 방법은 [프리코스 과제 제출](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) 문서를 참고한다. diff --git a/src/test/java/baseball/ApplicationTest.java b/src/test/java/baseball_oop/ApplicationTest.java similarity index 89% rename from src/test/java/baseball/ApplicationTest.java rename to src/test/java/baseball_oop/ApplicationTest.java index aa187b113e..a044acc8fc 100644 --- a/src/test/java/baseball/ApplicationTest.java +++ b/src/test/java/baseball_oop/ApplicationTest.java @@ -1,6 +1,5 @@ -package baseball; +package baseball_oop; -import baseball.exception.WrongInputException; import camp.nextstep.edu.missionutils.test.NsTest; import org.junit.jupiter.api.Test; @@ -25,7 +24,7 @@ class ApplicationTest extends NsTest { void 예외_테스트() { assertSimpleTest(() -> assertThatThrownBy(() -> runException("1234")) - .isInstanceOf(WrongInputException.class) + .isInstanceOf(IllegalArgumentException.class) ); }