11/24 14:15 - 17:31 11/25 15:48 - 17:45
- 개요
숫자 야구 게임 구현
- 요구사항
- 사용자가 서로다른 1부터 9까지 숫자 3개를 입력
- 컴퓨터의 숫자에 따라 힌트를 출력
- 같은 숫자 같은 자리 - 스트라이크
- 같은 숫자 다른 자리 - 볼
- 다른 숫자 다른 자리 - 낫싱
- 3개의 숫자를 모두 맞힐 시 게임종료
- 게임 종료후 게임을 다시 시작하거나 완전히 종료할 수 있다.
- 랜덤 숫자를 만드는 자
- 랜덤성이기에 가장 첫 단에서 관리할 수 있도록 만든다.
- 숫자를 관리하고 유저의 숫자를 비교하는 자 (생성은 랜덤 숫자를 만드는 자에게 받음)
- 랜덤 숫자를 만드는 자에게 주입을 받는다.
- 힌트를 관리하는 자
- 숫자를 관리하는 자에 의해 생성된다.
- 콘솔의 입출력을 관리하는 자 (View -> InputView, OutputView)
- 도메인과 무관하게 작동한다.
- 게임 전체의 흐름을 관리하는 자 (게임 종료 후 게임을 다시시작 or 완전히 종료)
- 도메인과 뷰의 연결다리 역할
-
랜덤 숫자를 만드는 자
- RandomListGeneratorImpl (구현체)
- 1 부터 9 까지 생성
- 3 개 생성
- (유효성) 중복
- RandomListGeneratorImpl (구현체)
-
정답 숫자를 관리하는 자
- NumberManager
- 생성은 RandomListGenerator를 통해 생성자 주입을 받는다.
- 해당 리스트와 비교하여 HintManger를 발행한다.
- calculateHint
- HintManager 객체 생성
- userNumber와 NumberManager가 가지고 있는 numbers 와 비교
- HintManager 갱신
- HintManager 반환
- NumberManager
-
Hint를 담고있는 자
- HintManager
- Ball, Strike 초기화
- update Strike,Ball
- 스트라이크
- 볼
- checkCorrect
- hintData의 STRIKE의 갯수가 3 개인가
- makeLiteral
- 일급 컬렉션의 리터럴 값 생성
- HintManager
-
입력 View
- readNumber
- 숫자인가
- 3자리 숫자인가
- 1부터 9까지의 숫자로만 이루어져있는가
- 중복된 숫자가 없는가
- readRestart
- 숫자인가
- 1 또는 2 인가
- readNumber
-
게임 흐름을 관리하는 자
- BaseBallGameManager
- 게임 시작하기
- '숫자 야구 게임을 시작합니다.' 출력하기
- 게임 플레이
- '숫자를 입력해주세요 : ' 출력하기
- 숫자 입력받기
- 받은 입력 정답숫자관리자에게 메시지를 보내 힌트 메니저 받기
- 힌트 매니저에게 데이터를 받아서 View에서 출력하기
- 힌트 매니저에게 3스트라이크인지 확인하기
- 정답 탈출
- 오답 루프
- 정답 이후
- 정답 숫자 갱신
- '3개의 숫자를 모두 맞히셨습니다! 게임종료' 출력하기
- '게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.' 출력하기
- 입력받기
- restart 갱신하기
- 다시 시작
- 인스턴스 변수 확인
- 게임 시작하기
- BaseBallGameManager
- 저장할 필요가 없는 데이터에 대해서는 객체를 만들지 않아야 한다.