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 リクエストがサーバーに送信されます
  • ゲーム モデルでは、各プレイヤーに 2 枚のカードが配られます。最初はボット プレイヤー、次に人間のプレイヤーです。
  • 取引開始後、プレイヤーとそのカードを含むすべてのデータを返送します。
  • プレイヤーが「ヒットミー」ボタンをクリックすると、残りのカードからランダムなカードが追加されます
4

1 に答える 1

0

何が起こっているのか、もう少し詳しく教えていただけますか?リフレッシュするってどういうこと?

更新: その場合、単純な答えはノーだと思います。「各リクエストは独立したイベントとして扱われ、状態情報は、ユーザー セッションと外部データベース、キャッシュ、またはファイル ストアに保存されているものを除いて引き継がれません。これを念頭に置いてアプリケーションを設計することをお勧めします。設定したからといって、物事が持続することを期待してください。」(ソース: Ruby on Rails で Web リクエスト間で保持されるデータ (存在する場合) は? )。「カード」データをリクエスト間で保持できるようにするために私が考えることができる唯一の方法は、Cookie を使用することです。しかし、とにかくCookie情報を更新し続ける必要があります。したがって、状況に応じて、より良い場合とそうでない場合があります。

更新: 私は考えていました...「カードデッキ」を持続させる1つの可能な方法は、次のようなことを試すことです:

#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 に答える