Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从erlang'检索/返回游戏状态;s消息传递结构_Erlang - Fatal编程技术网

从erlang'检索/返回游戏状态;s消息传递结构

从erlang'检索/返回游戏状态;s消息传递结构,erlang,Erlang,我在看一些用erlang制作的游戏,发现了一个简单的井字游戏。我理解这个游戏,但我有一个简单的问题,这个人用io:format()来显示游戏状态。所以当我做出这样的举动时 gameclient:make_move(Player1, ChallengedPlayer, Message), 我得到的回报是 {make_move,"player1",a3} 但是我想知道如何在调用函数make_move/3时检索当前游戏状态 我认为在这里使用记忆不是一个好的选择 有人能提出一种方法来检索/返回游戏状

我在看一些用erlang制作的游戏,发现了一个简单的井字游戏。我理解这个游戏,但我有一个简单的问题,这个人用
io:format()
来显示游戏状态。所以当我做出这样的举动时

gameclient:make_move(Player1, ChallengedPlayer, Message),
我得到的回报是

{make_move,"player1",a3}
但是我想知道如何在调用函数
make_move/3
时检索当前游戏状态

我认为在这里使用记忆不是一个好的选择


有人能提出一种方法来检索/返回游戏状态,而不是仅仅使用io:format打印它吗

例如,您可以使用ETS表

  • 启动时创建表:

    ets:new(tik_tak_tab, [public, {read_concurrency, true}, ordered_set,named_table]).
    
    loop(Name) ->
      receive
        { msg, Message } ->
            ets:insert(tik_tak_tab, {state, Message}),
            loop(Name)  
      end.
    
    some_func() ->
      case ets:lookup(tik_tak_tab, state) of
        [{state, Message}] -> Message;
        _ -> error
      end.
    
  • 将数据存储到表中:

    ets:new(tik_tak_tab, [public, {read_concurrency, true}, ordered_set,named_table]).
    
    loop(Name) ->
      receive
        { msg, Message } ->
            ets:insert(tik_tak_tab, {state, Message}),
            loop(Name)  
      end.
    
    some_func() ->
      case ets:lookup(tik_tak_tab, state) of
        [{state, Message}] -> Message;
        _ -> error
      end.
    
  • 创建新函数以检索状态:

    ets:new(tik_tak_tab, [public, {read_concurrency, true}, ordered_set,named_table]).
    
    loop(Name) ->
      receive
        { msg, Message } ->
            ets:insert(tik_tak_tab, {state, Message}),
            loop(Name)  
      end.
    
    some_func() ->
      case ets:lookup(tik_tak_tab, state) of
        [{state, Message}] -> Message;
        _ -> error
      end.
    
  • _还有一种使用记录的廉价方法


    您可以查看详细信息,例如,您可以使用ETS表格

  • 启动时创建表:

    ets:new(tik_tak_tab, [public, {read_concurrency, true}, ordered_set,named_table]).
    
    loop(Name) ->
      receive
        { msg, Message } ->
            ets:insert(tik_tak_tab, {state, Message}),
            loop(Name)  
      end.
    
    some_func() ->
      case ets:lookup(tik_tak_tab, state) of
        [{state, Message}] -> Message;
        _ -> error
      end.
    
  • 将数据存储到表中:

    ets:new(tik_tak_tab, [public, {read_concurrency, true}, ordered_set,named_table]).
    
    loop(Name) ->
      receive
        { msg, Message } ->
            ets:insert(tik_tak_tab, {state, Message}),
            loop(Name)  
      end.
    
    some_func() ->
      case ets:lookup(tik_tak_tab, state) of
        [{state, Message}] -> Message;
        _ -> error
      end.
    
  • 创建新函数以检索状态:

    ets:new(tik_tak_tab, [public, {read_concurrency, true}, ordered_set,named_table]).
    
    loop(Name) ->
      receive
        { msg, Message } ->
            ets:insert(tik_tak_tab, {state, Message}),
            loop(Name)  
      end.
    
    some_func() ->
      case ets:lookup(tik_tak_tab, state) of
        [{state, Message}] -> Message;
        _ -> error
      end.
    
  • _还有一种使用记录的廉价方法


    您可以查看详细信息

    很抱歉回复太晚,但这将打印名为的游戏状态。没关系,但我想要的是在每次调用make_move函数时将NewGameState的值放入一个变量中。我实际上是在ejabberd服务器上运行这个游戏,我做的是在每次调用时将新游戏状态存储在mnesia表中,然后我读取它,然后在下一行中,我从mnesia表中读取新游戏状态,但我发现它是空的,但当我编写计时器时:sleep(200)在这两行之间,我发现mnesia表中填充了游戏状态。很抱歉,回复太晚,但这将打印名为的游戏状态。没关系,但我想要的是在每次调用make_move函数时将NewGameState的值放入一个变量中。我实际上是在ejabberd服务器上运行这个游戏,我做的是在每次调用时将新游戏状态存储在mnesia表中,然后我读取它,然后在下一行中,我从mnesia表中读取新游戏状态,但我发现它是空的,但当我编写计时器时:sleep(200)在这两行之间,我发现记忆表中充满了游戏状态。