iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 12
1
自我挑戰組

卡牌連線遊戲開發經驗分享系列 第 12

#12 研究筆記:事件、佇列、信號 in Python

因為 python 不像 javascript, VB, C# 直接提供 event 的環境,使用上需要花一點時間做功課。

C# 的 EventHandler 有 object sender, EventArgs e 這兩個參數,所以在處理事件的時候能夠傳遞額外的參數。昨天在說明 Threading.Event 的時候,發現它跟我想的不太一樣,所以後續又再去找能夠傳遞參數的方式。

因為要實作玩家出牌、生物攻擊等相關的指令都會需要參數,所以 Threading.Event 提供的功能還沒辦法支撐開發的需要。另一部份是 Threading.Event 的概念比較接近 Signal ,使用上沒辦法像 addEventListener, EventHandler 那樣直觀。

event 可以一對多,但沒有參數可傳
queue 是一對一,可以傳參數

所以後面的尋找方向偏 MessageQueue (MQ), socket ,後面覺得用訊息佇列應該會比較好實作。玩家和主控端傳訊息的時候可以採用 MQ

另外還有一個新的函式庫 asyncio ,裡面有提供跑事件迴圈的方法。後面會試看看能不能跟使用者UI 操作放在一起?

目前的架構圖
以上是玩家和主控端的訊息示意圖

start 是主控端告訴玩家可以行動的事件
action cmd 是玩家行動,暫時先不實作。cmd 封裝指令
update cmd 是主控端透過廣播更新遊戲狀態。cmd 封裝指令
end 是玩家發送回合結束事件通知

之前的開發的研究工作不在這邊,所以對我來說算是要摸索的領域
目前大約是一邊研究一邊實作一邊構思的部份,先這樣


上一篇
#11 用事件模式實作回合制-1
下一篇
#13 研究筆記:事件迴圈的世界觀
系列文
卡牌連線遊戲開發經驗分享30

1 則留言

0
來杯拿鐵
iT邦新手 3 級 ‧ 2019-09-28 00:02:06

示意圖簡單明瞭

謝謝:)
後來發現實作有點複雜,還在多方尋找容易表達的實作

我要留言

立即登入留言