From d6aeb02156a1dae3d75e347d8c644286f8ef2f06 Mon Sep 17 00:00:00 2001 From: HONGMINJU Date: Thu, 22 Dec 2022 03:48:34 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=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/Main.java | 10 ++++++++++ src/main/java/console/InputConsole.java | 20 ++++++++++++++++++++ src/main/java/console/Menu.java | 16 ++++++++++++++++ src/main/java/console/OutputConsole.java | 5 +++++ src/main/java/game/Game.java | 19 +++++++++++++++++++ 5 files changed, 70 insertions(+) create mode 100644 src/main/java/Main.java create mode 100644 src/main/java/console/InputConsole.java create mode 100644 src/main/java/console/Menu.java create mode 100644 src/main/java/console/OutputConsole.java create mode 100644 src/main/java/game/Game.java diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 00000000..e605dadc --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,10 @@ +import game.Game; + +public class Main { + public static void main(String[] args){ + Game game = new Game(); + do { + + } while (game.checkGameAgain()); + } +} diff --git a/src/main/java/console/InputConsole.java b/src/main/java/console/InputConsole.java new file mode 100644 index 00000000..32e3d3c6 --- /dev/null +++ b/src/main/java/console/InputConsole.java @@ -0,0 +1,20 @@ +package console; + +import java.util.PrimitiveIterator; +import java.util.Scanner; + +public class InputConsole { + + private static final String ASK_GAME_AGAIN = "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; + + private final Scanner scanner; + + public InputConsole() { + this.scanner = new Scanner(System.in); + } + + public int getGameMenu(){ + System.out.println(ASK_GAME_AGAIN); + return scanner.nextInt(); + } +} diff --git a/src/main/java/console/Menu.java b/src/main/java/console/Menu.java new file mode 100644 index 00000000..6a9f1985 --- /dev/null +++ b/src/main/java/console/Menu.java @@ -0,0 +1,16 @@ +package console; + +public enum Menu { + DO_GAME(1), + EXIT_GAME(2); + + private final int menuNumber; + + Menu(int menuNumber) { + this.menuNumber = menuNumber; + } + + public static boolean isDoGame(int menuNumber) { + return DO_GAME.menuNumber == menuNumber; + } +} diff --git a/src/main/java/console/OutputConsole.java b/src/main/java/console/OutputConsole.java new file mode 100644 index 00000000..0a1b489a --- /dev/null +++ b/src/main/java/console/OutputConsole.java @@ -0,0 +1,5 @@ +package console; + +public class OutputConsole { + +} diff --git a/src/main/java/game/Game.java b/src/main/java/game/Game.java new file mode 100644 index 00000000..ac0cfe02 --- /dev/null +++ b/src/main/java/game/Game.java @@ -0,0 +1,19 @@ +package game; + + +import console.InputConsole; +import console.Menu; + +public class Game { + + private final InputConsole inputConsole; + private String answerNumber; + + public Game() { + this.inputConsole = new InputConsole(); + } + + public boolean checkGameAgain(){ + return Menu.isDoGame(inputConsole.getGameMenu()); + } +} From 1971c78257cfb7221b3d35a2786b0bfb35a33996 Mon Sep 17 00:00:00 2001 From: HONGMINJU Date: Thu, 22 Dec 2022 04:09:42 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=203=EC=9E=90=EB=A6=AC=20=EB=9E=9C?= =?UTF-8?q?=EB=8D=A4=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/console/InputConsole.java | 1 - src/main/java/game/Game.java | 21 ++++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/console/InputConsole.java b/src/main/java/console/InputConsole.java index 32e3d3c6..ceb16ad8 100644 --- a/src/main/java/console/InputConsole.java +++ b/src/main/java/console/InputConsole.java @@ -1,6 +1,5 @@ package console; -import java.util.PrimitiveIterator; import java.util.Scanner; public class InputConsole { diff --git a/src/main/java/game/Game.java b/src/main/java/game/Game.java index ac0cfe02..e3a60817 100644 --- a/src/main/java/game/Game.java +++ b/src/main/java/game/Game.java @@ -4,15 +4,34 @@ import console.InputConsole; import console.Menu; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + public class Game { private final InputConsole inputConsole; - private String answerNumber; + private int[] answerNumber; public Game() { this.inputConsole = new InputConsole(); } + public void start(){ + makeRandomNumber(); + } + + private void makeRandomNumber() { + ArrayList numbers = new ArrayList<>(); + for (int i = 1; i <= 9; i++) { + numbers.add(i); + } + Collections.shuffle(numbers); + for (int idx = 0; idx < 3; idx++) { + answerNumber[idx] = numbers.get(idx); + } + } + public boolean checkGameAgain(){ return Menu.isDoGame(inputConsole.getGameMenu()); } From 05c8b1ccc5d6e382c679d1200e9e76fb4c4a9ced Mon Sep 17 00:00:00 2001 From: HONGMINJU Date: Thu, 22 Dec 2022 04:59:00 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=203=EC=9E=90=EB=A6=AC=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=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/Main.java | 2 +- .../console/{InputConsole.java => Console.java} | 14 ++++++++++++-- src/main/java/console/OutputConsole.java | 5 ----- src/main/java/game/Game.java | 16 +++++++++------- 4 files changed, 22 insertions(+), 15 deletions(-) rename src/main/java/console/{InputConsole.java => Console.java} (50%) delete mode 100644 src/main/java/console/OutputConsole.java diff --git a/src/main/java/Main.java b/src/main/java/Main.java index e605dadc..6eecdefa 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -4,7 +4,7 @@ public class Main { public static void main(String[] args){ Game game = new Game(); do { - + game.start(); } while (game.checkGameAgain()); } } diff --git a/src/main/java/console/InputConsole.java b/src/main/java/console/Console.java similarity index 50% rename from src/main/java/console/InputConsole.java rename to src/main/java/console/Console.java index ceb16ad8..73617a79 100644 --- a/src/main/java/console/InputConsole.java +++ b/src/main/java/console/Console.java @@ -2,13 +2,13 @@ import java.util.Scanner; -public class InputConsole { +public class Console { private static final String ASK_GAME_AGAIN = "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; private final Scanner scanner; - public InputConsole() { + public Console() { this.scanner = new Scanner(System.in); } @@ -16,4 +16,14 @@ public int getGameMenu(){ System.out.println(ASK_GAME_AGAIN); return scanner.nextInt(); } + + public int[] getPlayerAnswer(){ + int[] playerAnswer = new int[3]; + String input = scanner.nextLine(); + String[] splitNumber = input.split(""); + for(int idx = 0; idx < 3; idx++){ + playerAnswer[idx] = Integer.getInteger(splitNumber[idx]); + } + return playerAnswer; + } } diff --git a/src/main/java/console/OutputConsole.java b/src/main/java/console/OutputConsole.java deleted file mode 100644 index 0a1b489a..00000000 --- a/src/main/java/console/OutputConsole.java +++ /dev/null @@ -1,5 +0,0 @@ -package console; - -public class OutputConsole { - -} diff --git a/src/main/java/game/Game.java b/src/main/java/game/Game.java index e3a60817..757b449d 100644 --- a/src/main/java/game/Game.java +++ b/src/main/java/game/Game.java @@ -1,24 +1,26 @@ package game; -import console.InputConsole; +import console.Console; import console.Menu; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; public class Game { - private final InputConsole inputConsole; - private int[] answerNumber; + private final Console console; + private int[] answer; public Game() { - this.inputConsole = new InputConsole(); + this.console = new Console(); + answer = new int[3]; } public void start(){ makeRandomNumber(); + int[] playerAnswer = console.getPlayerAnswer(); + } private void makeRandomNumber() { @@ -28,11 +30,11 @@ private void makeRandomNumber() { } Collections.shuffle(numbers); for (int idx = 0; idx < 3; idx++) { - answerNumber[idx] = numbers.get(idx); + answer[idx] = numbers.get(idx); } } public boolean checkGameAgain(){ - return Menu.isDoGame(inputConsole.getGameMenu()); + return Menu.isDoGame(console.getGameMenu()); } } From 518269d29cd1b2b4eed38e5ada3e9a2e5b58877a Mon Sep 17 00:00:00 2001 From: HONGMINJU Date: Thu, 22 Dec 2022 05:31:10 +0900 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20=EC=A0=90=EC=88=98=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/console/Console.java | 12 +++++++++--- src/main/java/game/Game.java | 27 +++++++++++++++++++++++---- src/main/java/game/Score.java | 27 +++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 src/main/java/game/Score.java diff --git a/src/main/java/console/Console.java b/src/main/java/console/Console.java index 73617a79..32255340 100644 --- a/src/main/java/console/Console.java +++ b/src/main/java/console/Console.java @@ -1,5 +1,8 @@ package console; +import game.Score; + +import java.util.ArrayList; import java.util.Scanner; public class Console { @@ -17,13 +20,16 @@ public int getGameMenu(){ return scanner.nextInt(); } - public int[] getPlayerAnswer(){ - int[] playerAnswer = new int[3]; + public ArrayList getPlayerAnswer(){ + ArrayList playerAnswer = new ArrayList<>(3); String input = scanner.nextLine(); String[] splitNumber = input.split(""); for(int idx = 0; idx < 3; idx++){ - playerAnswer[idx] = Integer.getInteger(splitNumber[idx]); + playerAnswer.add(Integer.getInteger(splitNumber[idx])); } return playerAnswer; } + + public void printScore(Score score){ + } } diff --git a/src/main/java/game/Game.java b/src/main/java/game/Game.java index 757b449d..04400f60 100644 --- a/src/main/java/game/Game.java +++ b/src/main/java/game/Game.java @@ -10,17 +10,36 @@ public class Game { private final Console console; - private int[] answer; + private ArrayList answer; public Game() { this.console = new Console(); - answer = new int[3]; + answer = new ArrayList<>(3); } public void start(){ makeRandomNumber(); - int[] playerAnswer = console.getPlayerAnswer(); + ArrayList playerAnswer = console.getPlayerAnswer(); + Score score = new Score(0,0); + setStrikeCount(playerAnswer, score); + for (int idx = 0; idx < 3; idx++) { + setBallCount(playerAnswer, score, idx); + } + console.printScore(score); + } + private void setBallCount(ArrayList playerAnswer, Score score, int idx){ + for (int compIdx = 0; compIdx < 3; compIdx++){ + if (compIdx != idx && answer.get(compIdx) == playerAnswer.get(idx)) + score.plusBall(); + } + } + + private void setStrikeCount(ArrayList playerAnswer, Score score){ + for (int idx = 0; idx < 3; idx++){ + if (answer.get(idx) == playerAnswer.get(idx)) + score.plusStrike(); + } } private void makeRandomNumber() { @@ -30,7 +49,7 @@ private void makeRandomNumber() { } Collections.shuffle(numbers); for (int idx = 0; idx < 3; idx++) { - answer[idx] = numbers.get(idx); + answer.set(idx, numbers.get(idx)); } } diff --git a/src/main/java/game/Score.java b/src/main/java/game/Score.java new file mode 100644 index 00000000..b0fafc86 --- /dev/null +++ b/src/main/java/game/Score.java @@ -0,0 +1,27 @@ +package game; + +public class Score { + private int ball; + private int strike; + + public Score(int ball, int strike) { + this.ball = ball; + this.strike = strike; + } + + public int getBall() { + return ball; + } + + public void plusBall() { + this.ball++; + } + + public int getStrike() { + return strike; + } + + public void plusStrike() { + this.strike++; + } +} From f1bbb7625f02ac364662ff5f45f08bfc0807c755 Mon Sep 17 00:00:00 2001 From: HONGMINJU Date: Thu, 22 Dec 2022 05:35:08 +0900 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20=EC=A0=90=EC=88=98=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/console/Console.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/console/Console.java b/src/main/java/console/Console.java index 32255340..710044ab 100644 --- a/src/main/java/console/Console.java +++ b/src/main/java/console/Console.java @@ -31,5 +31,11 @@ public ArrayList getPlayerAnswer(){ } public void printScore(Score score){ + if (score.getStrike() != 0) + System.out.println(String.format("%d 스트라이크", score.getStrike())); + if (score.getBall() != 0) + System.out.println(String.format("%d 볼", score.getBall())); + if (score.getStrike() == 0 && score.getBall() == 0) + System.out.println("낫싱"); } } From 075f0b7a0fa09c569b50cd9556ba30d9b519de28 Mon Sep 17 00:00:00 2001 From: HONGMINJU Date: Thu, 22 Dec 2022 06:04:28 +0900 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20=EC=B6=9C=EB=A0=A5=EB=AC=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/console/Console.java | 14 ++++++++++---- src/main/java/game/Game.java | 21 ++++++++++++++++----- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/main/java/console/Console.java b/src/main/java/console/Console.java index 710044ab..a5640789 100644 --- a/src/main/java/console/Console.java +++ b/src/main/java/console/Console.java @@ -8,7 +8,8 @@ public class Console { private static final String ASK_GAME_AGAIN = "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; - + private static final String INPUT_NUMBER = "숫자를 입력해주세요 : "; + private static final String GAME_END = "3개의 숫자를 모두 맞히셨습니다! 게임 종료"; private final Scanner scanner; public Console() { @@ -21,11 +22,12 @@ public int getGameMenu(){ } public ArrayList getPlayerAnswer(){ - ArrayList playerAnswer = new ArrayList<>(3); - String input = scanner.nextLine(); + System.out.println(INPUT_NUMBER); + ArrayList playerAnswer = new ArrayList<>(); + String input = scanner.next(); String[] splitNumber = input.split(""); for(int idx = 0; idx < 3; idx++){ - playerAnswer.add(Integer.getInteger(splitNumber[idx])); + playerAnswer.add(Integer.parseInt(splitNumber[idx])); } return playerAnswer; } @@ -38,4 +40,8 @@ public void printScore(Score score){ if (score.getStrike() == 0 && score.getBall() == 0) System.out.println("낫싱"); } + + public void printGameEnd(){ + System.out.println(GAME_END); + } } diff --git a/src/main/java/game/Game.java b/src/main/java/game/Game.java index 04400f60..c7dc0586 100644 --- a/src/main/java/game/Game.java +++ b/src/main/java/game/Game.java @@ -19,13 +19,22 @@ public Game() { public void start(){ makeRandomNumber(); - ArrayList playerAnswer = console.getPlayerAnswer(); - Score score = new Score(0,0); + while(true) { + ArrayList playerAnswer = console.getPlayerAnswer(); + Score score = new Score(0, 0); + setScore(playerAnswer, score); + console.printScore(score); + if (score.getStrike() == 3) + break; + } + console.printGameEnd(); + } + + private void setScore(ArrayList playerAnswer, Score score) { setStrikeCount(playerAnswer, score); for (int idx = 0; idx < 3; idx++) { setBallCount(playerAnswer, score, idx); } - console.printScore(score); } private void setBallCount(ArrayList playerAnswer, Score score, int idx){ @@ -37,19 +46,21 @@ private void setBallCount(ArrayList playerAnswer, Score score, int idx) private void setStrikeCount(ArrayList playerAnswer, Score score){ for (int idx = 0; idx < 3; idx++){ - if (answer.get(idx) == playerAnswer.get(idx)) + if (answer.get(idx) == playerAnswer.get(idx)) { score.plusStrike(); + } } } private void makeRandomNumber() { + answer.clear(); ArrayList numbers = new ArrayList<>(); for (int i = 1; i <= 9; i++) { numbers.add(i); } Collections.shuffle(numbers); for (int idx = 0; idx < 3; idx++) { - answer.set(idx, numbers.get(idx)); + answer.add(numbers.get(idx)); } } From 5434336e17781f5a8b1df56e9238bdf8a2b33e55 Mon Sep 17 00:00:00 2001 From: HONGMINJU Date: Thu, 22 Dec 2022 06:38:04 +0900 Subject: [PATCH 7/7] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++ src/test/java/game/GameTest.java | 42 +++++++++++++++++++++++++++++ src/test/java/study/StringTest.java | 13 --------- 3 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 src/test/java/game/GameTest.java delete mode 100644 src/test/java/study/StringTest.java diff --git a/README.md b/README.md index fcf3f057..558879bf 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,12 @@ ## 과제 제출 과정 * [과제 제출 방법](https://github.com/next-step/nextstep-docs/tree/master/ent-precourse) + +## 구현할 기능 +* 랜덤 숫자 생성 + * 길이는 3, 중복 X +* 숫자 입력 후 랜덤 숫자와 비교 + * 숫자와 위치가 같으면 스트라이크 + * 수자는 같은데 위치가 다르면 볼 + * 모두 맞으면 게임 종료 +* 각 게임이 끝나면 다시하기 s가능 diff --git a/src/test/java/game/GameTest.java b/src/test/java/game/GameTest.java new file mode 100644 index 00000000..15a9f2b6 --- /dev/null +++ b/src/test/java/game/GameTest.java @@ -0,0 +1,42 @@ +package game; + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +public class GameTest { + + Game game = new Game(); + + @Test + void testRandomNumberSizeIs3() throws Exception { + Method method = Game.class.getDeclaredMethod("makeRandomNumber"); + method.setAccessible(true); + Field field = Game.class.getDeclaredField("answer"); + field.setAccessible(true); + + ArrayList array = (ArrayList)field.get(game); + method.invoke(game); + assertThat(array.size()).isEqualTo(3); + } + + @Test + void testRandomNumberIsNotDuplicated() throws Exception { + Method method = Game.class.getDeclaredMethod("makeRandomNumber"); + method.setAccessible(true); + Field field = Game.class.getDeclaredField("answer"); + field.setAccessible(true); + + ArrayList array = (ArrayList)field.get(game); + method.invoke(game); + + Set set = new HashSet<>(array); + assertThat(set.size()).isEqualTo(array.size()); + } +} 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"); - } -}