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
35 changes: 34 additions & 1 deletion src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,40 @@
package baseball;
import camp.nextstep.edu.missionutils.Console;

import java.util.List;

import static baseball.utils.DataUtils.convertToIntList;
import static baseball.utils.DataUtils.generateRandomNumbers;
import static baseball.utils.IOUtils.getResult;
import static baseball.utils.IOUtils.validateInput;

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
boolean playAgain = true;
while (playAgain) {
List<Integer> computerNumbers = generateRandomNumbers();
boolean gameOver = false;

System.out.println("숫자 야구 게임을 시작합니다.");

while (!gameOver) {
System.out.print("숫자를 입력해주세요 : ");
String userInput = Console.readLine();

validateInput(userInput);
List<Integer> userNumbers = convertToIntList(userInput);
Boolean is3Strike = getResult(computerNumbers, userNumbers);
if (is3Strike) {
gameOver = true;
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
}
}

System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
String choice = Console.readLine();
if (choice.equals("2")) {
playAgain = false;
}
}
}
}
29 changes: 29 additions & 0 deletions src/main/java/baseball/utils/DataUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package baseball.utils;

import camp.nextstep.edu.missionutils.Randoms;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class DataUtils {
public static List<Integer> generateRandomNumbers() {
List<Integer> computer = new ArrayList<>();
while (computer.size() < 3) {
int randomNumber = Randoms.pickNumberInRange(1, 9);
if (!computer.contains(randomNumber)) {
computer.add(randomNumber);
}
}
return computer;
}

public static List<Integer> convertToIntList(String input) {
List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < 3; i++) {
numbers.add(input.charAt(i) - '0');
}
return numbers;
}
}
47 changes: 47 additions & 0 deletions src/main/java/baseball/utils/IOUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package baseball.utils;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class IOUtils {
public static void validateInput(String input) {
if (input.length() != 3) {
throw new IllegalArgumentException();
}
Set<Character> charSet = new HashSet<>();
for (char ch : input.toCharArray()) {
if (!Character.isDigit(ch) || ch == '0' || !charSet.add(ch)) {
throw new IllegalArgumentException();
}
}
}

public static Boolean getResult(List<Integer> computerNumbers, List<Integer> userNumbers) {
int strikes = 0;
int balls = 0;
String result = "";

for (int i = 0; i < 3; i++) {
if (userNumbers.get(i).equals(computerNumbers.get(i))) {
strikes++;
} else if (computerNumbers.contains(userNumbers.get(i))) {
balls++;
}
}

if (strikes == 3) {
result = "3스트라이크";
System.out.println(result);
return true;
}

if (strikes == 0 && balls == 0) {
result = "낫싱";
} else {
result = balls + "볼 " + strikes + "스트라이크";
}
System.out.println(result);
return false;
}
}