diff --git a/README.md b/README.md index 8d7e8aee..16460788 100644 --- a/README.md +++ b/README.md @@ -1 +1,10 @@ -# java-baseball-precourse \ No newline at end of file +# java-baseball-precourse + +# 프로젝트 기능 목록 + +1. 사용자 입력 받기 +2. 입력 데이터 확인 +3. 결과 계산 +4. 계산된 결과 출력 +5. 에러 핸들링 +6. 게임 재시작 기능 \ 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..3000636a --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,8 @@ +public class Application { + public static void main(String[] args){ + + BaseballProcess game = new BaseballProcess(); + + game.startGame(); + } +} diff --git a/src/main/java/BaseballProcess.java b/src/main/java/BaseballProcess.java new file mode 100644 index 00000000..563e6ed6 --- /dev/null +++ b/src/main/java/BaseballProcess.java @@ -0,0 +1,95 @@ +import java.util.*; + +public class BaseballProcess { + + private List randomNumber; + private Scanner sc = new Scanner(System.in); + + // 테스트 용도 + public void setRandomNumber(List randomNumber) { + this.randomNumber = randomNumber; + } + public List getRandomNumber() { + return randomNumber; + } + + public BaseballProcess(){ + restart(); + } + + public void startGame(){ + while(true){ + System.out.print("숫자를 입력해 주세요 : "); + String input = sc.nextLine(); + + List guess = parseInput(input); + + int[] result = checkGuess(guess); + + if(result[0] == 3){ + System.out.println("3스트라이크"); + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + System.out.println("게임을 새로 시작하려면 1, 종료하렬면 2를 입력하세요."); + + String command = sc.nextLine(); + if("2".equals(command)){ + sc.close(); + break; + } + else{ + restart(); + } + } + else{ + printResult(result[0], result[1]); + } + } + } + + public List parseInput(String input){ + List number = new ArrayList<>(); + for(char c: input.toCharArray()){ + number.add(Character.getNumericValue(c)); + } + + return number; + } + + public int[] checkGuess(List guess){ + int strike = 0; + int ball = 0; + + for(int i=0; i0 && strike>0){ + System.out.printf("%d볼 %d스트라이크\n", ball, strike); + } + else if(ball > 0){ + System.out.printf("%d볼\n", ball); + } + else if(strike > 0){ + System.out.printf("%d스트라이크\n", strike); + } + } + } + + private void restart(){ + randomNumber = RandomNumberGeneration.randomNumberProduce(); + // System.out.printf("테스트: %s\n", randomNumber.toString()); + } +} \ No newline at end of file diff --git a/src/main/java/RandomNumberGeneration.java b/src/main/java/RandomNumberGeneration.java new file mode 100644 index 00000000..7d429396 --- /dev/null +++ b/src/main/java/RandomNumberGeneration.java @@ -0,0 +1,18 @@ +import java.util.*; + +public class RandomNumberGeneration { + + public static List randomNumberProduce(){ + List number = new ArrayList<>(); + + while(number.size() < 3){ + int randomNum = (int)(Math.random()*9) + 1; + + if(!number.contains(randomNum)){ + number.add(randomNum); + } + } + + return number; + } +} diff --git a/src/test/java/BaseballProcessTest.java b/src/test/java/BaseballProcessTest.java new file mode 100644 index 00000000..cd7a6689 --- /dev/null +++ b/src/test/java/BaseballProcessTest.java @@ -0,0 +1,30 @@ +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; + +import java.util.Arrays; +import java.util.List; + +class BaseballProcessTest { + + private BaseballProcess baseballProcess; + + @BeforeEach + void setUp() { + baseballProcess = new BaseballProcess(); + baseballProcess.setRandomNumber(Arrays.asList(1, 2, 3)); + } + + @Test + void testParseInput() { + List expected = Arrays.asList(1, 2, 3); + assertThat(baseballProcess.parseInput("123")).isEqualTo(expected); + } + + @Test + void testCheckGuess() { + assertThat(baseballProcess.checkGuess(Arrays.asList(1, 2, 3))).containsExactly(3, 0); + assertThat(baseballProcess.checkGuess(Arrays.asList(1, 2, 4))).containsExactly(2, 0); + assertThat(baseballProcess.checkGuess(Arrays.asList(4, 1, 2))).containsExactly(0, 2); + } +}