我正在写一个纸牌游戏。玩家打牌。每张牌都有一个动作,根据玩法花费的法力值而变化。我试图使用Sails(node.js)或Rails来做到这一点。示例卡片:
卡1
对目标造成2 *法力伤害
卡2
治疗3 *法力对目标的伤害
我遇到的问题是随机牌可以召唤生物等。
用2 * Mana HP召唤怪物。
当模型的每个实例有不同的操作时,如何为Card
模型建立数据库?
我的第一个(可怕的)想法:做一个"动作"在DB(sails.js)中存储模型方法的列:
// Card1:
console.log(card.method);
// prints:
"function(m, target){ target.hp= target.hp - m*2}"
// Card2:
console.log(card.method);
// prints:
"function(m, target){ target.hp= target.hp + m*3}"
这似乎是一个可怕的想法,即使我的数据库有望在外部无法使用。什么是更好的方式?
答案 0 :(得分:2)
这听起来像是Single Table Inheritance(STI)的情况。您可以拥有单cards
表,除了type
之外还有id
(字符串)列,该列将自动填写类名称具体的例子。
然后,您将创建一个层次结构Card
类,每个类都有自己的特定行为,但仍然共享公共代码并仍然存储在单个表中。这实质上就是STI的工作原理。
例如(假设卡片具有type
以及例如strength
属性):
class Card < ActiveRecord::Base
# some common methods for all cards
end
class HarmingCard < Card
def do_action
puts "harm #{strengh} x mana damage to target"
end
end
class HealingCard < Card
def do_action
puts "heal #{strengh} x mana damage"
end
end
class SummoningCard < Card
def do_action
puts "summon a monster with #{strengh} x mana"
end
end