๊ธฐ์กด ์ซ์์ผ๊ตฌ์ ํ์๊ฐ์
,UI ์ฐ๊ฒฐ ๋ฑ ์
๋ฐ์ดํธ๋ ๊ฒ์ ๊ตฌ์กฐ์์๋ ํ ๋ฒ ๋ฆฌํฉํ ๋ง์ ๊ฑฐ์นGameMode๊ฐ ์ฌ์ ํ ๋๋ฌด ๋ง์ ์ฑ
์์ ๋์์ ๋งก๊ณ ์์๋ค.
ํ๋์ ํด๋์ค ์์์ ๋ค์ ์ญํ ์ด ํ๊บผ๋ฒ์ ์ฒ๋ฆฌ๋๊ณ ์์๋ค.
์ด ๊ตฌ์กฐ๋ ์ฒ์์๋ ๋น ๋ฅด๊ฒ ๊ธฐ๋ฅ์ ๋ถ์ด๊ธฐ์๋ ํธํ์ง๋ง, ๊ธฐ๋ฅ์ด ๋์ด๋ ์๋ก ๋ฌธ์ ๊ฐ ์ปค์ก๋ค.
GameMode ์ฝ๋๊ฐ ๊ณ์ ๋น๋ํด์ง์ฆ, ํ์ฌ ๊ตฌ์กฐ๋ ์๋์ ํ์ง๋ง ์ ์ง๋ณด์์ฑ์ด ๋จ์ด์ง๋ ์ํ์๋ค.
์ด๋ฒ ๋ฆฌํฉํ ๋ง์ ํต์ฌ ๋ถ์ ํฌ์ธํธ๋
โ๊ธฐ๋ฅ๋ณ๋ก ๋ก์ง์ด ๋ค๋ฅด๋คโ๊ฐ ์๋๋ผ
โ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ฑ
์๊ณผ ๊ณ์ฐ/์ถ๋ ฅ์ ๋ด๋นํ๋ ์ฑ
์์ด ์์ฌ ์๋คโ๋ ์ ์ด์๋ค.
์๋ฅผ ๋ค์ด,
์ธ๋ฐ, ์ด๊ฒ๋ค์ด ๋ชจ๋ GameMode ์์ ๋ค์ด๊ฐ ์์ผ๋ฉด
ํด๋์ค ํ๋๊ฐ ์ค์ผ์คํธ๋ ์ดํฐ + ๋ก์ง ๋ด๋น์ + ์ ์ฅ ์ฒ๋ฆฌ์ + ๋ฉ์์ง ์ก์ ์๊น์ง ๊ฒธํ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ GameMode๋ ์๋ฒ ๊ถํ ์๋์ ์ ์ฒด ํ๋ฆ๋ง ์กฐ์จํด์ผ ํ๋๋ฐ,
์ค์ ๋ก๋ ๋ด๋ถ ๊ตฌํ๊น์ง ์ง์ ๋ค๊ณ ์๋ God Class์ ๊ฐ๊น์ด ๊ตฌ์กฐ๊ฐ ๋์ด ์์๋ค.
๊ธฐ์กด ๊ตฌ์กฐ๋ ์๋์ฒ๋ผ ์ ๋ฆฌํ ์ ์์๋ค.
GameMode
โโ ํ์๊ฐ์
์ฒ๋ฆฌ
โโ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
โโ ์ฑํ
์ฒ๋ฆฌ
โโ ํด ์์
โโ ํด ์ ํ
โโ ์๊ฐ ์ด๊ณผ ์ฒ๋ฆฌ
โโ ์ซ์ ํ์
โโ ์นํจ/๋ฌด์น๋ถ ํ๋จ
โโ ์ ์ ๋ฐ์
โโ ๊ฒ์ ๋ฆฌ์
์ด ๊ตฌ์กฐ์์๋ ์ด๋ค ๋ฒ๊ทธ๊ฐ ๋ฐ์ํด๋ ๊ฒฐ๊ตญ GameMode๋ฅผ ์ด์ด๋ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ์ฑํ
๋ฉ์์ง ์ถ๋ ฅ ํ์์ ๋ฐ๊พธ๊ณ ์ถ์ด๋
GameMode ๋ด๋ถ๋ฅผ ์์ ํด์ผ ํ๊ณ ,
ํด ๋ก์ง์ ๋ฐ๊พธ๊ณ ์ถ์ด๋
์นํจ ์ฒ๋ฆฌ, ๋ฆฌ์
์ฒ๋ฆฌ์ ๋ถ์ด ์์ด์ ์ํฅ ๋ฒ์๊ฐ ์ปค์ก๋ค.
์ฆ, ํ ๊ธฐ๋ฅ์ ์์ ์ด ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํ๊ธ๋ ๊ฐ๋ฅ์ฑ์ด ๋์๋ค.
๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋
๋ฅผ ํ ๋ฒ์ ๋ถ๋ฆฌํด์ ๋ณด๊ธฐ ์ด๋ ค์ ๋ค.
ํนํ ๋ฉํฐํ๋ ์ด์์๋ ์๋ฒ ๊ธฐ์ค ํ๋ฆ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์
์ฑ
์์ด ์์ฌ ์์ผ๋ฉด ๋ฒ๊ทธ ์์ธ ์ถ์ ์ด ๋ ํ๋ค์ด์ง๋ค.
์ด๋ฒ ๋ฆฌํฉํ ๋ง์ ๋ชฉํ๋ ๋จ์ํ ํ์ผ์ ๋๋๋ ๊ฒ์ด ์๋๋ผ
์ญํ ๊ธฐ์ค์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ค์ ์ค๊ณํ๋ ๊ฒ์ด์๋ค.
์ต์ข ๋ฐฉํฅ์ ์๋์ฒ๋ผ ์ก์๋ค.
GameModeMatchFlowManagerChatManagerRecordManager์ฆ, GameMode๋ ๋ ์ด์ ๋ชจ๋ ๊ฑธ ์ง์ ํ์ง ์๊ณ
๊ฐ ์ฑ
์์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ๊ณ ํธ์ถํ๋ ๊ตฌ์กฐ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ๋ชฉํ์๋ค.
๊ฐ์ฅ ๋จผ์ GameMode์ ์ญํ ์ ์ค์๋ค.
์ด์ GameMode๋ ๋ค์๋ง ๋ด๋นํ๋ค.
์ฆ, ์ง์ ํด์ ๋๋ฆฌ๊ฑฐ๋, ์ง์ ์ฑํ ์ ๋ฟ๋ฆฌ๊ฑฐ๋, ์ง์ ์ ์ ์ ๊ฐฑ์ ํ์ง ์๋๋ค.
๊ตฌ์กฐ์ ์ผ๋ก ๋ณด๋ฉด ์ด๋ ๊ฒ ๋ฐ๋ ์ ์ด๋ค.
Before
GameMode = ์์ฒญ ์ฒ๋ฆฌ + ๊ฒ์ ํ๋ฆ + ์ฑํ
+ ์ ์ + ๋ฆฌ์
After
GameMode = ์์ฒญ ์ง์
+ ๋งค๋์ ์ฐ๊ฒฐ
๊ฐ์ฅ ํฐ ์ฑ ์ ๋ฉ์ด๋ฆฌ๋ ๊ฒฝ๊ธฐ ์งํ ํ๋ฆ์ด์๋ค.
์ด๋ฅผ MatchFlowManager๋ก ๋ถ๋ฆฌํ๋ค.
์ด ๋งค๋์ ๋ ์๋ ์ญํ ์ ๋งก๋๋ค.
์ฆ, ๊ฒ์ ํ ํ์ด ์ด๋ป๊ฒ ํ๋ฌ๊ฐ๋์ง๋ฅผ ์ ๋ดํ๋ ๊ฐ์ฒด๊ฐ ๋์๋ค.
์ฑํ ์ถ๋ ฅ์ ๊ฒ์ ๊ท์น๊ณผ๋ ๋ณ๊ฐ ์ฑ๊ฒฉ์ด ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ฆฌํ๋ค.
์ด ๋งค๋์ ๋ ๋ค์์ ๋ด๋นํ๋ค.
์๋ฅผ ๋ค์ด,
PlayerName: Hello
๊ฐ์ ์ผ๋ฐ ์ฑํ
ํฌ๋งท๋ ์ด์ ChatManager์์ ์ฒ๋ฆฌํ๋ค.
์น/ํจ/๋ฌด ๊ธฐ๋ก ๋ฐ์๋ ๋ณ๋ ์ฑ ์์ผ๋ก ๋ถ๋ฆฌํ๋ค.
์ด ๋งค๋์ ๋
์ ๋ด๋นํ๋ค.
์ด๋ ๊ฒ ๋ถ๋ฆฌํจ์ผ๋ก์จ,
๊ฒฝ๊ธฐ ์ข
๋ฃ ํ๋จ๊ณผ ์ ์ ์ ์ฅ ๋ก์ง์ด ๋ถ๋ฆฌ๋์๋ค.
์ฆ,
MatchFlowManagerRecordManager๊ฐ ๋ด๋นํ๊ฒ ๋์๋ค.
๋งค๋์ ๊ฐ ์ง์ ๊ฒฐํฉ์ ์ค์ด๊ธฐ ์ํด delegate๋ฅผ ์ฌ์ฉํ๋ค.
MatchFlowManager๋ ๊ฒฝ๊ธฐ ํ๋ฆ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ณ ,
ChatManager๊ฐ ์ด๋ฅผ ๊ตฌ๋
ํ๋๋ก ๊ตฌ์ฑํ๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ด๋ค.
MatchFlowManager
โโ OnTurnStarted
โโ OnTurnTimedOut
โโ OnMatchEnded
ChatManager
โโ ํด ์์ ๋ฉ์์ง ์ถ๋ ฅ
โโ ์๊ฐ ์ด๊ณผ ๋ฉ์์ง ์ถ๋ ฅ
โโ ๊ฒฝ๊ธฐ ์ข
๋ฃ ๋ฉ์์ง ์ถ๋ ฅ
์ด ๊ตฌ์กฐ์ ์ฅ์ ์
MatchFlowManager๊ฐ ์ฑํ
์ถ๋ ฅ ๋ฐฉ์์ ์ ํ์๊ฐ ์๋ค๋ ์ ์ด๋ค.
์ฆ, โํด์ด ์์๋์๋คโ๋ผ๋ ์ฌ์ค๋ง ์๋ฆฌ๊ณ ,
๊ทธ๊ฑธ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง๋ ChatManager๊ฐ ๋งก๋๋ค.
+----------------------+
| ABACGameModeBase |
+----------------------+
| - AllPlayerControllers
| - SecretNumberString
| - TurnTimerHandle
| - ResultResetTimerHandle
+----------------------+
| + HandleRegisterRequest()
| + HandleLoginRequest()
| + HandleGuessRequest()
| + HandlePlainChatMessage()
| + BroadcastChatToAll()
| + BroadcastSystemMessageToAll()
| + StartTurn()
| + StartTurnByIndex()
| + AdvanceTurn()
| + HandleTurnTimeout()
| + JudgeGame()
| + ResetGame()
| + UpdateUserRecordOnWin()
| + UpdateUserRecordOnLose()
| + UpdateUserRecordOnDraw()
+----------------------+
๋ฌธ์ ๋ ํ๋์ ํด๋์ค์ ๋๋ฌด ๋ง์ ๊ธฐ๋ฅ์ด ์์ง๋์ด ์๋ค๋ ์ ์ด์๋ค.
+----------------------+
| ABACGameModeBase |
+----------------------+
| + BeginPlay()
| + OnPostLogin()
| + HandleRegisterRequest()
| + HandleLoginRequest()
| + HandleGuessRequest()
| + HandlePlainChatMessage()
| + BindManagerDelegates()
+----------------------+
|
v
+----------------------+ +----------------------+ +----------------------+
| UBACMatchFlowManager | --> | UBACChatManager | | UBACRecordManager |
+----------------------+ +----------------------+ +----------------------+
| ํด ์งํ | | ์ฑํ
์ถ๋ ฅ | | ์ ์ ๋ฐ์ |
| ์๊ฐ ์ ํ | | ์์คํ
๋ฉ์์ง | | ์น/ํจ/๋ฌด ์ ์ฅ |
| ์
๋ ฅ ํ์ ํ๋ฆ | | ๋ธ๋ก๋์บ์คํธ | | PlayerState ๊ฐฑ์ |
| ์นํจ/๋ฌด์น๋ถ ์ฒ๋ฆฌ | | ์๋ด ๋ฉ์์ง | | AccountService ์ฐ๋ |
| ๋ฆฌ์
| | delegate ์์ | | |
+----------------------+ +----------------------+ +----------------------+
Client UI
-> PlayerController
-> GameMode.HandlePlainChatMessage()
-> ChatManager.HandlePlainChatMessage()
-> ChatManager.BroadcastChatToAll()
-> ๊ฐ ClientRPC
-> ChatPanel ScrollBox ์ถ๋ ฅ
Client UI
-> PlayerController
-> GameMode.HandleGuessRequest()
-> MatchFlowManager.SubmitGuess()
-> ๋ก๊ทธ์ธ ์ฌ๋ถ ๊ฒ์ฌ
-> ํ์ฌ ํด ์ฌ๋ถ ๊ฒ์ฌ
-> MatchService.ValidateGuess()
-> MatchService.JudgeGuess()
-> ๊ฒฐ๊ณผ ์ฑํ
์ถ๋ ฅ
-> ์น๋ฆฌ / ๋ฌด์น๋ถ / ๋ค์ ํด ํ๋จ
MatchFlowManager
-> ์น๋ฆฌ ๋๋ ๋ฌด์น๋ถ ํ๋จ
-> RecordManager ์ ์ ๋ฐ์
-> OnMatchEnded Broadcast
-> ChatManager ์ข
๋ฃ ๋ฉ์์ง ์ถ๋ ฅ
-> ๊ฒฐ๊ณผ ํจ๋ ๊ฐฑ์
-> ์ผ์ ์๊ฐ ํ ResetRound()
์ด์ ์ฑํ
์์ ์ ChatManager,
ํด ๋ก์ง ์์ ์ MatchFlowManager,
์ ์ ์์ ์ RecordManager ์ค์ฌ์ผ๋ก ๋ณด๋ฉด ๋๋ค.
์ฆ, ์์ ๋ฒ์๊ฐ ๋ช ํํด์ก๋ค.
๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋
ChatManagerMatchFlowManagerRecordManager์ฒ๋ผ ์์ธ ์ถ์ ๋ฒ์๋ฅผ ๋น ๋ฅด๊ฒ ์ขํ ์ ์๋ค.
์ด ๊ตฌ์กฐ์์๋ ์์ผ๋ก๋ ๊ธฐ๋ฅ์ ๋ ๋ถ์ด๊ธฐ ์ฝ๋ค.
์๋ฅผ ๋ค์ด,
PlayerRegistryManagerAuthCoordinatorResultPanelManagerRoomManager๊ฐ์ ์ถ๊ฐ ๋ถ๋ฆฌ๋ ์์ฐ์ค๋ฝ๊ฒ ๊ฐ๋ฅํ๋ค.
์ฆ, ์ด๋ฒ ๋ฆฌํฉํ ๋ง์ ๋จ์ํ ์ฝ๋ ์ ๋ฆฌ๊ฐ ์๋๋ผ
๋ค์ ๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ์ํ ๊ตฌ์กฐ์ ๊ธฐ๋ฐ ๋ง๋ จ์ด๋ผ๋ ์๋ฏธ๊ฐ ์๋ค.
์ด๋ฒ ์์
์ ๋จ์ํ GameMode ์ฝ๋๋ฅผ ๋๋ ๊ฒ์ด ์๋๋ผ
์๋ฒ ์ค์ฌ ๋ฉํฐํ๋ ์ด ๊ตฌ์กฐ์์ ์ฑ
์์ ์ด๋์ ๋ฌ์ผ ํ๋์ง ๋ค์ ์ ๋ฆฌํ ์์
์ด์๋ค.
๊ธฐ์กด์๋ ์๋ ์์ฒด๋ ํ์ง๋ง,
๊ฒ์ ํ๋ฆ๊ณผ ์ฑํ
, ์ ์ , ๋ฆฌ์
์ด ํ ํด๋์ค์ ๋ชฐ๋ ค ์์ด์
๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๋ถ์์ ํด์ง ๊ตฌ์กฐ์๋ค.
์ด๋ฒ ๋ฆฌํฉํ ๋ง์ ํตํด
GameMode๋ ์กฐ๋ฆฝ์MatchFlowManager๋ ๊ฒฝ๊ธฐ ํ๋ฆ ๋ด๋นChatManager๋ ์ถ๋ ฅ ๋ด๋นRecordManager๋ ๊ฒฐ๊ณผ ์ ์ฅ ๋ด๋น์ผ๋ก ์ญํ ์ด ๋ช
ํํด์ก๊ณ ,
์ดํ ๋ก๊ทธ์ธ ๊ตฌ์กฐ ๋ถ๋ฆฌ, ํ๋ ์ด์ด ๋ฑ๋ก ๊ด๋ฆฌ, ๋ฃธ ๋จ์ ํ์ฅ๊น์ง ์ด์ด๊ฐ ์ ์๋ ๊ธฐ๋ฐ์ ๋ง๋ค์๋ค.
- ์ซ์์ผ๊ตฌ ๊ฒ์ ๋ฆฌํฉํ ๋ง์ ํต์ฌ์ ๋จ์ํ ํ์ผ ๋ถ๋ฆฌ๊ฐ ์๋๋ผ
GameMode์ ๋ชฐ๋ ค ์๋ ๊ฒ์ ํ๋ฆ / ์ฑํ / ์ ์ / ๋ฆฌ์ ์ฑ ์์ ์ญํ ๋ณ ๋งค๋์ ๋ก ๋ถ๋ฆฌํจ์ผ๋ก์จ ๊ธฐ๋ฅ ์์ ๋ฒ์์ ๋๋ฒ๊น ํฌ์ธํธ๊ฐ ๋ถ๋ช ํด์ ธ ์ดํ ํ์ฅ๊ณผ ์ ์ง๋ณด์๊ฐ ํจ์ฌ ์ฌ์ด ํํ๋ก ์ ๋ฆฌํ ์ ์๊ฒ ๋์๋ค.