From 9e868b04397fe5a21205c0ada9cfead4972d99d8 Mon Sep 17 00:00:00 2001 From: bokyeong Date: Mon, 6 May 2024 09:39:26 +0900 Subject: [PATCH 1/7] =?UTF-8?q?Docs:=20README.md=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=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 --- README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8d7e8aee..df1f751d 100644 --- a/README.md +++ b/README.md @@ -1 +1,17 @@ -# java-baseball-precourse \ No newline at end of file +# java-baseball-precourse + + +## 구현 요구사항 +1. 컴퓨터가 가지고 있을 랜덤 정수형 숫자 3개 생성 기능 + * 숫자의 범위는 1~9이다. + * 중복은 허용하지 않는다. +2. 플레이어 숫자 입력 기능 + * 플레이어는 컴퓨터가 가지고 있을 것이라 예상하는 숫자를 입력할 수 있다. + * 유효하지 않은 숫자를 입력할 경우 IllegalArgumentException를 발생시키고 프로그램은 종료된다. + * 정수형이 아닌 입력값, 유효하지 않은 범위, 길이가 3이 아닐 경우 +3. 플레이어 숫자 판정 + * 같은 수가 컴퓨터의 숫자의 같은 자리에 있을 경우 스트라이크, 숫자는 같지만 다른 자리에 있을 경우 볼, 같은 수가 전혀 없으면 낫싱이라는 결과를 얻을 수 있다. + * #스트라이크와 같이 각각의 스트라이크,볼의 개수를 나타내야한다. + * 플레이어가 모든 숫자를 맞출 때까지 입력과 판정 과정이 반복될 수 있어야한다. +4. 게임 재시작 혹은 종료 기능 + * 숫자를 모두 맞추면 게임이 종료되고 사용자는 게임을 다시 할 지 아예 종료할지 선택할 수 있다. \ No newline at end of file From 9c0daed3ab62b8bf7bbcc0d3e8e567d9aa4343ca Mon Sep 17 00:00:00 2001 From: bokyeong Date: Mon, 6 May 2024 11:15:18 +0900 Subject: [PATCH 2/7] =?UTF-8?q?Feat:=20=EB=9E=9C=EB=8D=A4=ED=95=9C=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=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/RandomIntGenerate.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/RandomIntGenerate.java diff --git a/src/main/java/RandomIntGenerate.java b/src/main/java/RandomIntGenerate.java new file mode 100644 index 00000000..13802735 --- /dev/null +++ b/src/main/java/RandomIntGenerate.java @@ -0,0 +1,20 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +public class RandomIntGenerate { + public static List init() { + List nums = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + nums.add(generateNumber(nums)); + } + return nums; + } + private static int generateNumber(List nums){ + Random random = new Random(); + int randInt; + do { + randInt = random.nextInt(9) + 1; + } while (nums.contains(randInt)); + return randInt; + } +} From fe68b0c0d7cf768508764d9fabff9e3c4d3c873a Mon Sep 17 00:00:00 2001 From: bokyeong Date: Mon, 6 May 2024 11:47:38 +0900 Subject: [PATCH 3/7] =?UTF-8?q?Feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EA=B0=92=20=EB=B0=9B=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/UserInput.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/UserInput.java diff --git a/src/main/java/UserInput.java b/src/main/java/UserInput.java new file mode 100644 index 00000000..2800e774 --- /dev/null +++ b/src/main/java/UserInput.java @@ -0,0 +1,28 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class UserInput { + public static List getInput() throws IllegalArgumentException{ + + Scanner scanner = new Scanner(System.in); + System.out.println("1~9까지의 숫자를 중복없이 입력해주세요."); + List userInputs = new ArrayList<>(); + for(int i = 0; i<3; i++) { + System.out.println(i + 1 + "번째 숫자를 입력해주세요 : "); + Integer num = scanner.nextInt(); + if (isValid(userInputs,num)){ + userInputs.add(num); + } + else{ + System.out.println("잘못된 숫자입니다."); + throw new IllegalArgumentException(); + } + } + return userInputs; + } + + private static boolean isValid(List nums,Integer num){ + return num > 0 && num < 10 && !nums.contains(num); + } +} From f6a1ff52e2548a0b2f6e8f0f2894eee5e9acf0de Mon Sep 17 00:00:00 2001 From: bokyeong Date: Mon, 6 May 2024 12:08:29 +0900 Subject: [PATCH 4/7] =?UTF-8?q?Feat:=20=EC=A0=90=EC=88=98=20=EB=A7=A4?= =?UTF-8?q?=EA=B8=B0=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EB=B3=BC,=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=9D=BC=EC=9D=B4=ED=81=AC=20=EA=B0=9C=EC=88=98=20?= =?UTF-8?q?=EC=84=B8=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/BaseballGameService.java | 12 +++++++++ src/main/java/ScoreCounting.java | 37 ++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/main/java/BaseballGameService.java create mode 100644 src/main/java/ScoreCounting.java diff --git a/src/main/java/BaseballGameService.java b/src/main/java/BaseballGameService.java new file mode 100644 index 00000000..2fbedd28 --- /dev/null +++ b/src/main/java/BaseballGameService.java @@ -0,0 +1,12 @@ +import java.util.List; + +public class BaseballGameService { + public static void main(String[] args) { + List randNums = RandomIntGenerate.init(); + List userInputs; + do { + userInputs = UserInput.getInput(); + }while (!ScoreCounting.count(randNums, userInputs)); + + } +} \ No newline at end of file diff --git a/src/main/java/ScoreCounting.java b/src/main/java/ScoreCounting.java new file mode 100644 index 00000000..fb6c93e4 --- /dev/null +++ b/src/main/java/ScoreCounting.java @@ -0,0 +1,37 @@ +import java.util.List; + +public class ScoreCounting { + public static boolean count(List randInputs, List userInputs){ + String result = ""; + int strike = 0; + int ball = 0; + int miss = 0; + for (int i = 0; i < userInputs.size(); i++){ + if (userInputs.get(i).equals(randInputs.get(i))){ + ball++; + } else if (randInputs.contains(userInputs.get(i))) { + strike++; + } + else{ + miss++; + } + } + if (ball == 3){ + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + return true; + } + if (miss == 3){ + result = "낫싱"; + } + else{ + if (ball > 0){ + result += (ball+"볼 "); + } + if (strike > 0){ + result += (strike+"스크라이트"); + } + } + System.out.println(result); + return false; + } +} From 2a614d13a9d31fa0ef80222295fd231d3b4de1ba Mon Sep 17 00:00:00 2001 From: bokyeong Date: Mon, 6 May 2024 12:20:56 +0900 Subject: [PATCH 5/7] =?UTF-8?q?Feat:=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=ED=98=B9=EC=9D=80=20=EC=A2=85=EB=A3=8C=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/BaseballGameService.java | 16 +++++++++++----- src/main/java/GameManager.java | 18 ++++++++++++++++++ src/main/java/ScoreCounting.java | 2 +- 3 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 src/main/java/GameManager.java diff --git a/src/main/java/BaseballGameService.java b/src/main/java/BaseballGameService.java index 2fbedd28..a74b8f70 100644 --- a/src/main/java/BaseballGameService.java +++ b/src/main/java/BaseballGameService.java @@ -2,11 +2,17 @@ public class BaseballGameService { public static void main(String[] args) { - List randNums = RandomIntGenerate.init(); - List userInputs; - do { - userInputs = UserInput.getInput(); - }while (!ScoreCounting.count(randNums, userInputs)); + boolean restart = true; + while(restart){ + ScoreCounting scoreCounting = new ScoreCounting(); + List randNums = RandomIntGenerate.init(); + List userInputs; + do { + userInputs = UserInput.getInput(); + } while (!scoreCounting.count(randNums, userInputs)); + GameManager manager = new GameManager(); + restart = manager.restart(); + } } } \ No newline at end of file diff --git a/src/main/java/GameManager.java b/src/main/java/GameManager.java new file mode 100644 index 00000000..80502ce2 --- /dev/null +++ b/src/main/java/GameManager.java @@ -0,0 +1,18 @@ +import java.util.Scanner; + +public class GameManager { + public boolean restart(){ + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + Scanner scanner = new Scanner(System.in); + int restart = scanner.nextInt(); + if (restart == 1){ + return true; + } + else if (restart == 2){ + return false; + } + else{ + throw new IllegalArgumentException(); + } + } +} diff --git a/src/main/java/ScoreCounting.java b/src/main/java/ScoreCounting.java index fb6c93e4..d6e08385 100644 --- a/src/main/java/ScoreCounting.java +++ b/src/main/java/ScoreCounting.java @@ -1,7 +1,7 @@ import java.util.List; public class ScoreCounting { - public static boolean count(List randInputs, List userInputs){ + public boolean count(List randInputs, List userInputs){ String result = ""; int strike = 0; int ball = 0; From 9c752a2afe4662a88a34dc4db74919c0f5308908 Mon Sep 17 00:00:00 2001 From: bokyeong Date: Mon, 6 May 2024 12:30:56 +0900 Subject: [PATCH 6/7] =?UTF-8?q?Test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ScoreCountingTest.java | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/test/java/ScoreCountingTest.java diff --git a/src/test/java/ScoreCountingTest.java b/src/test/java/ScoreCountingTest.java new file mode 100644 index 00000000..32ff6f7f --- /dev/null +++ b/src/test/java/ScoreCountingTest.java @@ -0,0 +1,30 @@ +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreCountingTest { + + @Test + @DisplayName("점수 집계 테스트") + public void count(){ + //given + List userInputs = new ArrayList<>(); + userInputs.add(1); + userInputs.add(5); + userInputs.add(8); + List randInts = new ArrayList<>(); + randInts.add(8); + randInts.add(5); + randInts.add(3); + ScoreCounting counting = new ScoreCounting(); + + //when + boolean result = counting.count(userInputs,randInts); + + //then + Assertions.assertFalse(result); + } +} From 109ceaa3094bf47e83693ed8269e9ec2c9bad506 Mon Sep 17 00:00:00 2001 From: bokyeong Date: Mon, 6 May 2024 18:35:15 +0900 Subject: [PATCH 7/7] =?UTF-8?q?Fix:=20=ED=8C=8C=EC=9D=BC=EA=B5=AC=EC=A1=B0?= =?UTF-8?q?=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/Application.java | 6 ++++++ src/main/java/BaseballGameService.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 src/main/java/Application.java diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 00000000..e7d99091 --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,6 @@ +public class Application { + public static void main(String[] args) { + BaseballGameService baseballGameService = new BaseballGameService(); + baseballGameService.start(); + } +} \ No newline at end of file diff --git a/src/main/java/BaseballGameService.java b/src/main/java/BaseballGameService.java index a74b8f70..8eeb5eb2 100644 --- a/src/main/java/BaseballGameService.java +++ b/src/main/java/BaseballGameService.java @@ -1,7 +1,7 @@ import java.util.List; public class BaseballGameService { - public static void main(String[] args) { + public void start() { boolean restart = true; while(restart){ ScoreCounting scoreCounting = new ScoreCounting();