2017-08-04 61 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表充满了游戏状态。 –