gpt4 book ai didi

ruby - 使用 state_machine,如何从 :if lambda 内部访问事件参数

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:46 25 4
gpt4 key购买 nike

我正在使用 state_machine gem 来模拟纸牌游戏,我有一个转换条件,需要在绘制纸牌时知道事件参数。这是一些示例代码。

class CardGame
state_machine do
before_transition :drawing_card => any, :do => :drawn_card
event :draw_card
transition :drawing_card => :end_of_round, :if => lambda {|game|
# Check goes here, I require knowing which card was taken
# which is passed as arguments to the event (:ace, :spaces)
}
end
end

def drawn_card(value, suit)
# I can access the event arguments in the transition callbacks
end
end

game = CardGame.new
game.draw_card(:ace, :spades)

我在想另一种方法是将对象的纸牌花色和值设置为变量,但这比使用事件参数要困惑得多。

提前致谢:)

最佳答案

这里的主要问题是状态机可能不属于您的 CardGame 类。游戏状态在别处。我可以看到四个主要领域模型:

  • 卡片
  • 甲板
  • 游戏

一个游戏将有一个或多个Decks(每个52张Cards)和一个或多个Hands . (你甚至可能想要一个 Player 类,其中玩家有一个 Hand,由你决定。

例如,一个Deck 可能有一个shuffle! 和一个deal 方法。 Hand 将有一个 play 方法。这就是规则逻辑可能存在的地方。

Game 类主要由如下循环组成:

def run
deal
do
play_hands
check_for_winner
while(playing)
end

当然细节更复杂,但您可能会发现这种方法更令人耳目一新,也更容易测试。

关于ruby - 使用 state_machine,如何从 :if lambda 内部访问事件参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9621088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com