From aebf9a32775af466e0d9f57f66910bc2a8449d35 Mon Sep 17 00:00:00 2001 From: KimJinYeongZ Date: Mon, 14 Oct 2024 11:09:29 +0900 Subject: [PATCH 1/9] =?UTF-8?q?:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20README.md=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29bb2..434bae9029 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,27 @@ +# ⚾️ 미션 #1 - 숫자 야구 +
+ +## 구현 기능 목록 + +### 1. 컴퓨터가 가진 수 3개 랜덤하게 정하기 (1~9) +> camp.nextstep.edu.missionutils.Randoms의 pickNumberInRange()를 활용 + +### 2. 컴퓨터 수 맞추기 +> camp.nextstep.edu.missionutils.Console의 readLine()을 활용
+- 스트라이크 : 같은 위치에 동일 수 존재하는지 확인 +- 볼 : 다른 위치에 동일 수 존재하는지 확인 +- 낫싱 : 어느 위치에도 동일 수가 존재하지 않는지 확인 (3 숫자 다 스트라이크, 볼이 아닌 경우) + +### 3. 컴퓨터가 가진 수 3개를 다 맞출 시 : 게임 라운드 종료 + +### 4. 라운드 종료 후 - 게임 재실행 및 게임 완전히 종료 선택 가능 +- 1 입력: 게임 라운드 재시작 +- 2 입력: 완전히 종료 + +### 5. 사용자 입력 오류 시 : IllegalArgumentException 오류 발생 시키기 +- 도전 중: 3개의 수 입력이 아닐 시 (2개 이하, 4개 이상일 경우) +- 게임 성공 후: 1,2가 아닌 수 입력 시 +
+
+ + \ No newline at end of file From af15ce4becdcbfb4ffe87a412142eb0191ac9e65 Mon Sep 17 00:00:00 2001 From: KimJinYeongZ Date: Mon, 14 Oct 2024 12:41:57 +0900 Subject: [PATCH 2/9] =?UTF-8?q?:=20=EB=9E=9C=EB=8D=A4=20=EC=88=98=20?= =?UTF-8?q?3=EA=B0=9C=20=EA=B0=96=EB=8A=94=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A5=BC=20=EB=A7=8C=EB=93=9C=EB=8A=94=20getComputerNums()=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Game.java | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/baseball/Game.java diff --git a/src/main/java/baseball/Game.java b/src/main/java/baseball/Game.java new file mode 100644 index 0000000000..fd99a970e3 --- /dev/null +++ b/src/main/java/baseball/Game.java @@ -0,0 +1,36 @@ +package baseball; + + +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; + +public class Game { + + static ArrayList computerNums; + + + public void start() { + } + + + /** + * 랜덤 수 3개를 갖는 리스트를 만드는 getComputerNums() 메서드 + * @return 3개의 랜덤 수를 갖는 ArrayList 반환 + */ + + public ArrayList getComputerNums() { + + ArrayList computerNums = new ArrayList<>(); + + while(computerNums.size() < 3) { + int num = Randoms.pickNumberInRange(1, 9); + if(!computerNums.contains(num)) { + computerNums.add(num); + } + } + + return computerNums; + } +} From e31d88a652db29caff3d9351ff01bf1f65649d6c Mon Sep 17 00:00:00 2001 From: KimJinYeongZ Date: Mon, 14 Oct 2024 12:50:59 +0900 Subject: [PATCH 3/9] =?UTF-8?q?:=20=EA=B0=81=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=84=A4=EB=AA=85=20=EB=B0=8F=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=ED=8B=80=20=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 4 ++- src/main/java/baseball/Game.java | 43 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34214..9d78e4d4b9 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -2,6 +2,8 @@ public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + + Game game = new Game(); + game.start(); } } diff --git a/src/main/java/baseball/Game.java b/src/main/java/baseball/Game.java index fd99a970e3..114fcea3b0 100644 --- a/src/main/java/baseball/Game.java +++ b/src/main/java/baseball/Game.java @@ -11,10 +11,42 @@ public class Game { static ArrayList computerNums; + /** + * Game 을 시작하는 start() 메서드 + * Application 에서 인스턴스화 하여 이 메서드를 부름으로써 게임을 시작한다. + */ public void start() { + + boolean isStartGame = true; + + while(isStartGame) { + + computerNums = getComputerNums(); + + startRound(); + + isStartGame = checkStart(); + } + } + + + /** + * 라운드 진행 startRound() 메서드 + */ + public void startRound() { + } + /** + * 게임이 끝난 후, 재시작을 묻는 checkStart() 메서드 + * @return Boolean 형 반환, true => 재시작, false => 종료 + */ + public boolean checkStart() { + + return true; + } + /** * 랜덤 수 3개를 갖는 리스트를 만드는 getComputerNums() 메서드 * @return 3개의 랜덤 수를 갖는 ArrayList 반환 @@ -33,4 +65,15 @@ public ArrayList getComputerNums() { return computerNums; } + + + /** + * 사용자 입력 예외를 잡는 checkException() 메서드 + * 1. 게임 시작 및 종료 선택 시, 1 또는 2의 입력이 아닐 때 + * 2. 게임 라운드 진행 시, 3개의 숫자가 아닌, 2개 이하, 4개 이상의 숫자가 입력될 때 + */ + public void checkException() { + + } + } From 2c8116b151298fa4f143ad3d455a0022a806b296 Mon Sep 17 00:00:00 2001 From: CheChe903 Date: Mon, 14 Oct 2024 12:59:31 +0900 Subject: [PATCH 4/9] =?UTF-8?q?:=20=EA=B2=8C=EC=9E=84=EC=9D=98=20?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=EC=9D=84=20=EB=8B=B4=EB=8B=B9=ED=95=98?= =?UTF-8?q?=EB=8A=94=20start()=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 메서드에서, 초기에 isStartGame은 true로 구성된다. (초기에는 게임을 바로 시작) 이후, 사용자의 선택을 받는 checkStart()함수를 통해 게임을 종료할 지, 계속 진행할 지 결정후, 게임을 다시 시작하거나 종료한다. --- src/main/java/baseball/Game.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/Game.java b/src/main/java/baseball/Game.java index 114fcea3b0..a3e5206ff3 100644 --- a/src/main/java/baseball/Game.java +++ b/src/main/java/baseball/Game.java @@ -18,7 +18,6 @@ public class Game { public void start() { boolean isStartGame = true; - while(isStartGame) { computerNums = getComputerNums(); @@ -44,7 +43,17 @@ public void startRound() { */ public boolean checkStart() { - return true; + int input = Integer.parseInt(Console.readLine()); + + + + if(input == 1) { + return true; + } + else if(input ==2) { + return false; + } + } /** From 0ebde7fc06f0977a5666e351789e4965f211eeac Mon Sep 17 00:00:00 2001 From: CheChe903 Date: Mon, 14 Oct 2024 13:01:55 +0900 Subject: [PATCH 5/9] =?UTF-8?q?:=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EC=9D=98=EC=82=AC=20=EA=B2=B0=EC=A0=95=EC=9D=84=20=EB=8B=B4?= =?UTF-8?q?=EB=8B=B9=ED=95=98=EB=8A=94=20checkStart()=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 메서드는 사용자의 입력을 받아, 1이면 true, 2는 false로 각각 게임 재진행 및 종료를 담당하게 된다. --- src/main/java/baseball/Game.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/baseball/Game.java b/src/main/java/baseball/Game.java index a3e5206ff3..af58bc345f 100644 --- a/src/main/java/baseball/Game.java +++ b/src/main/java/baseball/Game.java @@ -45,14 +45,10 @@ public boolean checkStart() { int input = Integer.parseInt(Console.readLine()); + checkException(input); + return input == 1; - if(input == 1) { - return true; - } - else if(input ==2) { - return false; - } } @@ -81,7 +77,7 @@ public ArrayList getComputerNums() { * 1. 게임 시작 및 종료 선택 시, 1 또는 2의 입력이 아닐 때 * 2. 게임 라운드 진행 시, 3개의 숫자가 아닌, 2개 이하, 4개 이상의 숫자가 입력될 때 */ - public void checkException() { + public void checkException(int input) { } From 9277161b019b96d002e23db006f3f837dcef1cfd Mon Sep 17 00:00:00 2001 From: CheChe903 Date: Mon, 14 Oct 2024 13:09:28 +0900 Subject: [PATCH 6/9] =?UTF-8?q?:=20=EC=98=88=EC=99=B8=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EB=8B=B4=EB=8B=B9=20checkException()=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 메서드는 eventType에 따라 두 가지 경우의 수가 존재. 상황에 따라 예외 처리를 구현 --- src/main/java/baseball/Game.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/Game.java b/src/main/java/baseball/Game.java index af58bc345f..a8618425a7 100644 --- a/src/main/java/baseball/Game.java +++ b/src/main/java/baseball/Game.java @@ -45,7 +45,7 @@ public boolean checkStart() { int input = Integer.parseInt(Console.readLine()); - checkException(input); + checkException(2, input); return input == 1; @@ -76,8 +76,22 @@ public ArrayList getComputerNums() { * 사용자 입력 예외를 잡는 checkException() 메서드 * 1. 게임 시작 및 종료 선택 시, 1 또는 2의 입력이 아닐 때 * 2. 게임 라운드 진행 시, 3개의 숫자가 아닌, 2개 이하, 4개 이상의 숫자가 입력될 때 + * @param eventType 상황에 따른 eventType + * @param input 사용자 입력 input */ - public void checkException(int input) { + public void checkException(int eventType, int input) { + + switch (eventType) { + case 1: + if(input > 999 || input < 100) + throw new IllegalArgumentException(); + break; + + case 2: + if(input !=1 && input !=2) + throw new IllegalArgumentException(); + break; + } } From 6c302ad0f8967be4152e89606afaad969bb09e3d Mon Sep 17 00:00:00 2001 From: CheChe903 Date: Mon, 14 Oct 2024 13:24:20 +0900 Subject: [PATCH 7/9] =?UTF-8?q?:=20Enum=20Class=20ballType=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EB=B0=8F=20ballType=20=EC=B2=B4=ED=81=AC?= =?UTF-8?q?=20getStrikeOrBallOrNothing()=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 볼의 타입을 ENUM 클래스로 구현 및 해당에 맞는 상황일 경우 그것에 맞는 ENUM 타입 반환 --- src/main/java/baseball/Game.java | 35 ++++++++++++++++++++++++---- src/main/java/baseball/ballType.java | 6 +++++ 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/main/java/baseball/ballType.java diff --git a/src/main/java/baseball/Game.java b/src/main/java/baseball/Game.java index a8618425a7..a9ea90933d 100644 --- a/src/main/java/baseball/Game.java +++ b/src/main/java/baseball/Game.java @@ -6,11 +6,13 @@ import java.util.ArrayList; +import static baseball.ballType.*; + + public class Game { static ArrayList computerNums; - /** * Game 을 시작하는 start() 메서드 * Application 에서 인스턴스화 하여 이 메서드를 부름으로써 게임을 시작한다. @@ -34,9 +36,37 @@ public void start() { */ public void startRound() { + while(true) { + + } + } + /** + * + * @param input 사용자 입력 숫자 1개 + * @param index 시용자 입력 숫자의 Index + * @return EnumType ballType 반환 + */ + public ballType getStrikeOrBallOrNothing (int input, int index) { + + + for(int i=0; i<3; i++) { + int cur = computerNums.get(i); + + if(input == cur && index == i) { + return STRIKE; + } + else if(input == cur) { + return BALL; + } + } + + return NOTHING; + + } + /** * 게임이 끝난 후, 재시작을 묻는 checkStart() 메서드 * @return Boolean 형 반환, true => 재시작, false => 종료 @@ -48,15 +78,12 @@ public boolean checkStart() { checkException(2, input); return input == 1; - - } /** * 랜덤 수 3개를 갖는 리스트를 만드는 getComputerNums() 메서드 * @return 3개의 랜덤 수를 갖는 ArrayList 반환 */ - public ArrayList getComputerNums() { ArrayList computerNums = new ArrayList<>(); diff --git a/src/main/java/baseball/ballType.java b/src/main/java/baseball/ballType.java new file mode 100644 index 0000000000..94ea88ace5 --- /dev/null +++ b/src/main/java/baseball/ballType.java @@ -0,0 +1,6 @@ +package baseball; + +public enum ballType { + + STRIKE,BALL,NOTHING +} From 6229696b74e77b32f41f48f8e8b645ba2abfa86c Mon Sep 17 00:00:00 2001 From: CheChe903 Date: Mon, 14 Oct 2024 13:46:57 +0900 Subject: [PATCH 8/9] =?UTF-8?q?:=20numSize=EB=A1=9C=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=20=EA=B5=90=EC=B2=B4=20=EB=B0=8F=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=20Round=20=EB=A9=94=EC=9D=B8=20=EB=B9=84=EC=A6=88=EB=8B=88?= =?UTF-8?q?=EC=8A=A4=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 ENUM 값에 따른 값 구한 후, 상황에 맞게 진행 --- src/main/java/baseball/Game.java | 48 +++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/Game.java b/src/main/java/baseball/Game.java index a9ea90933d..cd03cabfa4 100644 --- a/src/main/java/baseball/Game.java +++ b/src/main/java/baseball/Game.java @@ -12,6 +12,7 @@ public class Game { static ArrayList computerNums; + static int numSize; /** * Game 을 시작하는 start() 메서드 @@ -36,13 +37,56 @@ public void start() { */ public void startRound() { + System.out.println("숫자 야구 게임을 시작합니다."); + while(true) { + System.out.println("숫자를 입력해주세요: "); + int input = Integer.parseInt(Console.readLine()); + + checkException(1, input); + + int strike = 0; + int ball = 0; + for(int i =0; i getComputerNums() { } } + numSize = computerNums.size(); + return computerNums; } From fcfee0a2e44711f9a00b8fd66025b058fe8d5899 Mon Sep 17 00:00:00 2001 From: CheChe903 Date: Mon, 14 Oct 2024 14:05:23 +0900 Subject: [PATCH 9/9] =?UTF-8?q?:=20index=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=B2=84=EA=B7=B8=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 기존에 숫자의 인덱스 위치와 파라미터로 보내지는 index 위치가 달라 실패 --- src/main/java/baseball/Game.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/baseball/Game.java b/src/main/java/baseball/Game.java index cd03cabfa4..a8d62bd0a1 100644 --- a/src/main/java/baseball/Game.java +++ b/src/main/java/baseball/Game.java @@ -11,8 +11,8 @@ public class Game { - static ArrayList computerNums; - static int numSize; + ArrayList computerNums; + int numSize; /** * Game 을 시작하는 start() 메서드 @@ -20,6 +20,8 @@ public class Game { */ public void start() { + System.out.println("숫자 야구 게임을 시작합니다."); + boolean isStartGame = true; while(isStartGame) { @@ -37,8 +39,6 @@ public void start() { */ public void startRound() { - System.out.println("숫자 야구 게임을 시작합니다."); - while(true) { System.out.println("숫자를 입력해주세요: "); @@ -48,7 +48,7 @@ public void startRound() { int strike = 0; int ball = 0; - for(int i =0; i=0; i--) { int cur = input %10; ballType ballType = getStrikeOrBallOrNothing(cur, i); @@ -117,6 +117,7 @@ else if(input == cur) { */ public boolean checkStart() { + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); int input = Integer.parseInt(Console.readLine()); checkException(2, input);