實作前我們需要先稍微分析一下各種機制之間的差異。了解機制本質上的差異,才能確定實作脈絡,進而寫出作品。
前一篇 #ref-1 我們將觸發分成四類:一次性/時效性/常駐型觸發/常駐型BUFF
註:在還沒開發實作前,這種分類通常只是方便自己簡化系統,等到實作時才會發現細節跟自己想的不一樣。缺乏專案開發經驗時,算是難免的過程,會繞很多次彎,這只能透過不斷開發累積經驗來克服。
前面研究事件、觸發變成有點慣性思考,一開始覺得這要掛事件監聽器,等待「生物進場」事件觸發。但後來才發現不對,那這樣什麼時候掛上監聽器?如果要掛事件監聽的話,抽到卡片的時候就要自動掛上了。但為了觸發而觸發,這樣子不是乾脆用法術瞬發的效果就好了?想到這裡突然就通了,原來把「戰吼」當做附贈的法術卡就好了,然後召喚生物本身也可以視為一種法術效果。那這樣,把法術、召喚生物通通當成效果就好啦!
二選一因為性質跟戰吼十分接近,所以就放在一起了。因為戰吼的效果十分多樣,後面實作效果的時候再一一討論好了。
卡關最兇的是衝鋒,一開始也覺得這要掛事件監聽,等待「生物進場」事件觸發。但衝鋒效果一樣也是進場觸發後就沒效果了,掛監聽器似乎不是好辦法。後來苦思的結果,想出「行動點」的概念:召喚生物時,按照設定初始化「行動點」,每回合配發固定行動點。
初始配置/每回合配給行動點:
由於衝刺是在後期新增的機制,限制生物攻擊英雄。需要再加入限制機制,後面再一併談吧。
這部份就是爐石的重頭戲了,前面研究的事件監聽器,終於在這邊派上用場。監聽對象可以包含友方、敵方、全場。由於觸發的細項很雜,所以先把大分類抓出來,後面小分類再一個一個處理了。
比較需要注意的是,一般掛事件監聽器,通常是掛在單一物件身上。但遇到那種不限特定對象的監聽,設計就會變麻煩。例如:北郡教士全場只要有任何一個手下治療就可以抽牌。但全場手下都要掛一個治療事件監聽,這樣的解法似乎不太漂亮。所以用類似群組監聽器的概念或許會漂亮一些,在遊戲送出事件時,群組監聽器會優先處理,然後再轉手給下面的個別監聽器。群體監聽器在祕密的應用是最廣的,我相信這樣可以有效簡化遊戲的事件監聽。
然後要注意的是,有些事件不會只觸發一個監聽器,這時候可以用「信號」做到一對多的部份。回合開始蠻適合作成信號的。
這被我歸類在比較特殊的類別,它比較像是「阻斷器」。它會限制一些生物行為表現的機制,攻擊潛行生物是不合法的、有嘲諷怪攻擊後排是不合法的、無法攻擊/凍結狀態下不能攻擊。判斷合法不合法絕對在遊戲是最優先執行的,因為那是卡牌規則的展現。
它會在玩家行動回合 event loop 的時候運作,把不可以做的動作擋下來。同時在主控端也會優先檢查是否有非法的動作。
這類通常就是狀態,新增額外的變數去管理就可以了。
這類觸發隨時根據場面狀態調整。攻擊力等同生命需要監聽補血/傷害事件,降低消耗比較經典的範例是巨人系列,需要監聽遊戲內的場面狀態改變事件,像是出牌、召喚、英雄生命改變…等。
以下是遊戲全部在運作的效果,大致上就是改變狀態的操作。他實作難度低,只是操作品項繁雜,實作時候還是要多費點心思測試。
本篇內容量比較多,多花了很多時間思考實作重點。
然後目前已經寫了30篇了,只是有些被我歸類到番外篇、參考資料。我希望寫到 #30 以鐵人賽心得作為正式收尾。
下篇應該會用虛擬碼,把這篇講的遊戲機制實作出來。相關架構還請參考之前寫的DEMO
感謝大家的支持
給有關注這系列的朋友們:
抱歉鐵人賽之後處於修養+趕其他案子的狀態,預計月底把案子處理完之後回來把系列文的實作弄出來。有興趣的朋友們再繼續關注囉
爐石 爐起來!! 衝鋒!!!
抱歉,最近富奸症狀又變嚴重了...
下一部分是先弄好連線部分,也希望有追這系列的讀者繼續支持歐!