看板 mud_sanc 關於我們 聯絡資訊
底下有三個檔案... 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
doall:是的...我在其他MUD看過這東西... 12/28 23:21
doall:但這方法只能做出「平面」的區域 12/29 03:56
doall:這是我認為比較可惜的地方... 12/29 03:56
laechan:以相同的概念要擴展成三維空間並不是問題,把二維的寫法延 12/29 18:34
laechan:伸為三維即可. 12/29 18:35
laechan:但是這樣一來就不能丟圖給它去product,只能用手動輸入的方 12/29 18:36
laechan:式去讓control.c事先儲存各格子的資料,這並不難. 12/29 18:36