【发布时间】:2017-09-17 22:03:26
【问题描述】:
“所有者”可能不是正确的术语,但我不知道它是什么,所以它使搜索变得非常困难。
我在做一个纸牌游戏,每个玩家可以多手牌。
我有一个“Player”、“Hand”和“Card”类。
player1 = Player.new
hand1 = Hand.new # => A new hand of two random cards
player1.hands.push(hand1)
#Now player1 has one hand with two cards in it.
我可以在 hand1 上调用一个属性或方法来引用它的“所有者”player1?
我期待类似的东西
hand1.owner
=> #<Player:0x007fb6ae05b448
# @behavior=:human,
# @hands=[#<Hand:0x007fb6ad8653b0 @cards=[{:A,:spades},{:Q,:hearts}]>],
# @money=800,
# @name="Dougie Jones">
【问题讨论】:
-
我知道这可能只是一个例子,但是如果您需要查询手牌来确定他们的玩家,我会说您建模错误。
-
我将不得不同意@MarkThomas 关于这一点。为什么
Hand需要知道它的Player?假设我们正在玩“Go Fish”……你会在他们的Hand中询问Player关于Card而不是询问Hand关于Player。Hand应该只知道Cards,Player应该知道Hand,通过Hand知道Cards -
这是一个二十一点游戏,有时您需要将一手牌分成两只手,最多四手。我发现让每只手“玩”自己并让所有玩家和 AI 决策都在 Hand 类中进行更容易。直到我意识到加倍和分裂需要这手牌知道它的玩家是否有足够的钱,我才遇到麻烦。我现在可能会改变它的结构,特别是因为无论如何我在 Player 类中仍然有很多游戏方法......
标签: ruby object inheritance attributes hierarchy