0

我有 3 个模型:游戏、玩家、卡片。

在游戏模型中,我的功能是:

def cards
    @cards ||= Card.all.shuffle
end

当我向玩家发牌时,我会:

player.cards << cards.pop

我正在尝试保存卡片变量,刷新后我可以从剩余的卡片中处理另一个玩家。

基本上我试图避免以这种方式计算剩余卡:

  def remain_cards
    all_cards = Card.all
    table_cards = players.map(&:cards).flatten

    all_cards - table_cards
  end 

有没有办法做到这一点?

这是一个二十一点游戏,游戏周期:

  • 人类玩家进入游戏并点击开始游戏按钮和发送到服务器的ajax请求
  • 游戏模型向每个玩家发两张牌,首先是机器人玩家,然后是人类玩家。
  • 开始交易后,我将发回包括玩家和他们的牌在内的所有数据。
  • 然后我想要那个ת 如果玩家点击“打我”按钮,那将添加他从剩余卡片中的随机卡片
4

1 回答 1

0

你能详细说明发生了什么吗?刷新是什么意思?

更新:在那种情况下,我相信简单的答案是否定的。“每个请求都被视为一个独立的事件,除了存储在用户会话和任何外部数据库、缓存或文件存储中的内容之外,不会传递任何状态信息。最好在设计应用程序时考虑到这一点,而不是期望事情会持续下去,因为你已经设定了它们。” (来源:Ruby on Rails 中的 Web 请求中保留哪些数据(如果有)?)。我能想到的让“卡片”数据在请求中持续存在的唯一另一件事是使用 cookie。但是无论如何我相信你必须不断更新cookie信息。因此,根据您的情况,它可能会更好或不会更好。

更新:我一直在想......让“卡片组”持续存在的一种可能方法是尝试以下方法:

#config/initializers/card.rb - store an instance to an app-wide Card object using an initializer.
THE_CARD_DECK = Card.new

#Now we change the before filter which sets the @cards variable to use that constant:
class ApplicationController < ActionController::Base
  before_filter :init_cards
  def init_cards
    @cards = THE_CARD_DECK
  end
end

现在@cards 应该是唯一的卡片组,您可以在整个游戏中更改它的值。

于 2012-07-25T20:36:59.443 回答