Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
# java-baseball-precourse
# java-baseball-precourse
1. random하게 숫자 3개를 생성해내는 기능 추가 (RandomNumbersGenerator)
2. 사용자의 입력이 올바른지 확인 후, 입력을 List<Integer> 3개로 return 기능 추가 (NumberBaseballGame의 parseInput)
3. 사용자의 입력과 맞추어야할 숫자를 비교해서 결과를 String으로 출력하는 기능 추가 (NumberBaseballGame의 checkNumbers)
4. 사용자가 숫자를 맞출 때까지 계속해서 게임을 진행하는 기능 추가 (NumberBaseballGame의 play)
5. play 함수에서 게임승리 메시지와 게임을 다시 시작할 지에 대한 기능을 추가, + scanner close
6. 전체 게임 flow를 담당하는 Application class 생성
7. 게임을 재시작할 때 scanner가 닫혀서 재입력이 안되는 경우, 출력 조금 수정
8. 입력 받는 부분 ParseInput 버그 수정 -> 안띄우고 입력받도록 수정
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ dependencies {

test {
useJUnitPlatform()
}
}
19 changes: 19 additions & 0 deletions src/main/java/Application.java
Original file line number Diff line number Diff line change
@@ -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<Integer> computerNumbers = RandomNumbersGenerator.generateUniqueNumbers();
NumberBaseballGame game = new NumberBaseballGame(computerNumbers);
boolean continuePlaying = game.play();
if (!continuePlaying) {
System.out.println("Thank you for playing!");
break;
}
}
}
}

65 changes: 65 additions & 0 deletions src/main/java/NumberBaseballGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class NumberBaseballGame {

private final List<Integer> computerNumbers;
private boolean gameWon = false;

public NumberBaseballGame(List<Integer> computerNumbers) {
this.computerNumbers = computerNumbers;
}

public boolean play() {
Scanner scanner = new Scanner(System.in);
while (!gameWon) {
System.out.print("숫자를 입력해 주세요: ");
try {
String input = scanner.nextLine();
List<Integer> 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<Integer> parseInput(String input) throws IllegalArgumentException {
if (input.length() != 3) throw new IllegalArgumentException("Exactly three digits are required.");

List<Integer> 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<Integer> 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 + "스트라이크";
}
}
15 changes: 15 additions & 0 deletions src/main/java/RandomNumbersGenerator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class RandomNumbersGenerator {

public static List<Integer> generateUniqueNumbers() {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 9; i++) {
numbers.add(i);
}
Collections.shuffle(numbers);
return numbers.subList(0, 3);
}
}