[wizs] /open/vroom

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間18年前 (2007/12/28 17:48), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串1/1
底下有三個檔案... vroom_d.c 共通繼承檔       這個檔設定了玩家在移動到其它房間時會做的事 vroom.c 虛擬房間檔, 每個虛擬房間的本體都是 vroom.c 每個 vroom.c 都會有個 check_ppl 函數, 它會       在特定時間被 control.c 呼叫, 用以判斷虛擬 房間還有沒有玩家存在. control.c 區域的起點, 有四個出口通往對映的虛擬房間, 它並定義了該方塊型區域的四個邊界值. (以目前的 control 來說, 它是 31 x 31 的區域) heart_beat 則是每一秒它會做的事, 其中有個全       域變數 f 會累加... 當 f/150 的餘數是 30 時, 對第一象限的所有虛擬房間做 check_ppl 當 f/150 的餘數是 60 時, 對第二象限的所有虛擬房間做 check_ppl 當 f/150 的餘數是 90 時, 對第三象限的所有虛擬房間做 check_ppl 當 f/150 的餘數是 120 時, 對第四象限的所有虛擬房間做 check_ppl 所以它可以定時去對所有的虛擬房間做 check_ppl, 只要該房間的 check 結果是沒有任何玩家存在, 它 就會把該虛擬房間從系統記憶體中 clean 掉。 在有設定邊界值以及一般合理的情況下,最多只會產生 31 x 31 個房間,而每過一個 check_ppl 的循環周期後,最多只會剩下 與「玩家在線人數」相同的房間數。 (即假設線上的玩家全部都跑去那個區域,而且每個人佔一格) 又假設,如果玩家每進一個房間,例如它就得停留一段時間才 能再往次一格走,亦或者每進一個房間就得跟房間的怪物戰鬥 (等於同樣要停留一段時間),那麼實際上就不可能一下子產生 許多房間。 甚至,我們可以先畫好一個依一定格式完成的地圖,把地圖讓 control.c 去處理,之後,它就會依照那份地圖,去 product 出整個虛擬房間組成的區域,這也是一種不錯的方式。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.225.184.184

12/28 23:21, , 1F
是的...我在其他MUD看過這東西...
12/28 23:21, 1F

12/29 03:56, , 2F
但這方法只能做出「平面」的區域
12/29 03:56, 2F

12/29 03:56, , 3F
這是我認為比較可惜的地方...
12/29 03:56, 3F

12/29 18:34, , 4F
以相同的概念要擴展成三維空間並不是問題,把二維的寫法延
12/29 18:34, 4F

12/29 18:35, , 5F
伸為三維即可.
12/29 18:35, 5F

12/29 18:36, , 6F
但是這樣一來就不能丟圖給它去product,只能用手動輸入的方
12/29 18:36, 6F

12/29 18:36, , 7F
式去讓control.c事先儲存各格子的資料,這並不難.
12/29 18:36, 7F
文章代碼(AID): #17TCQ0dY (mud_sanc)
文章代碼(AID): #17TCQ0dY (mud_sanc)