iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
自我挑戰組

卡牌遊戲開發日記v2020系列 第 16

Day16 構想: socket send/recv

  • 分享至 

  • xImage
  •  

紀錄一些查資料過程中讓我蠻困惑的事情,同時也在思考關於遊戲流程的進行用什麼方式會比較好?

一開始我的想法是類似sever-client之間互相呼叫的感覺,後來發現不太對,server不會主動發送訊息給client。所以「系統通知玩家回合開始」這件事情在sever-client不可能發生,server一直都是被動等待client呼叫才回應。

web 為了解決這樣的問題,出現了以下技術:

  • comet,長輪詢。本質上還是client送出polling,但server延長回應時間,降低系統負擔
  • websocket,讓server也具備主動推送資訊的能力

但是我目前的語言方案還是python,就算有web可用方案,在web重寫一次還是要花時間orz 可能等之後有機會,會重新在web上面再實作一次遊戲吧。

以目前來說,用python本身的socket功能,實作遊戲資料傳輸會是比較實際的做法。

系統發出的事件:
回合開始
更新資料,[場面資料]
廣播訊息,[封裝字串]
玩家抽牌,[卡牌資料]
回合結束

用戶端送出的事件:
玩家行動,組合ID,陣法ID
//TODO 未來會有職業能力行動階段,可選性。
玩家棄牌,組合ID

以我自己socket的開發經驗比較不足,所以想這部份真的沒什麼頭緒,可能還是先試著寫看看。看能不能讓這過程串起來?

另外因為系統、玩家兩邊都蠻依賴對方送來的資料才能往下進行。例如在「回合開始」狀態下,系統只會接收「玩家行動」的事件,然後系統送出相關回應之後,下一個需要等待的是「玩家棄牌」。可以動態增加移除事件監聽的方式來管理遊戲進程。

大概是降,這部份算我比較弱的一環,先想清楚再寫也不遲。


上一篇
Day15 進度紀錄: 卡在事件觸發的架構
下一篇
Day17 從零開始弄socket傳輸
系列文
卡牌遊戲開發日記v202030
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言