기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.
같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다.
예) 상대방(컴퓨터)의 수가 425일 때
- 123을 제시한 경우 : 1스트라이크
- 456을 제시한 경우 : 1볼 1스트라이크
- 789를 제시한 경우 : 낫싱
위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다.
컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다.
게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다.
이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다.
게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다.
사용자가 잘못된 값을 입력할 경우 IllegalArgumentException
을 발생시킨 후 애플리케이션은 종료되어야 한다.
- 게임(Game)
- 게임의 흐름을 제어한다.
- 게임을 계속 진행할 지 판단한다.
- 공격(Attack)
- 사용자가 숫자를 입력해 정답을 맞힌다.
- 방어(Defence)
- 정답을 만든다.
- 심판(Judge)
- 방어가 만든 정답을 기억한다.
- 공격이 입력한 숫자와 방어가 제시한 숫자를 비교해 결과를 출력한다.
- 사용자 입력
- 정확히 3 글자여야한다.
- 숫자로만 이루어져야 한다.
- 중복되는 숫자가 있으면 안된다.
- 정답
- 정확히 3 글자여야한다.
- 숫자로만 이루어져야 한다.
- 중복되는 숫자가 있으면 안된다.
- 입력과 정답 비교 결과
- 같은 수가 같은 자리에 있으면
스트라이크
이다. - 같은 수가 다른 자리에 있으면
볼
이다. - 같은 수가 하나도 없으면
낫싱
이다. - 전부 일치하면
정답
으로 게임이 끝난다.
- 같은 수가 같은 자리에 있으면
- 종료
- 조건에 맞지 않는 문자열을 입력하면
IllegalArgumentException
이 발생하면서 종료된다. - 정답을 맞힌 후 사용자가 n또는 N을 입력하면 종료된다.
- 조건에 맞지 않는 문자열을 입력하면
- 각 역할이 하나의 책임을 갖도록 해야한다.
- 메시지를 응답하는 객체의 내부 상태를 드러내지 않아야 한다.
- 메시지가 객체를 선택하도록 해야한다.