Erlang 如何操作遊戲中的二維地圖?

時間 2021-06-06 05:42:14

1樓:1diot

一條一條來。

首先解決資料結構。

手機打字直接偽碼了。

定義玩家位置:

playerLocation

定義地圖:

mapLocation map[N*N]

獲取乙個地圖位置:

mapLocation getMapLocation(playerLocation pl)

完全根據xy獲取地圖位置資訊,線性結構就足夠了。

然後解決併發問題。

基本的方案大概這樣:

1、伺服器更新地圖資料前,首先將玩家按位置區段劃分:

mapLocation session1 = map.getRange(0,100)

(假設0~100的玩家為乙個區段

2、在獲得區段後,為相同區段的玩家開啟乙個session,複製該區段資料,供玩家修改:

session[(playerLocation.x - 1) * (playerLocation.y - 1)] = player's map location

3、合併所有區段的資料到伺服器map。

我的考慮是,盡可能將單一大塊資料打散,完全利用併發效率去同時更改。

這個具體實現還有很多加速的辦法,比如使用gpu加速。

以上。手機打字隨便看看就好了。輕噴。

2樓:

可以考慮使用ets表或maps,key使用乙個(e.g.) 這樣的元組作為主鍵

如果地圖資訊儲存在乙個Maps中,例如M,想取X=100, Y=100座標的資料,像下面這樣即可

maps:get(, M, {}).

3樓:吳雙

我們專案類似於這種操作都是寫到C層的,如果說你單純的用作標記的陣列的話,我覺得用位元語法會好用點。

也是學了沒多久, 不一定對= =

在各類絕地求生遊戲中,最神奇的操作?

青夜丸 沒人邀自己來系列 正文 九點多十點的時候打了局絕地求生 刺激戰場四個人匹配,剛進去我沒開麥,其他三個男生開了,聽了聲音發現有乙個小朋友,讓大家都跟他跳,其他倆就跟著,我沒有跟,結果他們都說要讓我跟,我就開麥說了句 我不是很想啊。那個小朋友聽見我聲音 哇 的一聲,小姐姐聲音好好聽啊,我平時聽多...

2023年,你在遊戲中的 年度最佳操作 是哪一次?

守望先鋒,66號公路,防守方。車還有半公尺到終點,隊友這時都死光了。D.Va攢了大一直沒放,躲在出生點出來右側的箱子後,看準時機朝車上乙個大,炸死五個,再呼叫機甲抓掉殘血的源氏,完成1V6。時間還剩19秒。比賽結束。 但行好事莫問前程 宮本一挑三 無欲則剛 想當年我操作犀利反映靈敏。最記憶深刻的是二...

csgo遊戲中名字會根據操作而不停變是怎麼做到的?

櫻花色的季節 steam登陸,加入這個組,就能設定動態組名 組公告有設定方法 bind a moveleft cl clanid 40154566 bind d moveright cl clanid 40154799 bind w forward cl clanid 40154566 bind s...