《炉石传说》架构设计赏析(3):Gameplay初探
經過前面的分析,我們已經找到了兩個關鍵的類Gameplay和GameState(當然還有我最感興趣的Spell和SpellController,這兩個還要在后面分析)。
首先我們看一下Gameplay這個類的Awake方法,它完成的主要工作是:
1.調用“GameState.Initialize()”創(chuàng)建一個新的GameState實例;
2.注冊CreateGame事件:在Gameplay.OnCreateGame()中響應,主要是
?
- 初始化卡背;(本地玩家和遠程玩家的卡背ID都通過Player類來讀取);
- 啟動一個Coroutine:NotifyPlayersOfBoardLoad,它做的主要工作是
- 等待BoardStandardGame對象加載完成;
- 然后調用所有Player的OnBoardLoaded(),它的主要工作是初始化法力水晶相關的管理邏輯;
3.使用AssetLoader加載AttackSpellController、SecretSpellController、TurnStartManager等;
這些類看上去都很重要,我們后續(xù)分析游戲邏輯時肯定用得到。
接下來我們要看一下Gameplay.Start()方法,它主要是注冊了一些自己關心的網絡消息,然后調用
?
- Network.StartCountdown()——發(fā)送網絡消息“BeginPlaying”;
- Network.GetGameState()——發(fā)送網絡消息“GetGameState”;
我們在看一下Gameplay.Update(),里面似乎正常情況只是調用GameState.Update()。
OK,以上就是從MonoBehavior繼承來的三個被自動調用的函數(shù)。對于游戲邏輯來說,還是沒有什么頭緒。
再往下分析,遇到的一個最大的困難是很多操作應該是通過網絡交互完成的,例如【認輸】操作,分析它是從GameMenu.ConcedeButtonPressed()開始的,一直調用到ConnectAPI.Concede()向服務器發(fā)了一個GiveUp消息,但是無法確定它對應的服務器返回消息是什么。
接下來我們先分析一下游戲的回合的流轉,還是先看一下相關的類圖:
?
回合結束是由玩家點擊右側的【End Trun】操作來觸發(fā)的,其對應的代碼為:InputManager.DoEndTurnButton(),這個函數(shù)的邏輯有些費解,目前只能是猜測如下:
?
- 首先判斷當前是否允許訪問GameState的OptionsPacket,以及EndTurnButton是否可以操作;
- 然后根據(jù)GameState.GetResponseMode()來分兩種情況處理:
- GameState.ResponseMode.OPTION——賣二手游戲初步猜測為游戲回合中的正常操作:
- 從GameState中取出所有的Network.Options,然后遍歷,找到“OptionType.END_TURN”或者OptionType.PASS的對象,然后調用GameState.SetSelectedOption(i);GameState.SendOption();
- GameState.ResponseMode.CHOICE——初步猜測為游戲回合開始時,選擇初始手牌的相關操作;
服務器端的行為就比較難以猜測了,只能等到客戶端行為分析比較完整時再說了。
服務器端相關的返回大致是這樣的,在Gameplay的Start中有這樣一句:
?
復制代碼
想象中客戶端使用Gameplay.OnAllOptions()處理網絡層接收到的所有玩家操作,此函數(shù)主要是將Network.GetOptions()取出的數(shù)據(jù)發(fā)送到GameState.OnAllOptions()去處理,后者主要會觸發(fā)事件GameState.FireOptionsReceivedEvent()。
我們通過對應的GameState.RegisterOptionsReceivedListener()成員函數(shù),可以分析一下哪些對象會響應此事件。找到EndTurnButton.OnOptionsReceived()。
這階段的分析難度越來越大了,這次分析算是有小小的收獲,但是整個回合流轉的流程還沒有清晰。總結如下:
?
- 玩家的操作是在InputManager中處理的,重點的成員函數(shù)包括DoNetworkResponse()、DoEndTurnButton();
- 玩家的操作和網絡發(fā)送來的操作都保存在GameState.m_options中;
- 其中有另外一個Entity類體系也需要進一步分析。
總結
以上是生活随笔為你收集整理的《炉石传说》架构设计赏析(3):Gameplay初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 回顾游戏中的设计模式:策略模式vs抽象工
- 下一篇: 《炉石传说》架构设计赏析(2):Scen