2017-08-04 36 views
1

我在看一些使用erlang製作的遊戲,並且發現了一個簡單的井字遊戲here。我明白這個遊戲,但我有一個簡單的問題,那個人已經使用io:format()來顯示遊戲狀態。所以,當我在做類似的回報從erlang的消息傳遞構造中檢索/返回gamestate

gameclient:make_move(Player1, ChallengedPlayer, Message), 

我得到的一招是

{make_move,"player1",a3} 

,但我想知道,我怎麼能檢索調用函數make_move/3當前的遊戲狀態。

我不認爲在這裏使用mnesia是個不錯的選擇。

任何人都可以提出一種方法來檢索/返回遊戲狀態,而不是僅使用io:format打印它。

回答

0

你可以用ETS表例如

  1. 在啓動時創建表:

    ets:new(tik_tak_tab, [public, {read_concurrency, true}, ordered_set,named_table]). 
    
  2. 將數據存儲到表:

    loop(Name) -> 
        receive 
        { msg, Message } -> 
         ets:insert(tik_tak_tab, {state, Message}), 
         loop(Name) 
        end. 
    
  3. 結交新功能中檢索狀態:

    some_func() -> 
        case ets:lookup(tik_tak_tab, state) of 
        [{state, Message}] -> Message; 
        _ -> error 
        end. 
    

_。 也有使用記錄

廉價的方式,您可以查看詳細here

+0

以及後期的答覆抱歉,但是這將打印稱爲遊戲狀態。沒關係,但我想要的是在每次調用make_move函數時將** NewGameState **的值變爲一個變量。我實際上在做的是我在ejabberd服務器上運行這個遊戲,我所做的是在每次調用時將NewGameState存儲在mnesia表中,然後在下一行中讀取它,然後讀取** NewGameState **從mnesia表,但我發現它是空的,但是當我寫了一個計時器:兩行之間的睡眠(200),我發現mnesia表充滿了遊戲狀態。 –