From 0a5782472fbe1e78b42a30d633a79592932d3e34 Mon Sep 17 00:00:00 2001 From: oscar Date: Fri, 16 Dec 2022 17:12:40 +0900 Subject: [PATCH 01/11] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index fcf3f057..a2836a51 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,22 @@ ## 과제 제출 과정 * [과제 제출 방법](https://github.com/next-step/nextstep-docs/tree/master/ent-precourse) + +### 기능 요구사항 +- 1부터 9까지 서로 다른 수로 이루어진 3자리 수를 맞추는 게임 +- 사용자는 3자리 수를 제시 +- 사용자가 제시한 수에 대한 응답 + - n개의 (존재하는 수 & 자리 일치) : n 스트라이크 + - n개의 (존재하는 수 & 자리 불일치) : n 볼 + - 하나도 일치하지 않는 경우 : 낫싱 +- 정답을 맞추면 게임 종료 or 게임 재시작 가능 + + +### 구현할 기능 목록 +[ ] 랜덤 세 자리 숫자 생성 기능 +[ ] 사용자 추측 숫자 입력 기능 +[ ] 사용자 입력 추측 숫자에 대한 유효성 검사, 재입력 기능 +[ ] 추측 숫자에 대한 결과 도출 및 출력 능기능 +[ ] 정답이 나올 때까지 추측 반복 기능 +[ ] 정답시 게임 재시작 or 종료 기능 +[ ] 사용자 게임 재시작 입력 숫자에 대한 유효성 검사, 재입력 기능 \ No newline at end of file From 50d54737d58806081fe07938ef53ad3f3114c4c5 Mon Sep 17 00:00:00 2001 From: oscar Date: Fri, 16 Dec 2022 23:47:45 +0900 Subject: [PATCH 02/11] =?UTF-8?q?feat:=20=EB=9E=9C=EB=8D=A4=20=EC=84=B8=20?= =?UTF-8?q?=EC=9E=90=EB=A6=AC=20=EC=88=AB=EC=9E=90=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/BallNumberGenerator.java | 6 ++++ src/main/java/RandomBallNumberGenerator.java | 15 ++++++++++ src/main/java/domain/BallNumber.java | 23 +++++++++++++++ .../java/RandomBallNumberGeneratorTest.java | 28 +++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 src/main/java/BallNumberGenerator.java create mode 100644 src/main/java/RandomBallNumberGenerator.java create mode 100644 src/main/java/domain/BallNumber.java create mode 100644 src/test/java/RandomBallNumberGeneratorTest.java diff --git a/src/main/java/BallNumberGenerator.java b/src/main/java/BallNumberGenerator.java new file mode 100644 index 00000000..9254ebd0 --- /dev/null +++ b/src/main/java/BallNumberGenerator.java @@ -0,0 +1,6 @@ +import domain.BallNumber; + +public interface BallNumberGenerator { + + BallNumber generate(int length); +} diff --git a/src/main/java/RandomBallNumberGenerator.java b/src/main/java/RandomBallNumberGenerator.java new file mode 100644 index 00000000..c68c24d6 --- /dev/null +++ b/src/main/java/RandomBallNumberGenerator.java @@ -0,0 +1,15 @@ +import domain.BallNumber; + +import java.util.*; + +public class RandomBallNumberGenerator implements BallNumberGenerator { + + @Override + public BallNumber generate(int length) { + Set numberSet = new HashSet<>(); + while(numberSet.size() < length) { + numberSet.add((int)(Math.random()*1000)%9+1); + } + return new BallNumber(new ArrayList<>(numberSet)); + } +} diff --git a/src/main/java/domain/BallNumber.java b/src/main/java/domain/BallNumber.java new file mode 100644 index 00000000..80600c1d --- /dev/null +++ b/src/main/java/domain/BallNumber.java @@ -0,0 +1,23 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; + +public class BallNumber { + + private List digits = new ArrayList<>(); + + public BallNumber(List numbers) { + this.digits = new ArrayList<>(); + this.digits.addAll(numbers); + } + + public int getLength() { + return digits.size(); + } + + public List getDigits() { + return this.digits; + } + +} diff --git a/src/test/java/RandomBallNumberGeneratorTest.java b/src/test/java/RandomBallNumberGeneratorTest.java new file mode 100644 index 00000000..8e432323 --- /dev/null +++ b/src/test/java/RandomBallNumberGeneratorTest.java @@ -0,0 +1,28 @@ +import domain.BallNumber; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.HashSet; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +public class RandomBallNumberGeneratorTest { + + @Test + @DisplayName("랜덤으로 생성한 숫자 테스트") + void generateRandomBallNumber(){ + //given + RandomBallNumberGenerator randomBallNumberGenerator = new RandomBallNumberGenerator(); + int length = 3; + + //when + BallNumber ballNumber = randomBallNumberGenerator.generate(length); + + //then + // 길이 일치 + assertEquals(ballNumber.getLength(),length); + // 중복 없음 + assertEquals(new HashSet<>(ballNumber.getDigits()).size(), length); + } +} From e6f963e28366282ffc431bee57152fc732b12386 Mon Sep 17 00:00:00 2001 From: oscar Date: Sat, 17 Dec 2022 18:13:44 +0900 Subject: [PATCH 03/11] =?UTF-8?q?fix:=20=EB=AC=B4=EC=9E=91=EC=9C=84=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=20=EC=98=A4=EB=A6=84=EC=B0=A8=EC=88=9C?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=A0=95=EB=A0=AC=EB=90=98=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=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/RandomBallNumberGenerator.java | 2 +- src/main/java/domain/BallNumber.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/RandomBallNumberGenerator.java b/src/main/java/RandomBallNumberGenerator.java index c68c24d6..be8d6c4c 100644 --- a/src/main/java/RandomBallNumberGenerator.java +++ b/src/main/java/RandomBallNumberGenerator.java @@ -6,7 +6,7 @@ public class RandomBallNumberGenerator implements BallNumberGenerator { @Override public BallNumber generate(int length) { - Set numberSet = new HashSet<>(); + Set numberSet = new LinkedHashSet<>(); while(numberSet.size() < length) { numberSet.add((int)(Math.random()*1000)%9+1); } diff --git a/src/main/java/domain/BallNumber.java b/src/main/java/domain/BallNumber.java index 80600c1d..aa06c201 100644 --- a/src/main/java/domain/BallNumber.java +++ b/src/main/java/domain/BallNumber.java @@ -5,7 +5,7 @@ public class BallNumber { - private List digits = new ArrayList<>(); + private List digits; public BallNumber(List numbers) { this.digits = new ArrayList<>(); From 289f5ace225a5b69e057390a118783bd7c582c45 Mon Sep 17 00:00:00 2001 From: oscar Date: Sat, 17 Dec 2022 21:13:02 +0900 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EC=B8=A1=20=EC=88=AB=EC=9E=90=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +-- src/main/java/config/GlobalData.java | 9 +++++ src/main/java/domain/BallNumberGenMode.java | 5 +++ src/main/java/view/InputView.java | 41 +++++++++++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 src/main/java/config/GlobalData.java create mode 100644 src/main/java/domain/BallNumberGenMode.java create mode 100644 src/main/java/view/InputView.java diff --git a/README.md b/README.md index a2836a51..b01867fc 100644 --- a/README.md +++ b/README.md @@ -17,10 +17,10 @@ ### 구현할 기능 목록 -[ ] 랜덤 세 자리 숫자 생성 기능 -[ ] 사용자 추측 숫자 입력 기능 +[x] 랜덤 세 자리 숫자 생성 기능 +[x] 사용자 추측 숫자 입력 기능 [ ] 사용자 입력 추측 숫자에 대한 유효성 검사, 재입력 기능 -[ ] 추측 숫자에 대한 결과 도출 및 출력 능기능 +[ ] 추측 숫자에 대한 결과 도출 및 출력 기능 [ ] 정답이 나올 때까지 추측 반복 기능 [ ] 정답시 게임 재시작 or 종료 기능 [ ] 사용자 게임 재시작 입력 숫자에 대한 유효성 검사, 재입력 기능 \ No newline at end of file diff --git a/src/main/java/config/GlobalData.java b/src/main/java/config/GlobalData.java new file mode 100644 index 00000000..54820556 --- /dev/null +++ b/src/main/java/config/GlobalData.java @@ -0,0 +1,9 @@ +package config; + +import domain.BallNumberGenMode; + +public class GlobalData { + + public static final int BALL_NUMBER_LENGTH = 3; + public static final BallNumberGenMode BALL_NUMBER_GEN_MODE = BallNumberGenMode.RANDOM; +} diff --git a/src/main/java/domain/BallNumberGenMode.java b/src/main/java/domain/BallNumberGenMode.java new file mode 100644 index 00000000..b4cd3fa5 --- /dev/null +++ b/src/main/java/domain/BallNumberGenMode.java @@ -0,0 +1,5 @@ +package domain; + +public enum BallNumberGenMode { + RANDOM +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..b7a35573 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,41 @@ +package view; + +import domain.BallNumber; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class InputView { + + private BufferedReader br; + + public InputView() { + this.br = new BufferedReader(new InputStreamReader(System.in)); + } + + public BallNumber inputGuessedBallNumber() { + System.out.print("숫자를 입력해주세요 : "); + String input = ""; + try { + input = br.readLine(); + } catch (IOException e) { + e.printStackTrace(); + } + // 유효성 검사 구간 + return new BallNumber(stringToIntList(input)); + } + + public List stringToIntList(String input) { + List result = new ArrayList<>(); + for(char c : input.toCharArray()) { + result.add(c-'0'); + } + return result; + } + +} From 1191f493295a3338334c6c821614b3f4d2a42554 Mon Sep 17 00:00:00 2001 From: oscar Date: Sat, 17 Dec 2022 22:16:47 +0900 Subject: [PATCH 05/11] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EC=B6=94=EC=B8=A1=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC,=20=EC=9E=AC?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/InputManager.java | 29 ++++++++++++++++ src/main/java/config/GlobalData.java | 2 +- .../domain/{ => ballnumber}/BallNumber.java | 2 +- .../generator}/BallNumberGenMode.java | 2 +- .../generator}/BallNumberGenerator.java | 4 ++- .../generator}/RandomBallNumberGenerator.java | 5 ++- src/main/java/view/InputView.java | 33 +++++++++++-------- .../java/RandomBallNumberGeneratorTest.java | 4 +-- 9 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 src/main/java/InputManager.java rename src/main/java/domain/{ => ballnumber}/BallNumber.java (93%) rename src/main/java/domain/{ => ballnumber/generator}/BallNumberGenMode.java (55%) rename src/main/java/{ => domain/ballnumber/generator}/BallNumberGenerator.java (51%) rename src/main/java/{ => domain/ballnumber/generator}/RandomBallNumberGenerator.java (74%) diff --git a/README.md b/README.md index b01867fc..ceb527fd 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ ### 구현할 기능 목록 [x] 랜덤 세 자리 숫자 생성 기능 [x] 사용자 추측 숫자 입력 기능 -[ ] 사용자 입력 추측 숫자에 대한 유효성 검사, 재입력 기능 +[x] 사용자 입력 추측 숫자에 대한 유효성 검사, 재입력 기능 [ ] 추측 숫자에 대한 결과 도출 및 출력 기능 [ ] 정답이 나올 때까지 추측 반복 기능 [ ] 정답시 게임 재시작 or 종료 기능 diff --git a/src/main/java/InputManager.java b/src/main/java/InputManager.java new file mode 100644 index 00000000..8b3d18e7 --- /dev/null +++ b/src/main/java/InputManager.java @@ -0,0 +1,29 @@ +import domain.ballnumber.BallNumber; +import view.InputView; + +public class InputManager { + + private InputView inputView; + + public InputManager() { + this.inputView = new InputView(); + } + + public BallNumber inputGuessedBallNumber() { + BallNumber guessedBallNumber = null; + while((guessedBallNumber=tryInputGuessedBallNumber())==null){} + return guessedBallNumber; + } + + public BallNumber tryInputGuessedBallNumber() { + BallNumber guessedBallNumber = null; + try { + guessedBallNumber = inputView.inputGuessedBallNumber(); + } catch (Exception e) { + System.out.println(e.getMessage()); + } finally { + return guessedBallNumber; + } + } + +} diff --git a/src/main/java/config/GlobalData.java b/src/main/java/config/GlobalData.java index 54820556..8bfa8085 100644 --- a/src/main/java/config/GlobalData.java +++ b/src/main/java/config/GlobalData.java @@ -1,6 +1,6 @@ package config; -import domain.BallNumberGenMode; +import domain.ballnumber.generator.BallNumberGenMode; public class GlobalData { diff --git a/src/main/java/domain/BallNumber.java b/src/main/java/domain/ballnumber/BallNumber.java similarity index 93% rename from src/main/java/domain/BallNumber.java rename to src/main/java/domain/ballnumber/BallNumber.java index aa06c201..a62da7e2 100644 --- a/src/main/java/domain/BallNumber.java +++ b/src/main/java/domain/ballnumber/BallNumber.java @@ -1,4 +1,4 @@ -package domain; +package domain.ballnumber; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/domain/BallNumberGenMode.java b/src/main/java/domain/ballnumber/generator/BallNumberGenMode.java similarity index 55% rename from src/main/java/domain/BallNumberGenMode.java rename to src/main/java/domain/ballnumber/generator/BallNumberGenMode.java index b4cd3fa5..31e1821d 100644 --- a/src/main/java/domain/BallNumberGenMode.java +++ b/src/main/java/domain/ballnumber/generator/BallNumberGenMode.java @@ -1,4 +1,4 @@ -package domain; +package domain.ballnumber.generator; public enum BallNumberGenMode { RANDOM diff --git a/src/main/java/BallNumberGenerator.java b/src/main/java/domain/ballnumber/generator/BallNumberGenerator.java similarity index 51% rename from src/main/java/BallNumberGenerator.java rename to src/main/java/domain/ballnumber/generator/BallNumberGenerator.java index 9254ebd0..3e66705b 100644 --- a/src/main/java/BallNumberGenerator.java +++ b/src/main/java/domain/ballnumber/generator/BallNumberGenerator.java @@ -1,4 +1,6 @@ -import domain.BallNumber; +package domain.ballnumber.generator; + +import domain.ballnumber.BallNumber; public interface BallNumberGenerator { diff --git a/src/main/java/RandomBallNumberGenerator.java b/src/main/java/domain/ballnumber/generator/RandomBallNumberGenerator.java similarity index 74% rename from src/main/java/RandomBallNumberGenerator.java rename to src/main/java/domain/ballnumber/generator/RandomBallNumberGenerator.java index be8d6c4c..bb13f8ae 100644 --- a/src/main/java/RandomBallNumberGenerator.java +++ b/src/main/java/domain/ballnumber/generator/RandomBallNumberGenerator.java @@ -1,4 +1,7 @@ -import domain.BallNumber; +package domain.ballnumber.generator; + +import domain.ballnumber.BallNumber; +import domain.ballnumber.generator.BallNumberGenerator; import java.util.*; diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index b7a35573..4e60dd0d 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,14 +1,11 @@ package view; -import domain.BallNumber; +import config.GlobalData; +import domain.ballnumber.BallNumber; import java.io.BufferedReader; -import java.io.IOException; import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; +import java.util.*; public class InputView { @@ -18,18 +15,26 @@ public InputView() { this.br = new BufferedReader(new InputStreamReader(System.in)); } - public BallNumber inputGuessedBallNumber() { + public BallNumber inputGuessedBallNumber() throws Exception{ System.out.print("숫자를 입력해주세요 : "); - String input = ""; - try { - input = br.readLine(); - } catch (IOException e) { - e.printStackTrace(); - } - // 유효성 검사 구간 + String input = br.readLine(); + validateBallNumberInput(input); return new BallNumber(stringToIntList(input)); } + public void validateBallNumberInput(String input) { + // 길이 검사 + if(input.length()!= GlobalData.BALL_NUMBER_LENGTH) + throw new IllegalArgumentException(GlobalData.BALL_NUMBER_LENGTH+" 자리 숫자를 입력해주세요."); + for(char c : input.toCharArray()) { + validateBallNumberChar(c); + } + } + + public void validateBallNumberChar(char c) { + if(c<'1' || c>'9') throw new IllegalArgumentException("각 자리는 1 이상 9 이하의 숫자로 이루어져야 합니다."); + } + public List stringToIntList(String input) { List result = new ArrayList<>(); for(char c : input.toCharArray()) { diff --git a/src/test/java/RandomBallNumberGeneratorTest.java b/src/test/java/RandomBallNumberGeneratorTest.java index 8e432323..eff49df3 100644 --- a/src/test/java/RandomBallNumberGeneratorTest.java +++ b/src/test/java/RandomBallNumberGeneratorTest.java @@ -1,9 +1,9 @@ -import domain.BallNumber; +import domain.ballnumber.BallNumber; +import domain.ballnumber.generator.RandomBallNumberGenerator; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.util.HashSet; -import java.util.Set; import static org.junit.jupiter.api.Assertions.*; From 5436e205d2e89b019fa7fd719cc428635c3255d6 Mon Sep 17 00:00:00 2001 From: oscar Date: Sun, 18 Dec 2022 02:47:14 +0900 Subject: [PATCH 06/11] =?UTF-8?q?fix:=20=EC=A4=91=EB=B3=B5=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EC=88=AB=EC=9E=90=EB=A5=BC=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EB=AA=BB=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/InputView.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 4e60dd0d..cd9872fd 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -23,12 +23,15 @@ public BallNumber inputGuessedBallNumber() throws Exception{ } public void validateBallNumberInput(String input) { - // 길이 검사 if(input.length()!= GlobalData.BALL_NUMBER_LENGTH) throw new IllegalArgumentException(GlobalData.BALL_NUMBER_LENGTH+" 자리 숫자를 입력해주세요."); + Set numberSet = new HashSet<>(); for(char c : input.toCharArray()) { validateBallNumberChar(c); + numberSet.add(c); } + if(numberSet.size()!=GlobalData.BALL_NUMBER_LENGTH) + throw new IllegalArgumentException("숫자는 중복되지 않습니다."); } public void validateBallNumberChar(char c) { From 79f669f1938eb567df81a0c7ca027fbba9e48355 Mon Sep 17 00:00:00 2001 From: oscar Date: Sun, 18 Dec 2022 15:16:46 +0900 Subject: [PATCH 07/11] =?UTF-8?q?feat:=20=EC=B6=94=EC=B8=A1=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EC=97=90=20=EB=8C=80=ED=95=9C=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EB=8F=84=EC=B6=9C=20=EB=B0=8F=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../java/domain/ballnumber/BallResult.java | 51 ++++++++++++++ src/main/java/view/OutputView.java | 24 +++++++ src/test/java/BallResultTest.java | 70 +++++++++++++++++++ 4 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 src/main/java/domain/ballnumber/BallResult.java create mode 100644 src/main/java/view/OutputView.java create mode 100644 src/test/java/BallResultTest.java diff --git a/README.md b/README.md index ceb527fd..57ea1cfa 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ [x] 랜덤 세 자리 숫자 생성 기능 [x] 사용자 추측 숫자 입력 기능 [x] 사용자 입력 추측 숫자에 대한 유효성 검사, 재입력 기능 -[ ] 추측 숫자에 대한 결과 도출 및 출력 기능 +[x] 추측 숫자에 대한 결과 도출 및 출력 기능 [ ] 정답이 나올 때까지 추측 반복 기능 [ ] 정답시 게임 재시작 or 종료 기능 [ ] 사용자 게임 재시작 입력 숫자에 대한 유효성 검사, 재입력 기능 \ No newline at end of file diff --git a/src/main/java/domain/ballnumber/BallResult.java b/src/main/java/domain/ballnumber/BallResult.java new file mode 100644 index 00000000..45753c53 --- /dev/null +++ b/src/main/java/domain/ballnumber/BallResult.java @@ -0,0 +1,51 @@ +package domain.ballnumber; + +import config.GlobalData; + +import java.util.HashSet; +import java.util.Set; + +public class BallResult { + + private int strike; + private int ball; + + public BallResult() { + this.strike = 0; + this.ball = 0; + } + + public int getStrike() { + return strike; + } + + public int getBall() { + return ball; + } + + public static BallResult createBallResult(BallNumber correctBallNumber, BallNumber guessedBallNumber) { + BallResult ballResult = new BallResult(); + Set correctBallNumberSet = new HashSet(correctBallNumber.getDigits()); + for(int i=0; i0) { + sb.append(ballResult.getStrike()).append(" 스트라이크 "); + } + if(ballResult.getBall()>0) { + sb.append(ballResult.getBall()).append(" 볼"); + } + if(sb.length()==0) { + sb.append("낫싱"); + } + System.out.println(sb.toString()); + } +} diff --git a/src/test/java/BallResultTest.java b/src/test/java/BallResultTest.java new file mode 100644 index 00000000..225dbb92 --- /dev/null +++ b/src/test/java/BallResultTest.java @@ -0,0 +1,70 @@ +import config.GlobalData; +import domain.ballnumber.BallNumber; +import domain.ballnumber.BallResult; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; +import java.util.ArrayList; +import java.util.List; + +public class BallResultTest { + + @Test + @DisplayName("추측한 숫자에 대한 전체 스트라이크 테스트") + public void checkAllStrike(){ + //given + BallNumber correctBallNumber = new BallNumber(new ArrayList<>(List.of(5,3,7))); + BallNumber guessedBallNumber = new BallNumber(new ArrayList<>(List.of(5,3,7))); + + // when + BallResult ballResult = BallResult.createBallResult(correctBallNumber,guessedBallNumber); + + //then + assertTrue(ballResult.isAllStrike()); + } + + @Test + @DisplayName("추측한 숫자에 대한 전체 볼 테스트") + public void checkAllBall(){ + //given + BallNumber correctBallNumber = new BallNumber(new ArrayList<>(List.of(5,3,7))); + BallNumber guessedBallNumber = new BallNumber(new ArrayList<>(List.of(7,5,3))); + + // when + BallResult ballResult = BallResult.createBallResult(correctBallNumber,guessedBallNumber); + + //then + assertEquals(ballResult.getBall(), GlobalData.BALL_NUMBER_LENGTH); + } + + @Test + @DisplayName("추측한 숫자에 대한 1 스트라이크 2볼 테스트") + public void check1Strike2Ball(){ + //given + BallNumber correctBallNumber = new BallNumber(new ArrayList<>(List.of(5,3,7))); + BallNumber guessedBallNumber = new BallNumber(new ArrayList<>(List.of(7,3,5))); + + // when + BallResult ballResult = BallResult.createBallResult(correctBallNumber,guessedBallNumber); + + //then + assertEquals(ballResult.getStrike(),1); + assertEquals(ballResult.getBall(),2); + } + + @Test + @DisplayName("추측한 숫자에 대한 전체 불일치 테스트") + public void checkNothing(){ + //given + BallNumber correctBallNumber = new BallNumber(new ArrayList<>(List.of(5,3,7))); + BallNumber guessedBallNumber = new BallNumber(new ArrayList<>(List.of(1,9,2))); + + // when + BallResult ballResult = BallResult.createBallResult(correctBallNumber,guessedBallNumber); + + //then + assertEquals(ballResult.getStrike(),0); + assertEquals(ballResult.getBall(),0); + } +} From c1d6fbed1adce248d94e87a212e1b97a8288aa7e Mon Sep 17 00:00:00 2001 From: oscar Date: Sun, 18 Dec 2022 16:51:35 +0900 Subject: [PATCH 08/11] =?UTF-8?q?feat:=20=EC=A0=95=EB=8B=B5=EC=9D=B4=20?= =?UTF-8?q?=EB=82=98=EC=98=AC=20=EB=95=8C=EA=B9=8C=EC=A7=80=20=EC=B6=94?= =?UTF-8?q?=EC=B8=A1=20=EB=B0=98=EB=B3=B5=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- src/main/java/NumberBaseBallGame.java | 52 +++++++++++++++++++++++ src/main/java/domain/game/GameResult.java | 5 +++ src/main/java/domain/game/GameStatus.java | 5 +++ src/main/java/view/OutputView.java | 17 +++----- 5 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 src/main/java/NumberBaseBallGame.java create mode 100644 src/main/java/domain/game/GameResult.java create mode 100644 src/main/java/domain/game/GameStatus.java diff --git a/README.md b/README.md index 57ea1cfa..9a751afd 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,6 @@ [x] 사용자 추측 숫자 입력 기능 [x] 사용자 입력 추측 숫자에 대한 유효성 검사, 재입력 기능 [x] 추측 숫자에 대한 결과 도출 및 출력 기능 -[ ] 정답이 나올 때까지 추측 반복 기능 +[x] 정답이 나올 때까지 추측 반복 기능 [ ] 정답시 게임 재시작 or 종료 기능 -[ ] 사용자 게임 재시작 입력 숫자에 대한 유효성 검사, 재입력 기능 \ No newline at end of file +[ ] 사용자 게능임 재시작 입력 숫자에 대한 유효성 검사, 재입력 기능 \ No newline at end of file diff --git a/src/main/java/NumberBaseBallGame.java b/src/main/java/NumberBaseBallGame.java new file mode 100644 index 00000000..0beb42af --- /dev/null +++ b/src/main/java/NumberBaseBallGame.java @@ -0,0 +1,52 @@ +import config.GlobalData; +import domain.ballnumber.BallNumber; +import domain.ballnumber.BallResult; +import domain.ballnumber.generator.BallNumberGenMode; +import domain.ballnumber.generator.BallNumberGenerator; +import domain.ballnumber.generator.RandomBallNumberGenerator; +import domain.game.GameResult; +import domain.game.GameStatus; +import view.OutputView; + +public class NumberBaseBallGame { + + private GameStatus gameStatus; + private BallNumberGenerator ballNumberGenerator; + private InputManager inputManager; + private OutputView outputView; + private BallNumber correctBallNumber; + + private NumberBaseBallGame() { + this.gameStatus = GameStatus.PLAYING; + this.inputManager = new InputManager(); + this.outputView = new OutputView(); + } + + public NumberBaseBallGame(BallNumberGenMode mode) { + this(); + if(BallNumberGenMode.RANDOM.equals(mode)) + this.ballNumberGenerator = new RandomBallNumberGenerator(); + this.correctBallNumber = this.ballNumberGenerator.generate(GlobalData.BALL_NUMBER_LENGTH); + } + + + public GameStatus getGameStatus() { + return gameStatus; + } + + public GameResult play() { + while(GameStatus.PLAYING.equals(this.gameStatus)) { + BallNumber guessedBallNumber = inputManager.inputGuessedBallNumber(); + BallResult ballResult = BallResult.createBallResult(correctBallNumber,guessedBallNumber); + outputView.showBallResult(ballResult); + checkBallResult(ballResult); + } + return GameResult.STOP; + } + + public void checkBallResult(BallResult ballResult) { + if(ballResult.isAllStrike()) this.gameStatus = GameStatus.FINISH; + } + + +} diff --git a/src/main/java/domain/game/GameResult.java b/src/main/java/domain/game/GameResult.java new file mode 100644 index 00000000..a7ce5d5e --- /dev/null +++ b/src/main/java/domain/game/GameResult.java @@ -0,0 +1,5 @@ +package domain.game; + +public enum GameResult { + RESTART, STOP +} diff --git a/src/main/java/domain/game/GameStatus.java b/src/main/java/domain/game/GameStatus.java new file mode 100644 index 00000000..80e13336 --- /dev/null +++ b/src/main/java/domain/game/GameStatus.java @@ -0,0 +1,5 @@ +package domain.game; + +public enum GameStatus { + PLAYING, FINISH +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 3c1bad9a..b042d015 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -4,21 +4,14 @@ public class OutputView { - private StringBuilder sb; - - public OutputView() { - this.sb = new StringBuilder(); - } public void showBallResult(BallResult ballResult) { - if(ballResult.getStrike()>0) { + StringBuilder sb = new StringBuilder(); + if(ballResult.getStrike()>0) sb.append(ballResult.getStrike()).append(" 스트라이크 "); - } - if(ballResult.getBall()>0) { + if(ballResult.getBall()>0) sb.append(ballResult.getBall()).append(" 볼"); - } - if(sb.length()==0) { + if(sb.length()==0) sb.append("낫싱"); - } - System.out.println(sb.toString()); + System.out.println(sb); } } From 735f267f46462f261c8f3a94a64df5510a7158de Mon Sep 17 00:00:00 2001 From: oscar Date: Thu, 22 Dec 2022 01:45:23 +0900 Subject: [PATCH 09/11] =?UTF-8?q?feat:=20=EC=A0=95=EB=8B=B5=EC=8B=9C=20?= =?UTF-8?q?=EC=9E=AC=EC=8B=9C=EC=9E=91=20or=20=EC=A2=85=EB=A3=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- .../java/NumberBaseBallGameApplication.java | 9 ++++ src/main/java/domain/game/GameResult.java | 2 +- src/main/java/domain/game/GameStatus.java | 2 +- .../java/{ => game}/NumberBaseBallGame.java | 43 ++++++++++--------- .../java/game/NumberBaseBallGameManager.java | 43 +++++++++++++++++++ src/main/java/{ => view}/InputManager.java | 20 +++++++++ src/main/java/view/InputView.java | 10 +++++ src/main/java/view/OutputView.java | 5 +++ .../java/game/NumberBaseBallGameTest.java | 40 +++++++++++++++++ src/test/java/study/StringTest.java | 13 ------ 11 files changed, 154 insertions(+), 37 deletions(-) create mode 100644 src/main/java/NumberBaseBallGameApplication.java rename src/main/java/{ => game}/NumberBaseBallGame.java (55%) create mode 100644 src/main/java/game/NumberBaseBallGameManager.java rename src/main/java/{ => view}/InputManager.java (59%) create mode 100644 src/test/java/game/NumberBaseBallGameTest.java delete mode 100644 src/test/java/study/StringTest.java diff --git a/README.md b/README.md index 9a751afd..8f5a6252 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,6 @@ [x] 사용자 추측 숫자 입력 기능 [x] 사용자 입력 추측 숫자에 대한 유효성 검사, 재입력 기능 [x] 추측 숫자에 대한 결과 도출 및 출력 기능 -[x] 정답이 나올 때까지 추측 반복 기능 -[ ] 정답시 게임 재시작 or 종료 기능 +[x] 정답이 나올 때까지 추측 반복 기능 +[x] 정답시 게임 재시작 or 종료 기능 [ ] 사용자 게능임 재시작 입력 숫자에 대한 유효성 검사, 재입력 기능 \ No newline at end of file diff --git a/src/main/java/NumberBaseBallGameApplication.java b/src/main/java/NumberBaseBallGameApplication.java new file mode 100644 index 00000000..3b9ed97a --- /dev/null +++ b/src/main/java/NumberBaseBallGameApplication.java @@ -0,0 +1,9 @@ +import game.NumberBaseBallGameManager; + +public class NumberBaseBallGameApplication { + + public static void main(String[] args) { + NumberBaseBallGameManager numberBaseBallGameManager = new NumberBaseBallGameManager(); + numberBaseBallGameManager.start(); + } +} diff --git a/src/main/java/domain/game/GameResult.java b/src/main/java/domain/game/GameResult.java index a7ce5d5e..25b13754 100644 --- a/src/main/java/domain/game/GameResult.java +++ b/src/main/java/domain/game/GameResult.java @@ -1,5 +1,5 @@ package domain.game; public enum GameResult { - RESTART, STOP + RESTART, EXIT } diff --git a/src/main/java/domain/game/GameStatus.java b/src/main/java/domain/game/GameStatus.java index 80e13336..90409056 100644 --- a/src/main/java/domain/game/GameStatus.java +++ b/src/main/java/domain/game/GameStatus.java @@ -1,5 +1,5 @@ package domain.game; public enum GameStatus { - PLAYING, FINISH + READY, PLAYING, FINISH } diff --git a/src/main/java/NumberBaseBallGame.java b/src/main/java/game/NumberBaseBallGame.java similarity index 55% rename from src/main/java/NumberBaseBallGame.java rename to src/main/java/game/NumberBaseBallGame.java index 0beb42af..74e6097e 100644 --- a/src/main/java/NumberBaseBallGame.java +++ b/src/main/java/game/NumberBaseBallGame.java @@ -1,52 +1,55 @@ +package game; + import config.GlobalData; import domain.ballnumber.BallNumber; import domain.ballnumber.BallResult; import domain.ballnumber.generator.BallNumberGenMode; import domain.ballnumber.generator.BallNumberGenerator; import domain.ballnumber.generator.RandomBallNumberGenerator; -import domain.game.GameResult; import domain.game.GameStatus; -import view.OutputView; public class NumberBaseBallGame { private GameStatus gameStatus; private BallNumberGenerator ballNumberGenerator; - private InputManager inputManager; - private OutputView outputView; private BallNumber correctBallNumber; private NumberBaseBallGame() { - this.gameStatus = GameStatus.PLAYING; - this.inputManager = new InputManager(); - this.outputView = new OutputView(); + this.gameStatus = GameStatus.READY; } public NumberBaseBallGame(BallNumberGenMode mode) { this(); - if(BallNumberGenMode.RANDOM.equals(mode)) + if (BallNumberGenMode.RANDOM.equals(mode)) this.ballNumberGenerator = new RandomBallNumberGenerator(); - this.correctBallNumber = this.ballNumberGenerator.generate(GlobalData.BALL_NUMBER_LENGTH); } - public GameStatus getGameStatus() { - return gameStatus; + return this.gameStatus; } - public GameResult play() { - while(GameStatus.PLAYING.equals(this.gameStatus)) { - BallNumber guessedBallNumber = inputManager.inputGuessedBallNumber(); - BallResult ballResult = BallResult.createBallResult(correctBallNumber,guessedBallNumber); - outputView.showBallResult(ballResult); - checkBallResult(ballResult); - } - return GameResult.STOP; + public BallNumber getCorrectBallNumber() { + return this.correctBallNumber; } - public void checkBallResult(BallResult ballResult) { + public void initGame() { + generateBallNumber(); + this.gameStatus = GameStatus.PLAYING; + } + + public void generateBallNumber() { + if(this.ballNumberGenerator==null) return; + this.correctBallNumber = this.ballNumberGenerator.generate(GlobalData.BALL_NUMBER_LENGTH); + } + + public BallResult throwBall(BallNumber guessedBallNumber) { + BallResult ballResult = compareBallNumber(guessedBallNumber); if(ballResult.isAllStrike()) this.gameStatus = GameStatus.FINISH; + return ballResult; } + public BallResult compareBallNumber(BallNumber guessedBallNumber) { + return BallResult.createBallResult(this.correctBallNumber, guessedBallNumber); + } } diff --git a/src/main/java/game/NumberBaseBallGameManager.java b/src/main/java/game/NumberBaseBallGameManager.java new file mode 100644 index 00000000..fc0b4530 --- /dev/null +++ b/src/main/java/game/NumberBaseBallGameManager.java @@ -0,0 +1,43 @@ +package game; + +import config.GlobalData; +import domain.ballnumber.BallNumber; +import domain.game.GameResult; +import domain.game.GameStatus; +import view.InputManager; +import view.OutputView; + +public class NumberBaseBallGameManager { + + private NumberBaseBallGame numberBaseBallGame; + private InputManager inputManager; + private OutputView outputView; + + public NumberBaseBallGameManager() { + this.numberBaseBallGame = new NumberBaseBallGame(GlobalData.BALL_NUMBER_GEN_MODE); + this.inputManager = new InputManager(); + this.outputView = new OutputView(); + } + + public void start() { + while(!GameResult.EXIT.equals(play())){} + } + + public GameResult play() { + this.numberBaseBallGame.initGame(); + while(isGamePlaying()) { + outputView.showBallResult(numberBaseBallGame.throwBall(guessBallNumber())); + } + outputView.showGameFinished(); + return inputManager.inputGameResult(); + } + + public boolean isGamePlaying() { + return GameStatus.PLAYING.equals(numberBaseBallGame.getGameStatus()); + } + + public BallNumber guessBallNumber() { + return inputManager.inputGuessedBallNumber(); + } + +} diff --git a/src/main/java/InputManager.java b/src/main/java/view/InputManager.java similarity index 59% rename from src/main/java/InputManager.java rename to src/main/java/view/InputManager.java index 8b3d18e7..58c28aa7 100644 --- a/src/main/java/InputManager.java +++ b/src/main/java/view/InputManager.java @@ -1,4 +1,7 @@ +package view; + import domain.ballnumber.BallNumber; +import domain.game.GameResult; import view.InputView; public class InputManager { @@ -26,4 +29,21 @@ public BallNumber tryInputGuessedBallNumber() { } } + public GameResult inputGameResult() { + GameResult gameResult = null; + while((gameResult=tryInputGameResult())==null){} + return gameResult; + } + + public GameResult tryInputGameResult() { + GameResult gameResult = null; + try { + gameResult = inputView.inputGameResult(); + } catch (Exception e) { + System.out.println(e.getMessage()); + } finally { + return gameResult; + } + } + } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index cd9872fd..c46dc898 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -2,6 +2,7 @@ import config.GlobalData; import domain.ballnumber.BallNumber; +import domain.game.GameResult; import java.io.BufferedReader; import java.io.InputStreamReader; @@ -46,4 +47,13 @@ public List stringToIntList(String input) { return result; } + public GameResult inputGameResult() throws Exception{ + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String input = br.readLine(); + // 유효성 검사 + int selected = input.charAt(0)-'0'; + if(selected==1) return GameResult.RESTART; + return GameResult.EXIT; + } + } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index b042d015..54ef075d 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,5 +1,6 @@ package view; +import config.GlobalData; import domain.ballnumber.BallResult; public class OutputView { @@ -14,4 +15,8 @@ public void showBallResult(BallResult ballResult) { sb.append("낫싱"); System.out.println(sb); } + + public void showGameFinished() { + System.out.println(GlobalData.BALL_NUMBER_LENGTH+"개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } } diff --git a/src/test/java/game/NumberBaseBallGameTest.java b/src/test/java/game/NumberBaseBallGameTest.java new file mode 100644 index 00000000..a5f26455 --- /dev/null +++ b/src/test/java/game/NumberBaseBallGameTest.java @@ -0,0 +1,40 @@ +package game; + +import domain.ballnumber.BallNumber; +import domain.ballnumber.generator.BallNumberGenMode; +import domain.game.GameStatus; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class NumberBaseBallGameTest { + + @Test + @DisplayName("정답시 게임 중지 테스트") + public void correctNumberGameStopTest() { + //given + NumberBaseBallGame numberBaseBallGame = new NumberBaseBallGame(BallNumberGenMode.RANDOM); + + //when + numberBaseBallGame.throwBall(numberBaseBallGame.getCorrectBallNumber()); + + //then + assertEquals(numberBaseBallGame.getGameStatus(), GameStatus.FINISH); + } + + @Test + @DisplayName("오답시 게임 계속 진행 테스트") + public void wrongNumberGameKeepGoingTest() { + //given + NumberBaseBallGame numberBaseBallGame = new NumberBaseBallGame(BallNumberGenMode.RANDOM); + + //when + numberBaseBallGame.throwBall(new BallNumber(List.of(1,1,1))); + + //then + assertEquals(numberBaseBallGame.getGameStatus(), GameStatus.PLAYING); + } +} diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java deleted file mode 100644 index 43e47d90..00000000 --- a/src/test/java/study/StringTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package study; - -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class StringTest { - @Test - void replace() { - String actual = "abc".replace("b", "d"); - assertThat(actual).isEqualTo("adc"); - } -} From b871169f3bf3ca5baf518b04d508636061bddcfd Mon Sep 17 00:00:00 2001 From: oscar Date: Thu, 22 Dec 2022 01:48:00 +0900 Subject: [PATCH 10/11] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EC=88=AB=EC=9E=90=EC=97=90=20=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC,=20=EC=9E=AC?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/view/InputView.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8f5a6252..7bc25d80 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,4 @@ [x] 추측 숫자에 대한 결과 도출 및 출력 기능 [x] 정답이 나올 때까지 추측 반복 기능 [x] 정답시 게임 재시작 or 종료 기능 -[ ] 사용자 게능임 재시작 입력 숫자에 대한 유효성 검사, 재입력 기능 \ No newline at end of file +[x] 사용자 게임 재시작 입력 숫자에 대한 유효성 검사, 재입력 기능 \ No newline at end of file diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index c46dc898..dab81e01 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -50,10 +50,14 @@ public List stringToIntList(String input) { public GameResult inputGameResult() throws Exception{ System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); String input = br.readLine(); - // 유효성 검사 + validateGameResultInput(input); int selected = input.charAt(0)-'0'; if(selected==1) return GameResult.RESTART; return GameResult.EXIT; } + public void validateGameResultInput(String input) { + if(input.length()!=1 || (input.charAt(0)<'1' || input.charAt(0)>'2')) + throw new IllegalArgumentException("1 과 2 중에서 선택해주세요."); + } } From 9391b49a0e038ce038eaf29a07cf8b63d84384e1 Mon Sep 17 00:00:00 2001 From: queueSub Date: Thu, 22 Dec 2022 02:36:33 +0900 Subject: [PATCH 11/11] =?UTF-8?q?docs:=20readme=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 --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7bc25d80..271e8b33 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,9 @@ ### 구현할 기능 목록 [x] 랜덤 세 자리 숫자 생성 기능 -[x] 사용자 추측 숫자 입력 기능 -[x] 사용자 입력 추측 숫자에 대한 유효성 검사, 재입력 기능 -[x] 추측 숫자에 대한 결과 도출 및 출력 기능 -[x] 정답이 나올 때까지 추측 반복 기능 -[x] 정답시 게임 재시작 or 종료 기능 +[x] 사용자 추측 숫자 입력 기능 +[x] 사용자 입력 추측 숫자에 대한 유효성 검사, 재입력 기능 +[x] 추측 숫자에 대한 결과 도출 및 출력 기능 +[x] 정답이 나올 때까지 추측 반복 기능 +[x] 정답시 게임 재시작 or 종료 기능 [x] 사용자 게임 재시작 입력 숫자에 대한 유효성 검사, 재입력 기능 \ No newline at end of file