Elixir遊戲服設計五

2022-07-22 01:12:14 字數 1035 閱讀 8793

現在想想也沒那麼難。保證原子性,無非就是需要某個單點去完成操作。那麼選擇玩家程序去做原子性工作就可以了。

比如要重置某個任務,需要花費金幣和揹包裡某個物品,那麼大概的邏輯是這樣的。在玩家程序裡

def

reset_task(task_id) do

=task.reset_need

with

:ok =gold_enough(need_gold) #使用玩家程序的資料

:ok =bagserver.item_enough(need_item) #使用揹包程序的資料

do=cost_gold(need_gold) #使用玩家程序資料

:ok =bagserver.cost_item(need_item) #使用揹包程序資料

taskserver.reset(task_id) #使用任務程序資料

endend

只不過說這樣做以後,發覺bag和task程序做的工作也不多,不像玩家程序那麼活潑。

如果想讓bag和task有更多職責,你需要把reset_task之類的

操作直接交由他們做,比如如下。

def

reset(task_id) do

need = =reset_need

with

:ok =playerserver.gold_enough(need_gold)

:ok =bagserver.item_enough(need_item)

do:ok =playerserver.cost(need) ## 這裡是原子的操作,同上面一樣操作cost

reset(task_id)

endend

但需要分清楚一些操作還是要交由某個單點去做(比如玩家程序),費心去理清這點,顯得煩人。

而且每個模組需要知道很多其他模組,比如taskserver需要使用bagserver,這也是乙個糟糕之處。

這麼一想,我還真找不到要劃分成應用(程序那種)的理由了;乙個庫應用,甚至於乙個模組就可以滿足需求。

Elixir遊戲服設計六

defmodule table do state accept 0 準備接入玩家 state ready 1 開局準備?defdelegate fetch t,key get and update t,key,list to map defstruct config,seats,state defn...

Elixir遊戲服設計一

在erlang遊戲服設計總結裡,我提到我想要的遊戲服設計方法,希望以應用做為基礎構建塊。最近我在學習elixir,它有很多 方便的語法糖以及很好用的庫,能夠解決我在遊戲中開發中碰到的很多繁瑣工作。因此我決定用它來做 練手,並期望下個專案中使用它。遊戲服的設計通常涉及如下東東 我將以乙個簡單的打牌遊戲...

簡單Elixir遊戲伺服器開篇

以前的elixir遊戲服設計系列種種原因沒有完成。後來雖然用elixir riak 完成了乙個麻將的初始版本,可惜公司也掛了。現在到新公司,比較空閒,想著像完成乙個心願一樣,還是重啟下吧 希望不要又爛尾 改頭換面叫簡單elixir遊戲伺服器系列。一些說明 0.沒怎麼寫過部落格,也懶得去研究了,說到哪...