快捷搜索:

简单Elixir游戏服设计

日期:2019-09-29编辑作者:方块游戏

方块游戏,像Player进度那样增添TableServer代表桌子进度

扩展TableSupervisor监察和控制TableServer。使用同叁个Registry,因而名字也改成LocalRegistry了。

因而Registry的启航代码,以及原来PlayerServer的register_name要做稍微修改。

当然你也足以行使2个差异的Registry,但可能将在追加贰个RegstrySupervisor 去start_child了,

又大概手动运转2个(特别不建议)。

新的game_server.ex

方块游戏 1方块游戏 2

defmodule GameServer do
  use Application
  def start(_type, _args) do
    children = [
      {Registry, keys: :unique, name: LocalRegistry},
      PlayerSupervisor,
      TableSupervisor
    ]
    Supervisor.start_link(children, strategy: :one_for_one)
  end
end

game_server.ex

PlayerServer 的register_name 应该按table_server 那样修改,那样明晰,并且也不会冲突。

方块游戏 3方块游戏 4

defmodule TableServer do
    use GenServer, restart: :temporary, start: {__MODULE__, :start_link, []}

    def start_link(table) do
        GenServer.start_link(__MODULE__, table, name: register_name(table))
      end

    def init(table) do
        {:ok, table}
    end

    def register_name(%{} = table), do: register_name(table |> SimpleTable.get_id)
    def register_name(id), do: {:via, Registry, {LocalRegistry, {Table, id}}}

    def exist?(table) do
        key = {Table, table |> SimpleTable.get_id}
        case Registry.lookup(LocalRegistry, key) do
            [{_pid, _}] -> true
            [] -> false
        end
    end

end

table_server.ex

增加产量了exist? 剖断函数,以往会有用吧。

标准上当游戏用户创造了二个牌局后,没解散从前不允许再次创下制(当然你能够改,笔者只是简化了)

table_supervisor 测试

defmodule TableSupervisorTest do
    use ExUnit.Case
    doctest PlayerSupervisor

    setup do
        Application.stop(GameServer)
        Application.start(GameServer)
        %{}
    end

    test "测试TableSupervisor启动TableServer" do
        table1 = SimpleTable.init |> SimpleTable.set_id(1)
        table2 = SimpleTable.init |> SimpleTable.set_id(2)
        assert {:ok, _p1} = TableSupervisor.start_table(table1)
        assert {:ok, _p2} = TableSupervisor.start_table(table2)
        assert TableServer.exist?(table1)
        assert TableServer.exist?(table2)
    end
end

变动使用exist? 了

player_supervisor_test.exs 也照着修改。

编写翻译测量检验ok。

代码变迁参看git吧。

他日大家由游戏者创制牌局,一步步进展吧。

XXXX,想了下 上句话不对,创建那多少个跟游戏的方法也从没涉嫌,先放着,直接起牌局玩才对。

XXXXX,上句看似也不对,本质上server进程只是转调用数据结构的操作,因而牌局游戏的方法完全能够是数据结构的操作先。

为此下回大家直接操作数据,举办牌局。

 

本文由澳门新普京发布于方块游戏,转载请注明出处:简单Elixir游戏服设计

关键词:

桌子和座位

建模桌子和座位 代码比较短小,直接贴吧。 model 里新建simple_table.ex 和 seat.ex, 项目里新增对应的test. 座位部分...

详细>>

你的鲁迅不是我的绍兴

这是一篇游记,讲一个从台湾跑来上海工作生活五年的台湾妹子,一个人跑到绍兴去体验一下两岸文化教育的不同与...

详细>>

方块游戏:降魔塔

苏木弯下腰垂怜的将降香抱起来,指着那棵老树说,“笔者在看,这老树曾几何时能发新芽。” 他身边,是一具被吸...

详细>>

简单Elixir游戏服设计

常见,全体的游戏的使用者的操作都会透过游戏者经过去管理。那么当游戏者的操作比非常多的时候 该怎么去设陈设...

详细>>