๋ณธ ํ๋ก์ ํธ๋ ๋ ํ์ ๋ผ์ธ์ ๊ณผ ์ ์ ๊ฐ๋ณ ์คํฏ์ ๊ธฐ๋ฐ์ผ๋ก 9์ด๋ ์ผ๊ตฌ ๊ฒฝ๊ธฐ๋ฅผ ์๋์ผ๋ก ์์ธกํ๊ณ ์งํํ๋ ์๋ฎฌ๋ ์ดํฐ์ ๋๋ค.
ํ์์ ํฌ์์ ์ค์ ํต๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ํ๋ฅ ์ ๋ชจ๋ธ์ ์ค๊ณํ์ฌ, ๊ฒฝ๊ธฐ ํ๋ฆ์ ํ์ค๊ฐ ์๊ฒ ๊ตฌํํ์์ต๋๋ค. JavaFX๋ฅผ ํ์ฉํ GUI ์๊ฐํ ๊ธฐ๋ฅ์ ํตํด ์ฌ์ฉ์๋ ์ค์๊ฐ์ผ๋ก ๊ฒฝ๊ธฐ ์ํฉ์ ํ์ ํ ์ ์์ต๋๋ค.
- ํ ๋ผ์ธ์
๊ตฌ์ฑ:
- CSV ๋ฐ์ดํฐ ์์ค๋ฅผ ๋ฐํ์ผ๋ก ์ฌ์ฉ์๋ก๋ถํฐ ์ ํ์ ํ๋ช , ํ์ ๋ผ์ธ์ (9๋ช ), ํฌ์ ์ค์ผ์ค(4๋ช )์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
- ์คํฏ ๊ธฐ๋ฐ ํ๋ฅ ๋ชจ๋ธ:
- ํ์ ์คํฏ: ํ์จ, ์ถ๋ฃจ์จ, ์ฅํ์จ, ์ผ์ง์จ, ๋ณผ๋ท๋ฅ , ๋๋ฃจ์ฑ๊ณต๋ฅ
- ํฌ์ ์คํฏ: ํผ์ํ์จ, WHIP, ํผ์ฅํ์จ, ์ผ์ง์จ, ๋ณผ๋ท๋ฅ
- ๊ฐ ํ์์ ๊ฒฐ๊ณผ๋ ํ์์ ํฌ์์ ์คํฏ์ ์กฐํฉํ ํ๋ฅ (์: ์ํ ํ๋ฅ = (ํ์จ + ํผ์ํ์จ) / 2)์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
- ๊ฒฝ๊ธฐ ์๋ฎฌ๋ ์ด์
์์ง:
- 9์ด๋ ์๋ ์งํ, ๊ณต/์ ์ ํ, ํ์ฐจ ๊ด๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
- ์ํ, ํ๋ฐ, ๋ณผ๋ท, ์์ ๋ฑ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅธ ์ฃผ์ ์ด๋ ๋ก์ง ๋ฐ ์ ์ ๊ณ์ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.
- 3์์ ๊ณต์ ๊ต๋, 9ํ๋ง ๋๋ด๊ธฐ ๋ฑ ์ค์ ๊ฒฝ๊ธฐ ์ข ๋ฃ ์กฐ๊ฑด์ ๋ชจ๋ ์ฒ๋ฆฌํฉ๋๋ค.
- GUI ์๊ฐํ ๋ฐ ๋ก๊ทธ:
- ์๊ฐํ: JavaFX๋ฅผ ํ์ฉํ์ฌ ์ ์ํ, ์ฃผ์ ์ํ(๋ฒ ์ด์ค ๋ค์ด์๋ชฌ๋), ์์ ์นด์ดํธ(๋นจ๊ฐ์ ์)๋ฅผ ์๊ฐ์ ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
- ๋ก๊ทธ ์ถ๋ ฅ: ์ด๋๋ณ ๊ฒฐ๊ณผ, ํ์๋ณ ์์ธ ๋ก๊ทธ, ํ๋ฐ/๋์ ๋ฑ ์ฃผ์ ์ด๋ฒคํธ๋ฅผ ํ ์คํธ๋ก ์ถ๋ ฅํฉ๋๋ค.
- ์งํ ๋ชจ๋: '์ผ๋ฐ ์งํ'(ํ์๋น 1์ด ์ง์ฐ)๊ณผ '๋น ๋ฅธ ์งํ'(์ฆ์ ์ข ๋ฃ) ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค.
- ๊ฐ๋ฐ ์ธ์ด: Java 17
- GUI: JavaFX (์คํ ์ JavaFX SDK ํ์)
- ๋น๋ ๋๊ตฌ: ์์
- ํ๋ก๊ทธ๋จ ์คํ (JavaFX ์ง์ ํ๊ฒฝ ํ์)
- ์์ ํ์ ํ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
- ์์ ํ ํ์ 9๋ช ์ ์ด๋ฆ์ ํ์๋๋ก ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ ฅํฉ๋๋ค.
- ์์ ํ ํฌ์ 4๋ช ์ ์ด๋ฆ์ ์์๋๋ก ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ ฅํฉ๋๋ค.
- ํํ์ ๋ํด์๋ 2~4๋ฒ ๊ณผ์ ์ ๋์ผํ๊ฒ ๋ฐ๋ณตํฉ๋๋ค.
- ์งํ ๋ฐฉ์ ๋ฒํผ์ ์ ํํฉ๋๋ค:
- ๋น ๋ฅธ ์งํ: ํด๋ฆญ ์ฆ์ 9์ด๋ ์๋ฎฌ๋ ์ด์ ์ด ์๋ฃ๋๋ฉฐ, ์ต์ข ๊ฒฐ๊ณผ์ ์ ์ฒด ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
- ์ผ๋ฐ ์งํ: ํด๋ฆญ ์ ๊ฐ ํ์๋น 1์ด์ ์ง์ฐ ์๊ฐ์ ๋๊ณ ๊ฒฝ๊ธฐ๊ฐ ์งํ๋ฉ๋๋ค. GUI๋ฅผ ํตํด ์ค์๊ฐ ๊ฒฝ๊ธฐ ์ํฉ(์์ ์นด์ดํธ, ์ฃผ์ ์ํ)์ ํ์ธํ ์ ์์ต๋๋ค.
๋ณธ ํ๋ก์ ํธ๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ญํ ๋ณ ๋ชจ๋์ ๋ถ๋ฆฌํ๊ณ ๋จ์ผ ์ฑ ์ ์์น์ ๋ฐ๋ฅด๋๋ก ๊ตฌ์ฑ๋์์ต๋๋ค.
- ๋๋ฉ์ธ ๋ชจ๋ธ (Data)
Player:Batter์Pitcher์ ๊ณตํต ๋ถ๋ชจ ์ถ์ ํด๋์ค.Batter: ํ์ ์ ๋ณด(ํ์จ, ์ถ๋ฃจ์จ, ์ฅํ์จ ๋ฑ)๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.Pitcher: ํฌ์ ์ ๋ณด(ํผ์ํ์จ, WHIP, ํผ์ฅํ์จ ๋ฑ)๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.Team: ํ์ ๋ผ์ธ์ (List<Batter>)๊ณผ ํฌ์ ์ค์ผ์ค(List<Pitcher>)์ ๊ด๋ฆฌํฉ๋๋ค.
- ๊ฒฝ๊ธฐ ์ํ ๋ฐ ๋ก์ง (Engine)
Game: ์ด๋, ์์ ์นด์ดํธ, ์ ์, ํ์ฌ ์ฃผ์ ์ํ(BaseState) ๋ฑ ์ ์ฒด ๊ฒฝ๊ธฐ์ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.BaseState: 1๋ฃจ~3๋ฃจ ์ฃผ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ํ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅธ ์ฃผ์ ์ง๋ฃจ ๋ฐ ๋์ ๊ณ์ฐ์ ๋ด๋นํฉ๋๋ค.OutcomeType (enum): ํ์ ๊ฒฐ๊ณผ(๋จํ, ํ๋ฐ, ์ผ์ง ๋ฑ)๋ฅผ ์ด๊ฑฐํ์ผ๋ก ์ ์ํฉ๋๋ค.AtBatOutcome:OutcomeType์ ํฌํจํ์ฌ ํ ํ์์ ์์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ ๋๋ค.
- GUI (View)
SimulatorGUI: ์๋ฎฌ๋ ์ดํฐ์ ์ ์ฒด GUI๋ฅผ ๊ตฌ์ฑํ๋ ์ง์ ์ ์ ๋๋ค.SimulatorEngineGUI:Game๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ค์ ๊ฒฝ๊ธฐ ์งํ ์ํฉ์ ์๊ฐํํ๋ฉฐ,LoggerGUI์ ์ํธ์์ฉํ๋ ์ ์ด์ ์ญํ ์ ํฉ๋๋ค.LoggerGUI: ํ์ ๊ฒฐ๊ณผ ๋ฐ ์ฃผ์ ์ด๋ฒคํธ๋ฅผ GUI์ ํ ์คํธ๋ก ์ถ๋ ฅํฉ๋๋ค.
- ์ด์ 1: 9ํ๋ง ๋๋ด๊ธฐ ์ํฉ์์ ํํ์ด ์ด๊ฒผ์์๋ 3์์๊น์ง ๊ฒฝ๊ธฐ๊ฐ ๊ณ์ ์งํ๋๋ ๋ฌธ์ .
- ํด๊ฒฐ:
simulateHalfInning()๋๋simulateGame()ํจ์ ๋ด์, 9ํ๋ง์ด๋ฉด์ ํํ์ด ์์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ธฐ๋ฅผ ์ฆ์ ์ข ๋ฃํ๋ ๋ถ๊ธฐ ์กฐ๊ฑด์ ์ถ๊ฐํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
- ํด๊ฒฐ:
- ์ด์ 2: ์๋ฎฌ๋ ์ด์
์ด ํ ๋ฒ์ ์ ๋ถ ์คํ๋์ด ์ฌ์ฉ์๊ฐ ๊ฒฝ๊ณผ๋ฅผ ๋ฐ๋ผ๊ฐ๊ธฐ ์ด๋ ต๊ณ ์ฌ๋ฏธ๊ฐ ๋ฐ๊ฐ๋๋ ๋ฌธ์ .
- ํด๊ฒฐ: '์ผ๋ฐ ์งํ' ๋ชจ๋๋ฅผ ์ถ๊ฐํ์ฌ,
simulateAtBat()ํจ์ ์คํ ์ฌ์ด์ 1์ด์ ์ง์ฐ ์๊ฐ(Thread.sleep)์ ๋ถ์ฌํจ์ผ๋ก์จ ์ฌ์ฉ์๊ฐ ๊ฐ ํ์์ ๊ฒฐ๊ณผ๋ฅผ ์ถฉ๋ถํ ํ์ธํ๊ณ ๋ฐ๋ผ๊ฐ ์ ์๋๋ก ๊ฐ์ ํ์ต๋๋ค.
- ํด๊ฒฐ: '์ผ๋ฐ ์งํ' ๋ชจ๋๋ฅผ ์ถ๊ฐํ์ฌ,
- ์ด์ 3:
SimulatorEngineGUI๊ฐGame,BaseState,LoggerGUI๋ฑ ๋ค์ ๊ฐ์ฒด๋ฅผ ๋ณต์กํ๊ฒ ์ฐธ์กฐํ์ฌ ์์กด์ฑ์ด ๋์์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์ด ๋ฌธ์ .- ํด๊ฒฐ: MVC ํจํด์ ์ผ๋ถ ๋์
ํ์ฌ,
SimulatorEngineGUI๋ฅผ ์ค๊ฐ ์ ์ด์(Controller) ์ญํ ๋ก ๋๊ณ , ๊ฐ ๊ตฌ์ฑ ์์๊ฐ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ํธ์์ฉํ๋๋ก ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ์ต๋๋ค.
- ํด๊ฒฐ: MVC ํจํด์ ์ผ๋ถ ๋์
ํ์ฌ,