From 489b1d645244a001a62e4786e6d80e7f7f474a21 Mon Sep 17 00:00:00 2001 From: taewoocode Date: Tue, 24 Oct 2023 02:15:25 +0900 Subject: [PATCH 1/9] 1st --- java-baseball-precourse | 1 + src/main/java/baseball/Application.java | 2 ++ 2 files changed, 3 insertions(+) create mode 160000 java-baseball-precourse diff --git a/java-baseball-precourse b/java-baseball-precourse new file mode 160000 index 000000000..94764a7ab --- /dev/null +++ b/java-baseball-precourse @@ -0,0 +1 @@ +Subproject commit 94764a7ab44346cc5ffa910e8ee544f0030238f1 diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 7f1901b8b..87b139bb0 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -3,5 +3,7 @@ public class Application { public static void main(String[] args) { //TODO: 숫자 야구 게임 구현 + + } } From be58908e58b050e2a0fbd1f419b797f612ff0ffb Mon Sep 17 00:00:00 2001 From: taewoocode Date: Tue, 24 Oct 2023 02:16:46 +0900 Subject: [PATCH 2/9] 2nd --- src/main/java/baseball/Application.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 87b139bb0..393007a39 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -5,5 +5,7 @@ public static void main(String[] args) { //TODO: 숫자 야구 게임 구현 + + } } From 40fb79c9afa5a1c936ad84c0812d0c027b2fbd3b Mon Sep 17 00:00:00 2001 From: taewoocode Date: Tue, 24 Oct 2023 02:25:50 +0900 Subject: [PATCH 3/9] =?UTF-8?q?Game=20=EC=B6=94=EA=B0=80=ED=96=87=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/Game.java | 39 +++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/java/baseball/domain/Game.java diff --git a/src/main/java/baseball/domain/Game.java b/src/main/java/baseball/domain/Game.java new file mode 100644 index 000000000..20f92a2bb --- /dev/null +++ b/src/main/java/baseball/domain/Game.java @@ -0,0 +1,39 @@ +package baseball.domain; + +public class Game { + + int strikeCount; + int ballCount; + int[] gameNumbers; + + public Game(int[] numbers) { + gameNumbers = numbers; + } + + public void initBaseBall() { + strikeCount = 0; + ballCount = 0; + } + + public int getStrikeCount() { + return strikeCount; + } + + public int getBallCount() { + return ballCount; + } + + public int[] getGameNumbers() { + return gameNumbers; + } + + public void incStrikeCount() { + strikeCount += 1; + } + + public void incBallCount() { + ballCount += 1; + } + } + + From bfe735d006a4a5a85b1787114b6f89988f33eafc Mon Sep 17 00:00:00 2001 From: taewoocode Date: Tue, 24 Oct 2023 02:26:53 +0900 Subject: [PATCH 4/9] =?UTF-8?q?User=EC=B6=94=EA=B0=80=ED=96=87=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/User.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/baseball/domain/User.java diff --git a/src/main/java/baseball/domain/User.java b/src/main/java/baseball/domain/User.java new file mode 100644 index 000000000..18ff8b87b --- /dev/null +++ b/src/main/java/baseball/domain/User.java @@ -0,0 +1,15 @@ +package baseball.domain; + +public class User { + + int[] userNumbers; + + public int[] getUserNumbers() { + return userNumbers; + } + + public void setUserNumbers(int[] userNumbers) { + this.userNumbers = userNumbers; + } + } + From 3eb116db7d3777d2fbefb0d5182e25874012667b Mon Sep 17 00:00:00 2001 From: taewoocode Date: Tue, 24 Oct 2023 02:32:13 +0900 Subject: [PATCH 5/9] 3rd --- .../java/baseball/service/GameService.java | 4 +++ src/main/java/baseball/utils/Parser.java | 36 +++++++++++++++++++ src/main/java/baseball/utils/RandomUtils.java | 4 +++ 3 files changed, 44 insertions(+) create mode 100644 src/main/java/baseball/service/GameService.java create mode 100644 src/main/java/baseball/utils/Parser.java create mode 100644 src/main/java/baseball/utils/RandomUtils.java diff --git a/src/main/java/baseball/service/GameService.java b/src/main/java/baseball/service/GameService.java new file mode 100644 index 000000000..5768bba23 --- /dev/null +++ b/src/main/java/baseball/service/GameService.java @@ -0,0 +1,4 @@ +package baseball.service; + +public class GameService { +} diff --git a/src/main/java/baseball/utils/Parser.java b/src/main/java/baseball/utils/Parser.java new file mode 100644 index 000000000..a8615867e --- /dev/null +++ b/src/main/java/baseball/utils/Parser.java @@ -0,0 +1,36 @@ +package baseball.utils; + +public class Parser { + + public int[] parseUserInput(String input, int size) throws IllegalArgumentException { + checkSize(input, size); + return getParseInt(input, size); + } + + private void checkSize(String input, int size) throws IllegalArgumentException { + if (input.length() != size) { + throw new IllegalArgumentException(); + } + } + + private int[] getParseInt(String input, int size) throws IllegalArgumentException { + int[] parseInt = new int[size]; + + for (int i = 0; i < input.length(); i++) { + if (!checkDigit(input, i)) { + throw new IllegalArgumentException(); + } + parseInt[i] = convertCharToInt(input, i); + } + return parseInt; + } + + private int convertCharToInt(String input, int i) { + return input.charAt(i) - '0'; + } + + private Boolean checkDigit(String input, int i) { + return '0' <= input.charAt(i) && input.charAt(i) <= '9'; + } + } +} diff --git a/src/main/java/baseball/utils/RandomUtils.java b/src/main/java/baseball/utils/RandomUtils.java new file mode 100644 index 000000000..48967b4cb --- /dev/null +++ b/src/main/java/baseball/utils/RandomUtils.java @@ -0,0 +1,4 @@ +package baseball.utils; + +public class RandomUtils { +} From 551e64688ce714d3d24bc4635610c0661d5cb523 Mon Sep 17 00:00:00 2001 From: taewoocode Date: Tue, 24 Oct 2023 02:38:35 +0900 Subject: [PATCH 6/9] =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 5 +- src/main/java/baseball/Controller.java | 57 +++++++++++++++ .../java/baseball/service/GameService.java | 69 ++++++++++++++++++- src/main/java/baseball/utils/RandomUtils.java | 33 ++++++++- src/main/java/baseball/view/RequestInput.java | 11 +++ .../java/baseball/view/SystemMessage.java | 23 +++++++ 6 files changed, 193 insertions(+), 5 deletions(-) create mode 100644 src/main/java/baseball/Controller.java create mode 100644 src/main/java/baseball/view/RequestInput.java create mode 100644 src/main/java/baseball/view/SystemMessage.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 393007a39..71ada5c60 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -2,10 +2,9 @@ public class Application { public static void main(String[] args) { + Controller controller = new Controller(); + controller.run(); //TODO: 숫자 야구 게임 구현 - - - } } diff --git a/src/main/java/baseball/Controller.java b/src/main/java/baseball/Controller.java new file mode 100644 index 000000000..43e0b812e --- /dev/null +++ b/src/main/java/baseball/Controller.java @@ -0,0 +1,57 @@ +package baseball; + +import baseball.service.GameService; +import baseball.view.RequestInput; +import baseball.view.SystemMessage; +import camp.nextstep.edu.missionutils.Console; + + public class Controller { + final int SIZE = 3; + final int START_INCLUSIVE = 1; + final int END_INCLUSIVE = 9; + final int RETRY = 1; + final int GAME_OVER = 2; + + GameService gameService = new GameService(); + + public void run() throws IllegalArgumentException { + setGame(); + startGame(); + endGame(); + askRetry(); + } + + private void setGame() { + gameService.setGame(SIZE, START_INCLUSIVE, END_INCLUSIVE); + } + + private void startGame() throws IllegalArgumentException { + gameService.playGame(); + } + + private void endGame() { + SystemMessage.printGameOverMessage(); + } + + /** + * 유저입력이 (문자 or 0 or 3 이상) : Exception + * 유저입력이 (1) : 재시작 + * 유저입력이 (2) : 종료 + */ + private void askRetry() throws IllegalArgumentException { + RequestInput.printRetryMessage(); + if (getInputNum() == RETRY) { + run(); + } + } + + private int getInputNum() throws IllegalArgumentException { + int inputNum = Integer.parseInt(Console.readLine()); + + if (inputNum == 0 || inputNum > GAME_OVER) { + throw new IllegalArgumentException(); + } + return inputNum; + } + } + diff --git a/src/main/java/baseball/service/GameService.java b/src/main/java/baseball/service/GameService.java index 5768bba23..cc8500a4d 100644 --- a/src/main/java/baseball/service/GameService.java +++ b/src/main/java/baseball/service/GameService.java @@ -1,4 +1,71 @@ package baseball.service; +import baseball.domain.Game; +import baseball.domain.User; +import baseball.utils.Parser; +import baseball.utils.RandomUtils; +import baseball.view.RequestInput; +import baseball.view.SystemMessage; +import camp.nextstep.edu.missionutils.Console; + public class GameService { -} + + int size; + Game game; + User user = new User(); + Parser parser = new Parser(); + SystemMessage systemMessage = new SystemMessage(); + + public void setGame(int size, int start, int end) { + this.size = size; + game = new Game(RandomUtils.getRandomNumbers(size, start, end)); + } + + public void playGame() { + int strike = 0; + while (strike != 3) { + play(); + systemMessage.printScoreMessage(game.getBallCount(), game.getStrikeCount()); + strike = game.getStrikeCount(); + } + } + + private void play() { + game.initBaseBall(); + user.setUserNumbers(getUserNumber()); + computeScore(); + } + + private int[] getUserNumber() throws IllegalArgumentException { + RequestInput.requestInputData(); + String input = Console.readLine(); + return parser.parseUserInput(input, size); + } + + private void computeScore() { + for (int i = 0; i < size; i++) { + compute(game.getGameNumbers(), user.getUserNumbers(), i); + } + } + + private void compute(int[] gameNumber, int[] userNumber, int index) { + int temp = -1; + for (int i = 0; i < gameNumber.length; i++) { + if (gameNumber[i] == userNumber[index]) { + temp = i; + break; + } + } + incCount(index, temp); + } + + private void incCount(int index, int temp) { + if (temp != index && temp != -1) { + game.incBallCount(); + } + if (temp == index) { + game.incStrikeCount(); + } + } + } + diff --git a/src/main/java/baseball/utils/RandomUtils.java b/src/main/java/baseball/utils/RandomUtils.java index 48967b4cb..09ad12fd5 100644 --- a/src/main/java/baseball/utils/RandomUtils.java +++ b/src/main/java/baseball/utils/RandomUtils.java @@ -1,4 +1,35 @@ package baseball.utils; +import camp.nextstep.edu.missionutils.Randoms; public class RandomUtils { -} + + + + + public static int[] getRandomNumbers(int size, int start, int end) { + int[] numbers = new int[3]; + + for (int i = 0; i < size; i++) { + numbers[i] = getUniqueRandomNumber(numbers, start, end, i); + } + return numbers; + } + + private static int getUniqueRandomNumber(int[] numbers, int start, int end, int i) { + int randomNumber = Randoms.pickNumberInRange(start, end); + while (!isUnique(numbers, i, randomNumber)) { + randomNumber = Randoms.pickNumberInRange(start, end); + } + return randomNumber; + } + + private static Boolean isUnique(int[] numbers, int i, int randomNumber) { + for (int j = 0; j < i; j++) { + if (numbers[j] == randomNumber) { + return false; + } + } + return true; + } + } + diff --git a/src/main/java/baseball/view/RequestInput.java b/src/main/java/baseball/view/RequestInput.java new file mode 100644 index 000000000..f599fa7c9 --- /dev/null +++ b/src/main/java/baseball/view/RequestInput.java @@ -0,0 +1,11 @@ +package baseball.view; + +public class RequestInput { + public static void requestInputData() { + System.out.print("숫자를 입력해 주세요 : "); + } + + public static void printRetryMessage() { + System.out.println("게임을 다시 시작하려면 1, 종료하려면 2를 입력하세요."); + } +} diff --git a/src/main/java/baseball/view/SystemMessage.java b/src/main/java/baseball/view/SystemMessage.java new file mode 100644 index 000000000..980887c0a --- /dev/null +++ b/src/main/java/baseball/view/SystemMessage.java @@ -0,0 +1,23 @@ +package baseball.view; + +public class SystemMessage { + public void printScoreMessage(int ball, int strike) { + if (ball == 0 && strike == 0) { + System.out.println("낫싱"); + } + if (ball == 0 && strike != 0) { + System.out.println(strike + "스트라이크"); + } + if (ball != 0 && strike == 0) { + System.out.println(ball + "볼"); + } + if (ball != 0 && strike != 0) { + System.out.println(ball + "볼 " + strike + "스트라이크"); + } + } + + public static void printGameOverMessage() { + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } +} + From 736858e132b048f637cba5e6da31b5767a3cbb82 Mon Sep 17 00:00:00 2001 From: taewoocode Date: Tue, 24 Oct 2023 17:29:09 +0900 Subject: [PATCH 7/9] =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/utils/Parser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/utils/Parser.java b/src/main/java/baseball/utils/Parser.java index a8615867e..0fac7286f 100644 --- a/src/main/java/baseball/utils/Parser.java +++ b/src/main/java/baseball/utils/Parser.java @@ -33,4 +33,4 @@ private Boolean checkDigit(String input, int i) { return '0' <= input.charAt(i) && input.charAt(i) <= '9'; } } -} + From 296ccff8128c1b4abc5cf36ff3f4ce6d8ef0b540 Mon Sep 17 00:00:00 2001 From: taewoocode Date: Wed, 25 Oct 2023 05:27:09 +0900 Subject: [PATCH 8/9] =?UTF-8?q?=EB=8B=A4=EC=8B=9C=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 71ada5c60..8f6e74a3a 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -6,5 +6,7 @@ public static void main(String[] args) { controller.run(); //TODO: 숫자 야구 게임 구현 + + } } From d0ff28fe3edc7fa3e2bacb90da60018ffa8714e2 Mon Sep 17 00:00:00 2001 From: taewoocode Date: Wed, 25 Oct 2023 21:56:07 +0900 Subject: [PATCH 9/9] =?UTF-8?q?=EC=9E=AC=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- java-baseball-precourse | 1 - 1 file changed, 1 deletion(-) delete mode 160000 java-baseball-precourse diff --git a/java-baseball-precourse b/java-baseball-precourse deleted file mode 160000 index 94764a7ab..000000000 --- a/java-baseball-precourse +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 94764a7ab44346cc5ffa910e8ee544f0030238f1