我最近开始着手制作一个用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
它真的取决于对象如何获得其功能。这听起来像你有通用对象,并且你正在使用数据库来定义功能。我猜你希望能够创建卡片而无需添加代码(除非需要新的方法),这意味着使用泛型,因此接口可以为此工作。这也意味着一个非常复杂的数据模型来支持该功能。 –