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

[숫자 야구 게임]오연지 미션 제출합니다. #580

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,34 @@

<br>

## 👀 기능 목록
<숫자 생성>
1. 숫자 랜덤 생성(1~9 범위의 3자리 자연수)
2. 각 자리 숫자는 중복 허용 XX

<입력>
1.[예외] 숫자가 아닌 값을 입력받은 경우
2.[예외] 3자리 자연수 아닌 경우
3.[예외] 각 자릿수의 숫자중 중복된 값이 있는 경우
4. [예외] 0 이하 음수인 경우
5. [예외] IllegalArgumentException 발생 시킨 후 종료

<힌트>
1. 같은 자릿수에 숫자 일치 : 스트라이크
2. 다른 자릿수에 숫자 일치 : 볼
3. 다른 자릿수에 다른 수 : 낫싱

<출력>
1. 볼, 스트라이크 카운트 후 출력
2. 출력 순서: n볼 m스트라이크
3. m=3일 때(3 스트라이크) 게임 종료 문구 출력

<종료조건>
1. 재시작 - 숫자 랜덤 생성 메서드 호출부분으로 돌아감
2. 입력 종료 - 게임 종료!

<br>

## ✍🏻 입출력 요구사항

### ⌨️ 입력
Expand Down
30 changes: 27 additions & 3 deletions src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,31 @@
package baseball;

import java.util.List;

import service.ComputerRandomNum;
import service.JudgeResult;
import util.InputUtil;

public class Application {
public static void main(String[] args) {
//TODO: 숫자 야구 게임 구현
}
public static void main(String[] args) {
//TODO: 숫자 야구 게임 구현
ComputerRandomNum clearNumber = new ComputerRandomNum();
InputUtil inputUtil = new InputUtil();
JudgeResult judge = new JudgeResult();

boolean again = true;

while (again){
List<Integer> computer = clearNumber.getComputerNumber();
String result = "";
while (!result.equals("3스트라이크")){
result = judge.judgement(computer, inputUtil.userNumber());
System.out.println(result);
}
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
again = inputUtil.replay();
}
}


}
26 changes: 26 additions & 0 deletions src/main/java/service/CompareNum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package service;

import java.util.List;

public class CompareNum {
public int countBall(List<Integer> computer, List<Integer> user){
int result = 0;
for(int i = 0; i < user.size(); i++){
if(computer.contains(user.get(i))){
result += 1;
}
}
return result;
}

public int countStrike(List<Integer> computer, List<Integer> user){
int strike = 0;
for(int i = 0; i < user.size(); i++){
if(computer.get(i) == user.get(i)){
strike += 1;
}
}
return strike;
}

}
35 changes: 35 additions & 0 deletions src/main/java/service/ComputerRandomNum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package service;

import java.util.List;
import java.util.ArrayList;
import camp.nextstep.edu.missionutils.Randoms;

public class ComputerRandomNum {

private List<Integer> computerNumber;

public ComputerRandomNum() {
computerNumber = setGameNumber();
}

public List<Integer> getComputerNumber() {
return computerNumber;
}
public static int getComputerNum() {
return Randoms.pickNumberInRange(1, 9);
}

public List<Integer> setGameNumber() {
List<Integer> computerNumber = new ArrayList<>();
while (computerNumber.size() < 3) {
int randomNumber = getComputerNum();
if(computerNumber.contains(randomNumber)){
continue;
}else {
computerNumber.add(randomNumber);
}
}
return computerNumber;
}

}
27 changes: 27 additions & 0 deletions src/main/java/service/JudgeResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package service;

import java.util.List;

public class JudgeResult {

CompareNum compare = new CompareNum();

public String judgement(List<Integer> computer, List<Integer> player){
int total = compare.countBall(computer, player);
int strike = compare.countStrike(computer, player);
int ball = total - strike;

String result = null;

if(total == 0){
result = "낫싱";
}else if(ball != 0 && strike == 0){
result = ball + "볼";
}else if(strike != 0 && ball == 0){
result = strike + "스트라이크";
}else {
result = ball + "볼 " + strike + "스트라이크";
}
return result;
}
}
50 changes: 50 additions & 0 deletions src/main/java/util/InputException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package util;

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

public class InputException {
private String inputNumber;

public InputException(String inputNumber) {

isStringLengthCorrect(inputNumber);
isDigitPlayerNumber(inputNumber);
isDifferentPlayerNumber(inputNumber);

this.inputNumber = inputNumber;
}

public String getInputNumber() {
return inputNumber;
}

public static void isStringLengthCorrect(String word) throws IllegalArgumentException {
if (word.length() != 3) {
throw new IllegalArgumentException("잘못된 값을 입력하셨습니다. ");
}
}


public static void isDifferentPlayerNumber(String word) throws IllegalArgumentException {
Set<Character> set = new HashSet<>();

for (int i = 0; i < word.length(); i++) {
set.add(word.charAt(i));
}
if (set.size() != word.length()) {
throw new IllegalArgumentException("잘못된 값을 입력하셨습니다.");
}
}
public static void isDigitPlayerNumber(String word) {
for (int i = 0; i < word.length(); i++) {
isDigitCharInString(word, i);
}
}

public static void isDigitCharInString(String word, int index) throws IllegalArgumentException {
if (!Character.isDigit(word.charAt(index))) {
throw new IllegalArgumentException("잘못된 값을 입력하셨습니다.");
}
}
}
31 changes: 31 additions & 0 deletions src/main/java/util/InputUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package util;

import java.util.List;
import java.util.ArrayList;
import camp.nextstep.edu.missionutils.Console;

public class InputUtil {

public List<Integer> userNumber() {
System.out.print("숫자를 입력해주세요 : ");
String input = Console.readLine();
// 예외 처리 메서드 만들기....

List<Integer> userNum = new ArrayList<>();
for(String number: input.split("")){
userNum.add(Integer.parseInt(number));
}
return userNum;
}

public boolean replay(){
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
String input = Console.readLine();
char answer = input.charAt(0);
if(answer == '1'){
return true;
}
return false;
}

}