注:本文內容已更新至ARTS-Share欄。
這周服務器主程安排給了我一個任務(其實是我在用Go做完了一些小demo后,向主程請示下一步的安排),讓我將他用Lua語言寫的球球大作戰的服務端代碼轉成Go語言形式。
於是,我開搞了!
此內容以上傳至github,感興趣的可以看一下github地址
框架主要分以下幾個部分
1,sever-client部分
因為要有主入口,所以要新增一個server文件,client文件用來測試服務器端。而服務器又分以下幾類:
- 與客戶端的連接
- 選擇進入的房間
- 進入房間后玩家數據的收發
- 戰斗中的數據變化
2,玩家和AI部分
球球大作戰中服務器端主要是與玩家和AI做交互。
玩家要將自己的數據傳遞給服務器端做記錄,並做好消息的分發,例如:
- 收到Move后跳轉到戰斗玩家中的移動邏輯;
- 收到Stop后跳轉到戰斗玩家的停止邏輯;
- 收到Spit后跳轉到戰斗玩家的吐孢子邏輯;
- 收到Split后跳轉到戰斗玩家的分裂邏輯;
當客戶端連接失敗后,將於服務器端斷開連接。
3,戰斗邏輯部分
戰斗邏輯主要是根據玩家傳遞過來的信息跳轉到相應的戰斗邏輯中
戰斗邏輯中分為:
- 玩家復活;
- 更新聚合后的信息;
- 同步小球的進入和離開視野的信息,更新位置;
- 玩家施放球后更新信息;
- 玩家移動;
- 吐孢子;
- 分裂;
- 更新球的移動
4,碰撞檢測部分
主要是用四叉樹算法進行檢測,這塊是個硬骨頭,還在啃...
5,外部工具部分
涉及算距離,長度,寬度,格式變換時,總不能在每個文件中寫同樣的函數吧。因此專門建立一個工具文件,其他文件要用這個文件里的某個工具時,導入即可,方便高效。
6,模塊支持部分
主要是在更新玩家視野這部分,需要先計算出玩家視野的中心點坐標,再計算玩家的視野范圍;
除此之外還有移動管理模塊,服務器端管理模塊等等。(這部分信息量較大,還在學習中)
7,小結
以上就是我看完第一遍游戲球球大作戰戰斗服務器端源碼后的小結,后續將會畫出戰斗服務器的邏輯流程圖,理清戰斗邏輯,嘗試自己使用Go語言完成。
另外,由於該游戲服務器端的網絡庫是由sniperHW自己開發的,因此我還得考慮如何用Go語言實現其網絡庫的功能。
