diff --git a/README.md b/README.md index 8d7e8aee..c570c2ac 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -# java-baseball-precourse \ No newline at end of file +# java-baseball-precourse +1. random하게 숫자 3개를 생성해내는 기능 추가 (RandomNumbersGenerator) +2. 사용자의 입력이 올바른지 확인 후, 입력을 List 3개로 return 기능 추가 (NumberBaseballGame의 parseInput) +3. 사용자의 입력과 맞추어야할 숫자를 비교해서 결과를 String으로 출력하는 기능 추가 (NumberBaseballGame의 checkNumbers) +4. 사용자가 숫자를 맞출 때까지 계속해서 게임을 진행하는 기능 추가 (NumberBaseballGame의 play) +5. play 함수에서 게임승리 메시지와 게임을 다시 시작할 지에 대한 기능을 추가, + scanner close +6. 전체 게임 flow를 담당하는 Application class 생성 +7. 게임을 재시작할 때 scanner가 닫혀서 재입력이 안되는 경우, 출력 조금 수정 +8. 입력 받는 부분 ParseInput 버그 수정 -> 안띄우고 입력받도록 수정 \ No newline at end of file diff --git a/build.gradle b/build.gradle index 20a92c9e..96126bd0 100644 --- a/build.gradle +++ b/build.gradle @@ -22,4 +22,4 @@ dependencies { test { useJUnitPlatform() -} +} \ No newline at end of file diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 00000000..c5afa529 --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,19 @@ +import java.util.List; + +public class Application { + + public static void main(String[] args) { + System.out.println("Welcome to the Number Baseball Game!"); + + while (true) { + List computerNumbers = RandomNumbersGenerator.generateUniqueNumbers(); + NumberBaseballGame game = new NumberBaseballGame(computerNumbers); + boolean continuePlaying = game.play(); + if (!continuePlaying) { + System.out.println("Thank you for playing!"); + break; + } + } + } +} + diff --git a/src/main/java/NumberBaseballGame.java b/src/main/java/NumberBaseballGame.java new file mode 100644 index 00000000..ef7205c0 --- /dev/null +++ b/src/main/java/NumberBaseballGame.java @@ -0,0 +1,65 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class NumberBaseballGame { + + private final List computerNumbers; + private boolean gameWon = false; + + public NumberBaseballGame(List computerNumbers) { + this.computerNumbers = computerNumbers; + } + + public boolean play() { + Scanner scanner = new Scanner(System.in); + while (!gameWon) { + System.out.print("숫자를 입력해 주세요: "); + try { + String input = scanner.nextLine(); + List userNumbers = parseInput(input); + + String result = checkNumbers(userNumbers); + System.out.println(result); + } catch (IllegalArgumentException e) { + System.out.println("Invalid input. Application will terminate."); + break; + } + } + + if(gameWon) System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String option = scanner.nextLine(); + return option.trim().equals("1"); + } + + public List parseInput(String input) throws IllegalArgumentException { + if (input.length() != 3) throw new IllegalArgumentException("Exactly three digits are required."); + + List userNumbers = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + int number = Character.getNumericValue(input.charAt(i)); + if (number < 1 || number > 9) throw new IllegalArgumentException("Digits must be between 1 and 9."); + if (userNumbers.contains(number)) throw new IllegalArgumentException("Duplicate digits are not allowed."); + userNumbers.add(number); + } + return userNumbers; + } + + private String checkNumbers(List userNumbers) { + int strikes = 0, balls = 0; + for (int i = 0; i < 3; i++) { + int userNumber = userNumbers.get(i); + if (userNumber == computerNumbers.get(i)) strikes++; + else if (computerNumbers.contains(userNumber)) balls++; + } + + if(strikes == 3) gameWon = true; + + if (strikes == 0 && balls == 0) return "낫싱"; + else if(strikes == 0) return balls + "볼"; + else if(balls == 0) return strikes + "스트라이크"; + else return balls + "볼 " + strikes + "스트라이크"; + } +} \ No newline at end of file diff --git a/src/main/java/RandomNumbersGenerator.java b/src/main/java/RandomNumbersGenerator.java new file mode 100644 index 00000000..cdb16697 --- /dev/null +++ b/src/main/java/RandomNumbersGenerator.java @@ -0,0 +1,15 @@ +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class RandomNumbersGenerator { + + public static List generateUniqueNumbers() { + List numbers = new ArrayList<>(); + for (int i = 1; i <= 9; i++) { + numbers.add(i); + } + Collections.shuffle(numbers); + return numbers.subList(0, 3); + } +} \ No newline at end of file