Skip to content

zhongdan-b/java-baseball-precourse

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

숫자 야구 게임 설계 문서

이 문서는 숫자 야구 게임의 핵심 로직과 상태 패턴(State Pattern)을 이용한 흐름 제어 설계를 포함합니다.


구현 범위

이번 과제에서 최종적으로 구현할 항목은 아래와 같습니다.

  • 1~9 사이의 서로 다른 3자리 컴퓨터 숫자 생성
  • 사용자 숫자 입력 처리 및 입력값 검증(길이, 숫자 여부, 범위, 중복)
  • 잘못된 입력 시 [ERROR] 메시지 출력 후 재입력
  • 스트라이크/볼/낫싱 계산과 결과 출력
  • 3스트라이크 달성 시 게임 종료 메시지 출력
  • 게임 종료 후 재시작(1) / 종료(2) 분기 처리
  • 상태 패턴(ProgressState, GameOverState, EndState) 기반 흐름 제어
  • 도메인 로직 단위 테스트(BaseballNumber, NumberGenerator, GameResult)

1. 도메인 모델

BaseballNumbers

사용자 또는 컴퓨터의 숫자를 관리하는 객체입니다.

  • 검증: 1~9 사이의 서로 다른 3자리 숫자인지 검증합니다.
  • 비교: 상대방의 BaseballNumbers와 비교하여 스트라이크와 볼의 개수를 계산합니다.

GameResult

계산된 스트라이크/볼 결과를 처리하는 객체입니다.

  • 결과 저장: 계산된 스트라이크와 볼의 개수를 보관합니다.
  • 메시지 생성: 결과에 따른 출력 메시지(예: 1볼 2스트라이크, 낫싱)를 생성합니다.
  • 판단: 3 스트라이크인지 여부를 확인하여 게임 종료 조건을 체크합니다.

2. 컨트롤러 및 실행 (Game Controller)

Game

전체적인 게임 인스턴스와 흐름을 관리합니다.

  • 상태 관리: 현재의 GameState를 유지합니다.
  • 게임 루프: 현재 상태가 종료 상태(EndState)가 될 때까지 실행을 반복합니다.
  • 유연성: 상태 패턴을 통해 게임 종료 후 새로운 게임을 시작하거나 완전히 종료하는 로직을 매끄럽게 연결합니다.

3. 상태 인터페이스 및 구현 (State Pattern)

상태 패턴을 활용하여 각 상황에 맞는 로직을 캡슐화하고 흐름을 제어합니다.

클래스명 역할 및 주요 기능 다음 상태 전이 (Next State)
ProgressState - "숫자를 입력해주세요" 프롬프트 출력
- 사용자 입력을 받아 BaseballNumbers와 비교 후 결과 출력
- 정답이 아니면: this (유지)
- 정답이면: GameOverState 반환
GameOverState - "3개의 숫자를 모두 맞히셨습니다! 게임 끝" 및 재시작 안내 출력
- 사용자 입력(1: 재시작, 2: 종료) 대기
- 1 입력 시: 새로운 정답을 가진 ProgressState
- 2 입력 시: EndState
EndState - 게임 루프를 종료해야 함을 Game에게 알림 - 없음 (시스템 종료)

4. 게임 실행 흐름 (Game Flow)

  1. 초기화: Game 객체가 생성될 때 컴퓨터의 숫자를 생성하고 ProgressState로 시작합니다.
  2. 진행: 사용자가 정답을 맞힐 때까지 ProgressState 내에서 입력을 반복합니다.
  3. 완료: 3 스트라이크 달성 시 GameOverState로 전환되어 축하 메시지를 출력합니다.
  4. 분기:
    • 사용자가 1을 입력하면 새로운 숫자를 생성하여 다시 ProgressState로 돌아갑니다.
    • 사용자가 2를 입력하면 EndState로 전환되어 루프가 종료됩니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%