2012-07-25 65 views
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請求發送給服務器
  • 博弈模型處理兩張牌給每個玩家,首先是玩家,然後是人類玩家。
  • 開始交易後,我發回所有包括玩家和他們的卡的數據。
  • 然後我想,如果ת播放器上點擊了「打我」按鈕,這將增加他隨機卡從保持卡

回答

0

你能給什麼回事更詳細一點?刷新意味着什麼?

更新:在這種情況下,我相信簡單的答案是否定的。 「每個請求都被視爲一個獨立的事件,除了存儲在用戶會話和任何外部數據庫,緩存或文件存儲中的內容之外,不會傳輸任何狀態信息。最好是設計應用時考慮到這一點,而不是希望事情能夠堅持下去,只是因爲你已經設定好了。「 (來源:What data (if any) persists across web-requests in Ruby on Rails?)。我能想到的另一件事情是允許「卡片」數據在請求間持續存在,就是使用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應該是唯一的卡甲板你可以在整個遊戲中改變它的價值。

+0

更新了遊戲週期 – 2012-07-25 20:44:23