ruby – 使用state_machine,如何从:if lambda中访问事件参数
发布时间:2020-12-17 07:09:40 所属栏目:百科 来源:网络整理
导读:我正在使用 state_machine gem来模拟纸牌游戏,我有一个转换条件,需要在绘制卡片时知道事件参数.这是一些示例代码. class CardGame state_machine do before_transition :drawing_card = any,:do = :drawn_card event :draw_card transition :drawing_card =
我正在使用
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类.游戏状态位于别处.我可以看到四种主要的域模型:
>卡 游戏将有一个或多个甲板(每个52卡)和一个或多个手. (你甚至可能想要一个Player类,玩家有一个Hand,你的通话). 举个例子,甲板可能会有一个洗牌!和交易方法.一只手将有一个游戏方法.这是规则逻辑可能存在的地方. Game类主要包??含一个循环,如下所示: def run deal do play_hands check_for_winner while(playing) end 当然,更详细的细节,但你可能会发现这种方法更清爽,更容易测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |