본 프로젝트는 경기 생성 → 경기 세팅 → 경기 진행 → 이닝 단위 처리로 명확히 책임을 분리한 구조를 따른다.
각 클래스는 하나의 역할에 집중하도록 설계되어 있으며, 확장(난이도 추가, AI, 신규 이벤트)에도 유연하다.
-
역할
- 프로그램 실행 진입점
- 경기 생성 및 시작
-
책임
Match객체 생성Match.playGame()호출
-
비고
- 이닝 수, 난이도 선택 등 초기 입력은 Main에서 시작
- 상세 설정 로직은
MatchConfigs로 위임
-
역할
- 경기 세팅 생성 담당
-
책임
- 난이도별 경기 설정 생성
- 이닝 수, 상대 득점 가중치 등 초기 설정 구성
-
비고
- 설정 값의 유효성 검증은 하지 않음
- “어떤 설정을 만들 것인가”에만 집중
-
역할
- 경기 설정의 유효성 보장
-
책임
- 이닝 수, 난이도, 가중치 등 설정 값 검증
- 잘못된 설정이 생성되지 않도록 방어
-
비고
- 생성 시점에서 검증 완료
- 이후 로직에서는 신뢰 가능한 설정 객체로 사용
-
역할
- 경기 전체 흐름 제어
-
책임
playGame():- n이닝 경기 루프 관리
- 초/말 공격 순서 제어
- 상대 → 나 / 나 → 상대 흐름 관리
- 점수 누적 및 경기 종료 판정
-
구성
- 상대 공격:
WeightedEnemyScorePolicy - 내 공격:
HalfInning
- 상대 공격:
-
비고
- 경기 규칙이나 세부 로직은 직접 처리하지 않음
- 언제 무엇을 호출할지만 결정하는 오케스트레이터 역할
-
역할
- 상대 팀 공격 시 득점 생성
-
책임
- 난이도/이닝에 따른 가중치 기반 득점 생성
- 랜덤 요소를 포함한 상대 득점 시뮬레이션
-
비고
- Match로부터 독립된 정책 객체
- 향후 다른 득점 정책으로 교체 가능
-
역할
- 내 공격 반이닝 처리 전담
-
책임
- 타석 진행
- 주자 상태에 따른 이벤트 처리
- 도루 시도
- 타격 스타일 선택
- 타격 결과 반영
- 3루 주자 태그업(희생플라이)
-
구성 시스템
StealSystem— 도루 처리BattingDecision— 타격 스타일 선택BatSimulator— 타격 결과 시뮬레이션SacFlySystem— 희생플라이(태그업) 처리
-
비고
- Match로부터 분리된 반이닝 전용 엔진
- 이벤트 확장(번트, 히트앤런 등)에 용이