我最近開始着手製作一個用C#製作「Magic:The Gathering」風格的紙牌遊戲的側邊項目,只是爲了我作爲程序員的個人發展。如何在數據庫中保存不同的方法參數?
一張卡片既可以是「怪物」也可以是「咒語」,並且我想在特定場景發生時觸發某些事件(例如,怪物在受到打擊時會恢復其他友方怪物;或者法術當一個敵人怪物被放在板上時造成傷害)。
目前我正在將所有卡片存儲在RDBMS中,其中我有像「Monster」和「MonsterTrigger」這樣的表格。後者擁有一個MonsterId,TriggerType和MethodName。當怪物被加載時,我檢查它是否有任何觸發器效果,並將相應的EventHandler關聯到它,然後通過Reflection調用MethodName列中指定的方法。
我的問題是,我應該如何將方法參數保存在數據庫中? (例如DestroyAllMonsters() vs DrawCards(numOfCards) vs Heal(monsterId,hp))。方法可以具有不同數量的參數,不同的數據類型等。我最初的想法是將參數保存爲以逗號分隔的或沿着這些線的東西,但這似乎不是好的做法。 我的另一個想法是切換到NoSQL DB,但如果我可以幫助的話,我真的很想把這個項目的所有內容都放在RDBMS上。
我非常想聽聽你的建議。 在此先感謝!
你好,查爾斯,謝謝你對DB結構的回答。這非常有幫助!至於代碼,我使用的是對象繼承 - 我有一個Monster類和一個Spell類,它們都實現了Card接口。你建議我應該採用不同的方式嗎?我願意接受創意,這主要是對我自己的練習 – user104
它真的取決於對象如何獲得其功能。這聽起來像你有通用對象,並且你正在使用數據庫來定義功能。我猜你希望能夠創建卡片而無需添加代碼(除非需要新的方法),這意味着使用泛型,因此接口可以爲此工作。這也意味着一個非常複雜的數據模型來支持該功能。 –