Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[숫자 야구게임] 박지호 미션 제출합니다. #578

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# 미션 - 숫자 야구 게임

## 구현할 기능 목록

- 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`을 발생시킨 후 애플리케이션을 종료시키기.
- 게임이 시작되면 컴퓨터가 임의의 3자리 서로 다른 수를 생성한다.
- 사용자가 3자리 숫자를 입력하면 입력 값의 유효성을 검사한다.
- 사용자가 입력한 숫자와 컴퓨터가 생성한 숫자를 비교하고 결과를 계산한다.
- 게임이 종료되면 사용자가 게임을 다시 시작하거나 완전히 종료할 수 있는 옵션을 제공한다.


## 🔍 진행방식

- 미션은 **기능 요구사항, 프로그래밍 요구사항, 과제 진행 요구사항** 세 가지로 구성되어 있다.
Expand Down
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ dependencies {
implementation('com.github.woowacourse-projects:mission-utils:1.0.0')
}

compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}

test {
useJUnitPlatform()
}
100 changes: 99 additions & 1 deletion src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,105 @@
package baseball;

import camp.nextstep.edu.missionutils.Console;
import camp.nextstep.edu.missionutils.Randoms;

public class Application {


public static void main(String[] args) {
//TODO: 숫자 야구 게임 구현
while (true) {
try {
playGame();
} catch (IllegalArgumentException e) {
System.out.println("잘못된 입력입니다. 애플리케이션을 종료합니다.");
break;
}

System.out.print("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요: ");
String choice = Console.readLine();
if ("2".equals(choice)) {
break;
}
}
}

private static void playGame() {
int[] answer = generateRandomNumbers();
System.out.println("숫자 야구 게임을 시작합니다!");

while (true) {
System.out.print("숫자를 입력해주세요: ");
String input = Console.readLine();
if (!isValidInput(input)) {
throw new IllegalArgumentException("잘못된 입력입니다. 3자리 서로 다른 숫자를 입력해주세요.");
}

int[] guess = parseInput(input);
String result = getResult(answer, guess);
System.out.println(result);

if (result.equals("3스트라이크")) {
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
break;
}
}
}

private static int[] generateRandomNumbers() {
int[] numbers = new int[3];
for (int i = 0; i < 3; i++) {
numbers[i] = Randoms.pickNumberInRange(1, 9);
}
return numbers;
}

private static boolean isValidInput(String input) {
if (input.length() != 3) {
throw new IllegalArgumentException("3자리 숫자가 아닙니다.");
}
for (char c : input.toCharArray()) {
if (!Character.isDigit(c) || input.chars().distinct().count() != 3) {
throw new IllegalArgumentException("서로 다른 3자리 숫자를 입력하세요.");
}
}
return true;
}

private static int[] parseInput(String input) {
int[] numbers = new int[3];
for (int i = 0; i < 3; i++) {
numbers[i] = Character.getNumericValue(input.charAt(i));
}
return numbers;
}

private static String getResult(int[] answer, int[] guess) {
int strike = 0;
int ball = 0;
for (int i = 0; i < 3; i++) {
if (answer[i] == guess[i]) {
strike++;
} else if (contains(answer, guess[i])) {
ball++;
}
}
if (strike > 0 && ball > 0) {
return strike + "스트라이크 " + ball + "볼";
} else if (strike > 0) {
return strike + "스트라이크";
} else if (ball > 0) {
return ball + "볼";
} else {
return "낫싱";
}
}

private static boolean contains(int[] array, int num) {
for (int i : array) {
if (i == num) {
return true;
}
}
return false;
}
}
1 change: 1 addition & 0 deletions src/test/java/baseball/ApplicationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class ApplicationTest extends NsTest {
);
}


@Override
public void runMain() {
Application.main(new String[]{});
Expand Down