기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.
- 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다.
- 예) 상대방(컴퓨터)의 수가 425일 때
- 123을 제시한 경우 : 1스트라이크
- 456을 제시한 경우 : 1볼 1스트라이크
- 789를 제시한 경우 : 낫싱
- 예) 상대방(컴퓨터)의 수가 425일 때
- 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다.
- 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다.
- 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다.
- 사용자가 잘못된 값을 입력할 경우
IllegalArgumentException
을 발생시킨 후 애플리케이션은 종료되어야 한다. - 아래의 프로그래밍 실행 결과 예시와 동일하게 입력과 출력이 이루어져야 한다.
-
게임에 사용될 숫자 배열을 생성한다.
-
camp.nextstep.edu.missionutils.Randoms
의pickNumberInRange()
를 활용한다. - 숫자 배열은 3개의 숫자로 구성되어 있다.
- 숫자 배열은 각 요소가 중복되지 않아야 한다.
- 숫자 배열의 요소는 1부터 9 사이의 값이어야 한다.
-
-
사용자로부터 숫자 배열을 입력받아 힌트를 계산한다.
- 힌트 계산에 앞서, 숫자 배열이 생성되었는지 확인한다.
- 힌트 정보는 스트라이크/볼 개수가 0으로 초기화되어있다.
- 같은 값이 같은 자리에 있으면
스트라이크
를 증가시킨다. - 같은 값이 다른 자리에 있으면
볼
을 증가시킨다.
-
스트라이크
와볼
이 없으면, 힌트는낫싱
이다. -
힌트 계산 결과가
3스트라이크
인지 확인한다.-
3스트라이크
가 아니면, 사용자 입력과 힌트 계산을 반복한다. -
3스트라이크
이면 사용자로부터 게임 진행 여부(1 또는 2)를 입력받는다.- 사용자의 입력이
1
이면 게임을 계속 진행한다. - 사용자의 입력이
2
이면 게임을 중단한다.
- 사용자의 입력이
-
-
사용자로부터 3자리 숫자를 입력받는다.
-
camp.nextstep.edu.missionutils.Console
의readLine()
을 활용한다. - 입력값이 숫자로 이뤄졌는지 확인한다. 아니면 예외를 발생시킨다.
- 입력값이 3자리 숫자로 이뤄졌는지 확인한다. 아니면 예외를 발생시킨다.
- 1부터 9 사이의 숫자로 3자리가 구성되었는지 확인한다. 아니면 예외를 발생시킨다.
- 3자리의 숫자 중 중복이 있는지 확인한다. 아니면 예외를 발생시킨다.
-
-
사용자로부터 게임 진행 여부를 입력받는다.
-
camp.nextstep.edu.missionutils.Console
의readLine()
을 활용한다. - 입력값이 숫자인지 확인한다. 아니면 예외를 발생시킨다.
- 입력값이
1
또는2
인지 확인한다. 아니면 예외를 발생시킨다.
-
- 사용자가 잘못된 값을 입력할 경우
IllegalArgumentException
을 발생시킨다.
- 문자열 상수 클래스를 목적에 따라 구분지어 분리한다. (GameMessage)
- 예외메세지에 따른 Exception 세분화
- enum 열거 타입으로 정수 열거 패턴을 대체한다. (GameRule)
- enum 클래스에 정적 메소드 추가
- NumberDigit 클래스
- NumberRange 클래스
- PlayOption 클래스
- stream 코드 적용
- InputView 클래스 유효성 검사 메소드에 stream 코드 적용
- PlayOption 클래스 of() 메소드에 stream 코드 적용
- Hint 클래스의 toString() 메소드 개선
- 3자리의 수
- 게임이 끝난 경우 재시작/종료를 구분하는 1과 2 중 하나의 수
- 입력한 수에 대한 결과를 볼, 스트라이크 개수로 표시
1볼 1스트라이크
- 하나도 없는 경우
낫싱
- 3개의 숫자를 모두 맞힐 경우
3스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
숫자를 입력해주세요 : 123
1볼 1스트라이크
숫자를 입력해주세요 : 145
1볼
숫자를 입력해주세요 : 671
2볼
숫자를 입력해주세요 : 216
1스트라이크
숫자를 입력해주세요 : 713
3스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.
1
숫자를 입력해주세요 : 123
1볼
…
This project is MIT licensed.