From 3a3f31f7ed47485e7afb23f3e5f35d9be712b873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 14:27:14 +0900 Subject: [PATCH 01/14] docs(Readme): Start --- .DS_Store | Bin 6148 -> 6148 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew.bat | 184 +++++++++++------------ separate_README.md | 0 4 files changed, 93 insertions(+), 93 deletions(-) create mode 100644 separate_README.md diff --git a/.DS_Store b/.DS_Store index 7f93ef9dd1e32bb893ebfa67728c012232812dae..bdbf73e92f05bbb9a292a0ce500bc2ef70c82c8d 100644 GIT binary patch literal 6148 zcmeHKJ5B>J5PePp1cF2;kZ6$h1d(!sCE64eG^C_~%|-!f!$$dtc6;u?6*vT<<}g%L z@W!^ndN-j&fIO1tIpZ0B-gxa8fa)!iF3<+hWD#uaQLPbamr{|MwHy(Z?ju15W6W@k zq~h%jo&nFmZ(~5d-F?JZ;ua~t+OO|7#po=}hH;w3^pOMNl%?~bg*6@+^v^KFyyW+^ z$uAvu2g7VK)zL<+`j})yk?{)c$+zv(n@Zo?tFx%G7InhDi)(Rw-Fd!U z(${Ib>OMa=kfX z%+q_}M%Bips9jv3&;1bLoY=txi5mgg1CNEha)3GKzR+v9}BCzor^0sPSn=#w!bkb z2bF#T5F0dWVO`&2#6S$h&|+?o7K$>VL=&p)6GNGB+5_tsTFecaa40=8`>`V{`$93d zDD8oEhYAgP?HTY4xD3?I&$itE{mt)xH^~3;40s0q6$7df4Wb^GWbf9>;^eLkSgu$^ p#4k6fL#XU^tSfRAAG2s-TObu;XfZcP3&sBt&@_1E8Te5KJ^{FR))N2# delta 88 zcmZoMXfc=|#>B)qu~2NHo}wTR0|Nsi1A_oVPP$=ma(-^X#=_N%j69QbSUM&vuvTxr p&St>4S%KpO^JaDqeh#3%&4L`?nJ4p$IC21Wg0!-1ju2VH3;@O`6vhAm diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d..3499ded 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..6689b85 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,92 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/separate_README.md b/separate_README.md new file mode 100644 index 0000000..e69de29 From d317ec31ee2d5d9a3e88ee20455c147d37deb1a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 14:38:11 +0900 Subject: [PATCH 02/14] =?UTF-8?q?docs(Readme):=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- separate_README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/separate_README.md b/separate_README.md index e69de29..c0c98df 100644 --- a/separate_README.md +++ b/separate_README.md @@ -0,0 +1,23 @@ +# 기능요구사항 +- Exception + +- GameController + - 서로 다른 3 랜덤 숫자 생성 + - 사용자 랜덤 숫자 추측 입력 + - 추측 결과 출력 + - 게임 재시작 / 종료 여부 입력 + - 게임 재시작 / 종료 + +- Number + - 숫자 유효성 검사 + - 추측 결과 반환 + +- InputView + - 서로 다른 3자리의 수 + - 게임 재시작 / 종료 (1 / 2) + +- OutputView + - 게임 시작 문구 + - 입력한 숫자에 대한 결과 출력 + - 볼, 스트라이크 개수로 표시 + - 3개의 숫자 모두 맞힐 경우 게임 종료 From 276023f8cb4ff258715d27440238e860bb3f97c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 14:51:42 +0900 Subject: [PATCH 03/14] =?UTF-8?q?feat(Outputview):=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EB=AC=B8=EA=B5=AC=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 9 +++++- .../game/controller/GameController.java | 31 +++++++++++++++++++ .../controller/constant/OutputMessage.java | 5 +++ src/main/java/baseball/view/Inputview.java | 16 ++++++++++ src/main/java/baseball/view/OutputView.java | 12 +++++++ 5 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/main/java/baseball/game/controller/GameController.java create mode 100644 src/main/java/baseball/game/controller/constant/OutputMessage.java create mode 100644 src/main/java/baseball/view/Inputview.java create mode 100644 src/main/java/baseball/view/OutputView.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34..8fefe15 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,14 @@ package baseball; +import baseball.game.controller.GameController; +import baseball.view.Inputview; +import baseball.view.OutputView; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + OutputView outputView = new OutputView(); + Inputview inputview = new Inputview(); + GameController gameController = new GameController(outputView, inputview); + gameController.play(); } } diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java new file mode 100644 index 0000000..23c2d3a --- /dev/null +++ b/src/main/java/baseball/game/controller/GameController.java @@ -0,0 +1,31 @@ +package baseball.game.controller; + +import baseball.game.controller.constant.OutputMessage; +import baseball.view.Inputview; +import baseball.view.OutputView; + +public class GameController { + + private final OutputView outputView; + private final Inputview inputview; + + public GameController(OutputView outputView, Inputview inputview) { + this.outputView = outputView; + this.inputview = inputview; + } + + public void play () { + do { + playSingle(); + } while(UserWantsToPlayMore()); + } + + private void playSingle() { + outputView.print(OutputMessage.GAME_START); + } + + private boolean UserWantsToPlayMore() { + return false; + } + +} diff --git a/src/main/java/baseball/game/controller/constant/OutputMessage.java b/src/main/java/baseball/game/controller/constant/OutputMessage.java new file mode 100644 index 0000000..01c9d41 --- /dev/null +++ b/src/main/java/baseball/game/controller/constant/OutputMessage.java @@ -0,0 +1,5 @@ +package baseball.game.controller.constant; + +public class OutputMessage { + public final static String GAME_START = "숫자 야구 게임을 시작합니다."; +} diff --git a/src/main/java/baseball/view/Inputview.java b/src/main/java/baseball/view/Inputview.java new file mode 100644 index 0000000..164f73d --- /dev/null +++ b/src/main/java/baseball/view/Inputview.java @@ -0,0 +1,16 @@ +package baseball.view; + +import static camp.nextstep.edu.missionutils.Console.readLine; + +public class Inputview { + + public String promptUserInput(String message) { + writeLine(message); + return readLine(); + } + + private void writeLine(String message) { + System.out.println(message); + } + +} diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java new file mode 100644 index 0000000..76fb4c7 --- /dev/null +++ b/src/main/java/baseball/view/OutputView.java @@ -0,0 +1,12 @@ +package baseball.view; + +public class OutputView { + + public void print(String message) { + writeLine(message); + } + + private void writeLine(String message) { + System.out.println(message); + } +} From ffd5294a5e7c1b8fd7593bf211cd0a8a278f1b25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 15:01:58 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat(BaseNumber):=201~9=20=EB=B2=94?= =?UTF-8?q?=EC=9C=84=203=EA=B0=9C=EC=9D=98=20=EC=A4=91=EB=B3=B5=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EC=88=AB=EC=9E=90=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/baseNumber/BaseNumber.java | 27 +++++++++++++++++++ .../game/controller/GameController.java | 2 ++ 2 files changed, 29 insertions(+) create mode 100644 src/main/java/baseball/baseNumber/BaseNumber.java diff --git a/src/main/java/baseball/baseNumber/BaseNumber.java b/src/main/java/baseball/baseNumber/BaseNumber.java new file mode 100644 index 0000000..2af4574 --- /dev/null +++ b/src/main/java/baseball/baseNumber/BaseNumber.java @@ -0,0 +1,27 @@ +package baseball.baseNumber; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class BaseNumber { + List numbers; + + public BaseNumber(List numbers) { + this.numbers = new ArrayList<>(numbers); + } + + public static BaseNumber create() { + Set distinctNumbers = new HashSet<>(); + while(distinctNumbers.size() < 3) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!distinctNumbers.contains(randomNumber)) { + distinctNumbers.add(randomNumber); + } + } + return new BaseNumber(distinctNumbers.stream().toList()); + } +} diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java index 23c2d3a..f60db06 100644 --- a/src/main/java/baseball/game/controller/GameController.java +++ b/src/main/java/baseball/game/controller/GameController.java @@ -1,5 +1,6 @@ package baseball.game.controller; +import baseball.baseNumber.BaseNumber; import baseball.game.controller.constant.OutputMessage; import baseball.view.Inputview; import baseball.view.OutputView; @@ -22,6 +23,7 @@ public void play () { private void playSingle() { outputView.print(OutputMessage.GAME_START); + BaseNumber number = BaseNumber.create(); } private boolean UserWantsToPlayMore() { From 395fbf96f9a4e68bec7b6186f488f044870b435c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 15:08:13 +0900 Subject: [PATCH 05/14] =?UTF-8?q?feat(InputView):=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EC=B8=A1=20=EC=9E=85=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/game/controller/GameController.java | 2 ++ .../baseball/game/controller/constant/InputMessage.java | 5 +++++ src/main/java/baseball/view/Inputview.java | 6 +++++- 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 src/main/java/baseball/game/controller/constant/InputMessage.java diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java index f60db06..627a701 100644 --- a/src/main/java/baseball/game/controller/GameController.java +++ b/src/main/java/baseball/game/controller/GameController.java @@ -1,6 +1,7 @@ package baseball.game.controller; import baseball.baseNumber.BaseNumber; +import baseball.game.controller.constant.InputMessage; import baseball.game.controller.constant.OutputMessage; import baseball.view.Inputview; import baseball.view.OutputView; @@ -24,6 +25,7 @@ public void play () { private void playSingle() { outputView.print(OutputMessage.GAME_START); BaseNumber number = BaseNumber.create(); + inputview.promptUserInput(InputMessage.GUESS_BASE_NUMBER); } private boolean UserWantsToPlayMore() { diff --git a/src/main/java/baseball/game/controller/constant/InputMessage.java b/src/main/java/baseball/game/controller/constant/InputMessage.java new file mode 100644 index 0000000..4f2230c --- /dev/null +++ b/src/main/java/baseball/game/controller/constant/InputMessage.java @@ -0,0 +1,5 @@ +package baseball.game.controller.constant; + +public class InputMessage { + public final static String GUESS_BASE_NUMBER = "숫자를 입력해주세요 : "; +} diff --git a/src/main/java/baseball/view/Inputview.java b/src/main/java/baseball/view/Inputview.java index 164f73d..7285b7b 100644 --- a/src/main/java/baseball/view/Inputview.java +++ b/src/main/java/baseball/view/Inputview.java @@ -5,10 +5,14 @@ public class Inputview { public String promptUserInput(String message) { - writeLine(message); + writeSentence(message); return readLine(); } + private void writeSentence(String message) { + System.out.print(message); + } + private void writeLine(String message) { System.out.println(message); } From 681889eadafbbd3bcd76c68538475ce82097e0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 15:34:02 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat(GuessNumber):=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=20=EC=B6=94=EC=B8=A1=20=EC=9E=85=EB=A0=A5=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=20=EB=B0=8F=20=EA=B0=9D=EC=B2=B4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/baseNumber/BaseNumber.java | 20 +++++++++-- .../game/controller/GameController.java | 33 ++++++++++++++++++- .../game/controller/constant/Rules.java | 7 ++++ .../baseball/guessNumber/GuessNumber.java | 18 ++++++++++ .../baseball/guessResult/GuessResult.java | 15 +++++++++ 5 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 src/main/java/baseball/game/controller/constant/Rules.java create mode 100644 src/main/java/baseball/guessNumber/GuessNumber.java create mode 100644 src/main/java/baseball/guessResult/GuessResult.java diff --git a/src/main/java/baseball/baseNumber/BaseNumber.java b/src/main/java/baseball/baseNumber/BaseNumber.java index 2af4574..28bce76 100644 --- a/src/main/java/baseball/baseNumber/BaseNumber.java +++ b/src/main/java/baseball/baseNumber/BaseNumber.java @@ -1,5 +1,8 @@ package baseball.baseNumber; +import baseball.game.controller.constant.Rules; +import baseball.guessNumber.GuessNumber; +import baseball.guessResult.GuessResult; import camp.nextstep.edu.missionutils.Randoms; import java.util.ArrayList; @@ -8,7 +11,7 @@ import java.util.Set; public class BaseNumber { - List numbers; + private final List numbers; public BaseNumber(List numbers) { this.numbers = new ArrayList<>(numbers); @@ -16,7 +19,7 @@ public BaseNumber(List numbers) { public static BaseNumber create() { Set distinctNumbers = new HashSet<>(); - while(distinctNumbers.size() < 3) { + while(distinctNumbers.size() < Rules.BASE_NUMBER_COUNT) { int randomNumber = Randoms.pickNumberInRange(1, 9); if (!distinctNumbers.contains(randomNumber)) { distinctNumbers.add(randomNumber); @@ -24,4 +27,17 @@ public static BaseNumber create() { } return new BaseNumber(distinctNumbers.stream().toList()); } + + public GuessResult match(GuessNumber guessNumber) { + int strike = checkStrike(guessNumber); + int ball = checkBall(guessNumber); + return GuessResult.from(strike, ball); + } + + private int checkBall(GuessNumber guessNumber) { + + } + + private void checkStrike(GuessNumber guessNumber) { + } } diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java index 627a701..c4bbfa0 100644 --- a/src/main/java/baseball/game/controller/GameController.java +++ b/src/main/java/baseball/game/controller/GameController.java @@ -3,9 +3,14 @@ import baseball.baseNumber.BaseNumber; import baseball.game.controller.constant.InputMessage; import baseball.game.controller.constant.OutputMessage; +import baseball.game.controller.constant.Rules; +import baseball.guessNumber.GuessNumber; import baseball.view.Inputview; import baseball.view.OutputView; +import java.util.ArrayList; +import java.util.List; + public class GameController { private final OutputView outputView; @@ -25,7 +30,33 @@ public void play () { private void playSingle() { outputView.print(OutputMessage.GAME_START); BaseNumber number = BaseNumber.create(); - inputview.promptUserInput(InputMessage.GUESS_BASE_NUMBER); + String input = inputview.promptUserInput(InputMessage.GUESS_BASE_NUMBER); + List inputNumbers = validateGuessNumber(input); + GuessNumber guessNumber = GuessNumber.from(inputNumbers); + } + + private List validateGuessNumber(String input) { + List numbers = new ArrayList<>(); + validateLength(input); + addNumbers(numbers, input); + return numbers; + } + + private void addNumbers(List numbers, String input) { + for (int i = 0; i < Rules.BASE_NUMBER_COUNT; ++i) { + try { + int number = Integer.parseInt(input.substring(i, i+1)); + numbers.add(number); + } catch (NumberFormatException e) { + throw new IllegalArgumentException(); + } + } + } + + private void validateLength(String input) { + if (input.length() != 3) { + throw new IllegalArgumentException(); + } } private boolean UserWantsToPlayMore() { diff --git a/src/main/java/baseball/game/controller/constant/Rules.java b/src/main/java/baseball/game/controller/constant/Rules.java new file mode 100644 index 0000000..e9b3c5f --- /dev/null +++ b/src/main/java/baseball/game/controller/constant/Rules.java @@ -0,0 +1,7 @@ +package baseball.game.controller.constant; + +public class Rules { + public final static int MINIMUM_BASE_NUMBER = 1; + public final static int MAXIMUM_BASE_NUMBER = 9; + public final static int BASE_NUMBER_COUNT = 3; +} diff --git a/src/main/java/baseball/guessNumber/GuessNumber.java b/src/main/java/baseball/guessNumber/GuessNumber.java new file mode 100644 index 0000000..d076ca8 --- /dev/null +++ b/src/main/java/baseball/guessNumber/GuessNumber.java @@ -0,0 +1,18 @@ +package baseball.guessNumber; + +import baseball.game.controller.constant.Rules; + +import java.util.ArrayList; +import java.util.List; + +public class GuessNumber { + public List numbers; + + public GuessNumber(List numbers) { + this.numbers = new ArrayList<>(numbers); + } + + public static GuessNumber from(List numbers) { + return new GuessNumber(numbers); + } +} diff --git a/src/main/java/baseball/guessResult/GuessResult.java b/src/main/java/baseball/guessResult/GuessResult.java new file mode 100644 index 0000000..ec390fb --- /dev/null +++ b/src/main/java/baseball/guessResult/GuessResult.java @@ -0,0 +1,15 @@ +package baseball.guessResult; + +public class GuessResult { + private final int strike; + private final int ball; + + public GuessResult(int strike, int ball) { + this.strike = strike; + this.ball = ball; + } + + public static GuessResult from(int strike, int ball) { + return new GuessResult(strike, ball); + } +} From e7af53005a4b12854c26bd1a9ebc3ac1580a7162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 15:55:51 +0900 Subject: [PATCH 07/14] =?UTF-8?q?feat(GuessResult):=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=20=EC=B6=94=EC=B8=A1=20=EA=B2=B0=EA=B3=BC=20=EC=97=B0=EC=82=B0?= =?UTF-8?q?=20=EB=B0=8F=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/baseNumber/BaseNumber.java | 30 ++++++++++++++++--- .../game/controller/GameController.java | 2 ++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/baseNumber/BaseNumber.java b/src/main/java/baseball/baseNumber/BaseNumber.java index 28bce76..9f65c43 100644 --- a/src/main/java/baseball/baseNumber/BaseNumber.java +++ b/src/main/java/baseball/baseNumber/BaseNumber.java @@ -30,14 +30,36 @@ public static BaseNumber create() { public GuessResult match(GuessNumber guessNumber) { int strike = checkStrike(guessNumber); - int ball = checkBall(guessNumber); - return GuessResult.from(strike, ball); + int temporaryBall = checkTemporaryBall(guessNumber); + return GuessResult.from(strike, temporaryBall - strike); } - private int checkBall(GuessNumber guessNumber) { + private int checkStrike(GuessNumber guessNumber) { + int strike = 0; + for (int i = 0; i < Rules.BASE_NUMBER_COUNT; ++i) { + int singleGuessNumber = guessNumber.numbers.get(i); + if (isStrike(singleGuessNumber, numbers.get(i))) { + strike++; + } + } + return strike; + } + + private int checkTemporaryBall(GuessNumber guessNumber) { + int ball = 0; + for (int i = 0; i < Rules.BASE_NUMBER_COUNT; ++i) { + if (isBall(guessNumber.numbers.get(i))) { + ball++; + } + } + return ball; + } + private boolean isStrike(int guessNumber, int baseNumber) { + return guessNumber == baseNumber; } - private void checkStrike(GuessNumber guessNumber) { + private boolean isBall(int singleGuessNumber) { + return numbers.contains(singleGuessNumber); } } diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java index c4bbfa0..d8a0298 100644 --- a/src/main/java/baseball/game/controller/GameController.java +++ b/src/main/java/baseball/game/controller/GameController.java @@ -5,6 +5,7 @@ import baseball.game.controller.constant.OutputMessage; import baseball.game.controller.constant.Rules; import baseball.guessNumber.GuessNumber; +import baseball.guessResult.GuessResult; import baseball.view.Inputview; import baseball.view.OutputView; @@ -33,6 +34,7 @@ private void playSingle() { String input = inputview.promptUserInput(InputMessage.GUESS_BASE_NUMBER); List inputNumbers = validateGuessNumber(input); GuessNumber guessNumber = GuessNumber.from(inputNumbers); + GuessResult guessResult = number.match(guessNumber); } private List validateGuessNumber(String input) { From 59e00bd626fd619e2cc9e24ff7336a01c78b54c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:12:35 +0900 Subject: [PATCH 08/14] =?UTF-8?q?feat(OutputView):=20=EC=B6=94=EC=B8=A1=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../game/controller/GameController.java | 13 ++++-- .../baseball/guessResult/GuessResult.java | 40 +++++++++++++++++++ src/main/java/baseball/view/OutputView.java | 6 +++ 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java index d8a0298..255d5b9 100644 --- a/src/main/java/baseball/game/controller/GameController.java +++ b/src/main/java/baseball/game/controller/GameController.java @@ -31,10 +31,15 @@ public void play () { private void playSingle() { outputView.print(OutputMessage.GAME_START); BaseNumber number = BaseNumber.create(); - String input = inputview.promptUserInput(InputMessage.GUESS_BASE_NUMBER); - List inputNumbers = validateGuessNumber(input); - GuessNumber guessNumber = GuessNumber.from(inputNumbers); - GuessResult guessResult = number.match(guessNumber); + GuessResult guessResult = null; + do { + String input = inputview.promptUserInput(InputMessage.GUESS_BASE_NUMBER); + List inputNumbers = validateGuessNumber(input); + GuessNumber guessNumber = GuessNumber.from(inputNumbers); + guessResult = number.match(guessNumber); + outputView.print(guessResult); + } while(!guessResult.fullStrike()); + } private List validateGuessNumber(String input) { diff --git a/src/main/java/baseball/guessResult/GuessResult.java b/src/main/java/baseball/guessResult/GuessResult.java index ec390fb..608e8dc 100644 --- a/src/main/java/baseball/guessResult/GuessResult.java +++ b/src/main/java/baseball/guessResult/GuessResult.java @@ -1,5 +1,7 @@ package baseball.guessResult; +import baseball.game.controller.constant.Rules; + public class GuessResult { private final int strike; private final int ball; @@ -12,4 +14,42 @@ public GuessResult(int strike, int ball) { public static GuessResult from(int strike, int ball) { return new GuessResult(strike, ball); } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + if (nothing(stringBuilder)){ + return stringBuilder.toString(); + } + appendBall(stringBuilder); + appendStrike(stringBuilder); + return stringBuilder.toString(); + } + + private boolean nothing(StringBuilder stringBuilder) { + if (ball + strike == 0) { + stringBuilder.append("낫싱"); + return true; + } + return false; + } + + private void appendBall(StringBuilder stringBuilder) { + if (ball > 0) { + stringBuilder.append(ball); + stringBuilder.append("볼"); + stringBuilder.append(" "); + } + } + + private void appendStrike(StringBuilder stringBuilder) { + if (strike > 0) { + stringBuilder.append(strike); + stringBuilder.append("스트라이크"); + } + } + + public boolean fullStrike() { + return strike == Rules.BASE_NUMBER_COUNT; + } } diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index 76fb4c7..ab02aa7 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -1,5 +1,7 @@ package baseball.view; +import baseball.guessResult.GuessResult; + public class OutputView { public void print(String message) { @@ -9,4 +11,8 @@ public void print(String message) { private void writeLine(String message) { System.out.println(message); } + + public void print(GuessResult guessResult) { + System.out.println(guessResult); + } } From be2aba3aea9ef2456e44948e43989583263e2c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:27:29 +0900 Subject: [PATCH 09/14] =?UTF-8?q?feat(GameController):=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A2=85=EB=A3=8C=20=ED=9B=84=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=20=EB=A1=9C=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 --- .../game/controller/GameController.java | 18 +++++++++++++++--- .../game/controller/constant/InputMessage.java | 1 + .../controller/constant/OutputMessage.java | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java index 255d5b9..e049929 100644 --- a/src/main/java/baseball/game/controller/GameController.java +++ b/src/main/java/baseball/game/controller/GameController.java @@ -10,7 +10,9 @@ import baseball.view.OutputView; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; public class GameController { @@ -31,7 +33,12 @@ public void play () { private void playSingle() { outputView.print(OutputMessage.GAME_START); BaseNumber number = BaseNumber.create(); - GuessResult guessResult = null; + GuessUntilFullStrike(number); + outputView.print(OutputMessage.GAME_END); + } + + private void GuessUntilFullStrike(BaseNumber number) { + GuessResult guessResult; do { String input = inputview.promptUserInput(InputMessage.GUESS_BASE_NUMBER); List inputNumbers = validateGuessNumber(input); @@ -39,7 +46,6 @@ private void playSingle() { guessResult = number.match(guessNumber); outputView.print(guessResult); } while(!guessResult.fullStrike()); - } private List validateGuessNumber(String input) { @@ -67,7 +73,13 @@ private void validateLength(String input) { } private boolean UserWantsToPlayMore() { - return false; + String input = inputview.promptUserInput(InputMessage.GAME_CONTINUE); + boolean gameContinue = validateGameContinue(input); + return gameContinue; + } + + private boolean validateGameContinue(String input) { + return input.equals("1"); } } diff --git a/src/main/java/baseball/game/controller/constant/InputMessage.java b/src/main/java/baseball/game/controller/constant/InputMessage.java index 4f2230c..f1a49cb 100644 --- a/src/main/java/baseball/game/controller/constant/InputMessage.java +++ b/src/main/java/baseball/game/controller/constant/InputMessage.java @@ -2,4 +2,5 @@ public class InputMessage { public final static String GUESS_BASE_NUMBER = "숫자를 입력해주세요 : "; + public static final String GAME_CONTINUE = "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요." + System.lineSeparator(); } diff --git a/src/main/java/baseball/game/controller/constant/OutputMessage.java b/src/main/java/baseball/game/controller/constant/OutputMessage.java index 01c9d41..012032e 100644 --- a/src/main/java/baseball/game/controller/constant/OutputMessage.java +++ b/src/main/java/baseball/game/controller/constant/OutputMessage.java @@ -2,4 +2,5 @@ public class OutputMessage { public final static String GAME_START = "숫자 야구 게임을 시작합니다."; + public final static String GAME_END = Rules.BASE_NUMBER_COUNT + "개의 숫자를 모두 맞히셨습니다! 게임 종료"; } From 29bb23cee0377011db479c7922a2454d3e327f45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:36:28 +0900 Subject: [PATCH 10/14] =?UTF-8?q?feat(GameController):=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EB=90=98=EB=8A=94=20=EC=88=AB=EC=9E=90=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/game/controller/GameController.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java index e049929..bdbe5a3 100644 --- a/src/main/java/baseball/game/controller/GameController.java +++ b/src/main/java/baseball/game/controller/GameController.java @@ -52,9 +52,17 @@ private List validateGuessNumber(String input) { List numbers = new ArrayList<>(); validateLength(input); addNumbers(numbers, input); + validateDistinct(numbers); return numbers; } + private void validateDistinct(List numbers) { + Set distictNumber = new HashSet<>(numbers); + if (numbers.size() != distictNumber.size()) { + throw new IllegalArgumentException(); + } + } + private void addNumbers(List numbers, String input) { for (int i = 0; i < Rules.BASE_NUMBER_COUNT; ++i) { try { From a1a121acc3b12849cc1b24574242319573e482f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:37:07 +0900 Subject: [PATCH 11/14] =?UTF-8?q?refactor(BaseNumber):=20=EB=B6=88?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EB=A1=9C=EC=A7=81=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/baseNumber/BaseNumber.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/baseball/baseNumber/BaseNumber.java b/src/main/java/baseball/baseNumber/BaseNumber.java index 9f65c43..76d1571 100644 --- a/src/main/java/baseball/baseNumber/BaseNumber.java +++ b/src/main/java/baseball/baseNumber/BaseNumber.java @@ -21,9 +21,7 @@ public static BaseNumber create() { Set distinctNumbers = new HashSet<>(); while(distinctNumbers.size() < Rules.BASE_NUMBER_COUNT) { int randomNumber = Randoms.pickNumberInRange(1, 9); - if (!distinctNumbers.contains(randomNumber)) { - distinctNumbers.add(randomNumber); - } + distinctNumbers.add(randomNumber); } return new BaseNumber(distinctNumbers.stream().toList()); } From 5041ef17369c0477cd77dfbf6b7d7b32a5d48c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:51:28 +0900 Subject: [PATCH 12/14] =?UTF-8?q?refactor(BaseNumber):=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/baseNumber/BaseNumber.java | 15 +++++++++------ .../baseball/game/controller/GameController.java | 12 +++++++++++- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/baseball/baseNumber/BaseNumber.java b/src/main/java/baseball/baseNumber/BaseNumber.java index 76d1571..28b3946 100644 --- a/src/main/java/baseball/baseNumber/BaseNumber.java +++ b/src/main/java/baseball/baseNumber/BaseNumber.java @@ -17,15 +17,18 @@ public BaseNumber(List numbers) { this.numbers = new ArrayList<>(numbers); } - public static BaseNumber create() { - Set distinctNumbers = new HashSet<>(); - while(distinctNumbers.size() < Rules.BASE_NUMBER_COUNT) { - int randomNumber = Randoms.pickNumberInRange(1, 9); - distinctNumbers.add(randomNumber); + public static BaseNumber from(Set numbers) { + validateCount(numbers); + return new BaseNumber(numbers.stream().toList()); + } + + private static void validateCount(Set numbers) { + if (numbers.size() != Rules.BASE_NUMBER_COUNT) { + throw new IllegalArgumentException(); } - return new BaseNumber(distinctNumbers.stream().toList()); } + public GuessResult match(GuessNumber guessNumber) { int strike = checkStrike(guessNumber); int temporaryBall = checkTemporaryBall(guessNumber); diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java index bdbe5a3..2ec1929 100644 --- a/src/main/java/baseball/game/controller/GameController.java +++ b/src/main/java/baseball/game/controller/GameController.java @@ -8,6 +8,7 @@ import baseball.guessResult.GuessResult; import baseball.view.Inputview; import baseball.view.OutputView; +import camp.nextstep.edu.missionutils.Randoms; import java.util.ArrayList; import java.util.HashSet; @@ -32,11 +33,20 @@ public void play () { private void playSingle() { outputView.print(OutputMessage.GAME_START); - BaseNumber number = BaseNumber.create(); + BaseNumber number = BaseNumber.from(createRandomDistictNumbers()); GuessUntilFullStrike(number); outputView.print(OutputMessage.GAME_END); } + private Set createRandomDistictNumbers() { + Set distinctNumbers = new HashSet<>(); + while(distinctNumbers.size() < Rules.BASE_NUMBER_COUNT) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + distinctNumbers.add(randomNumber); + } + return distinctNumbers; + } + private void GuessUntilFullStrike(BaseNumber number) { GuessResult guessResult; do { From 381314b9ca6dec15d906226a478663b5e8d4efc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 17:04:36 +0900 Subject: [PATCH 13/14] =?UTF-8?q?feat(GameController):=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20/=EC=A2=85=EB=A3=8C?= =?UTF-8?q?=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/game/controller/GameController.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/game/controller/GameController.java b/src/main/java/baseball/game/controller/GameController.java index 2ec1929..8306f89 100644 --- a/src/main/java/baseball/game/controller/GameController.java +++ b/src/main/java/baseball/game/controller/GameController.java @@ -97,7 +97,13 @@ private boolean UserWantsToPlayMore() { } private boolean validateGameContinue(String input) { - return input.equals("1"); + if (input.equals("1")) { + return true; + } + if (input.equals("2")) { + return false; + } + throw new IllegalArgumentException(); } } From 43be646d23be84d2ff7fa344d85960714003be8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=98=84=EC=9A=B0?= <75844701+hyeonwoody@users.noreply.github.com> Date: Sun, 17 Nov 2024 17:05:21 +0900 Subject: [PATCH 14/14] =?UTF-8?q?test(BaseNumber):=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=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 --- .../baseball/baseNumber/BaseNumberTest.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/test/java/baseball/baseNumber/BaseNumberTest.java diff --git a/src/test/java/baseball/baseNumber/BaseNumberTest.java b/src/test/java/baseball/baseNumber/BaseNumberTest.java new file mode 100644 index 0000000..f44e386 --- /dev/null +++ b/src/test/java/baseball/baseNumber/BaseNumberTest.java @@ -0,0 +1,56 @@ +package baseball.baseNumber; + +import baseball.guessNumber.GuessNumber; +import baseball.guessResult.GuessResult; + +import org.junit.jupiter.api.Test; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class BaseNumberTest { + + @Test + void from_베이스숫자갯수_예외처리() { + Set randomDistinctNumbers = new HashSet<>(List.of(1, 2, 3, 4)); + assertThatThrownBy( + ()-> { + BaseNumber baseNumber = BaseNumber.from(randomDistinctNumbers); + } + ).isInstanceOf(IllegalArgumentException.class); + } + + @Test + void match_3스트라이크() { + Set randomDistinctNumbers = new HashSet<>(List.of(1, 2, 3)); + BaseNumber baseNumber = BaseNumber.from(randomDistinctNumbers); + GuessNumber guessNumber = GuessNumber.from(randomDistinctNumbers.stream().toList()); + GuessResult guessResult = baseNumber.match(guessNumber); + + assertThat(guessResult.fullStrike()).isTrue(); + assertThat(guessResult.toString().contains("3스트라이크")).isTrue(); + } + + @Test + void match_낫싱() { + Set randomDistinctNumbers = new HashSet<>(List.of(1, 2, 3)); + BaseNumber baseNumber = BaseNumber.from(randomDistinctNumbers); + GuessNumber guessNumber = GuessNumber.from(List.of(4,5,6)); + GuessResult guessResult = baseNumber.match(guessNumber); + + assertThat(guessResult.toString().contains("낫싱")).isTrue(); + } + + @Test + void match_1볼_1스트라이크() { + Set randomDistinctNumbers = new HashSet<>(List.of(1, 2, 3)); + BaseNumber baseNumber = BaseNumber.from(randomDistinctNumbers); + GuessNumber guessNumber = GuessNumber.from(List.of(1,5,2)); + GuessResult guessResult = baseNumber.match(guessNumber); + + assertThat(guessResult.toString().contains("1볼 1스트라이크")).isTrue(); + } +} \ No newline at end of file