iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0

實作規則引擎,重回去年的惡夢-事件迴圈

進度:

  • PlayerState 和 PlayerAgent 合併為 Player
  • 構思仲裁者 GameArbiter 的實作
  • 構思事件模式下的程式要怎麼寫?預計使用 Async

合併物件,因為有 @property 的關係,能夠很有效的遮蔽內部的變數,所以算是達到封裝的目的,然後也沒必要把簡單的物件拆分太多出來

仲裁者,這個物件負責處理 [pid, seleC, zid] 到 [objID, efctID, val] 這段過程。
它會根據遊戲場面上的狀態,計算出最後的結果

取用資料
O上家,P玩家,Q下家
P.isDizzy 合法性:判斷可否行動
O.hasCover, cover 有效性:蓋牌
Q.hasShell 有效性:剋陣
O.lastDeal,val 調整:幻化
O.nHand 調整:五流歸一
O.hasShell,P.zid 修正:防護罩
O.lastDeal,P.zid 修正:五行生剋
O.HP, P.HP 判斷遊戲是否繼續?

一樣去年也有寫事件模式,但感覺好像沒有寫到點,總覺得有點缺憾,跟一般在 js 用事件的感覺不一樣。然後也思考要怎麼調整現在的程式寫法

講到事件、callback、非同步、promise、aysnc 這些東西的時候,覺得腦袋常常處於冒煙的狀態。內心OS是如果語言本身就提供不錯的機制讓我寫就好了,但偏偏我在用的是 python 不是 javascript。

延續傳遞風格(Continuation-passing style, CPS) 使用事件的程式常常會變成這種 CPS 風格。我目前算是卡在這裡

python 現在有 aysnc/await 了,考慮在今年導入這種模式,希望能夠避開 callback ,CPS 帶給我的噩夢。

以上,謝謝大家縮看,繼續拚實作


上一篇
Day13 定義資料傳遞格式 (封包格式)
下一篇
Day15 進度紀錄: 卡在事件觸發的架構
系列文
卡牌遊戲開發日記v202030
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言