• 沒有找到結果。

NPC+怪物的移動控制

在文檔中 簡易3D多人線上遊戲系統 (頁 132-138)

5.5 遊戲世界中各類角色的設定與行為能力

5.5.3 NPC+怪物的移動控制

由於 NPC 及怪物都不是由玩家直接控制,但卻是遊戲中跟玩家互 動最重要的兩大部份。NPC 如村民、城門守衛、商人…等,常常扮演 引導玩家進行遊戲的角色,更是遊戲設計者與玩家之間訊息傳遞最重 要的橋樑;而怪物所扮演的角色就非常明顯,不再贅述。因此,所有 跟 NPC 及怪物相關的控制作業都必須由程式開發者負責撰寫,在伺服 端執行運作及管理。

NPC 及怪物的共同部分便是移動,有以下三種基本模式:

一、靜止不動:放置某個角色並使它面對預設的方向靜止不動。

二、漫無目的地的在固定區域(座標範圍)內游走

程式流程如圖 5-43 所示。先藉由設定 NPC 或怪物物件裡的行為 函式 LocMoving()開始,此函式共需要 4 個變數來設定範圍,分別代 表最小、最大的 x 座標以及最小、最大的 y 座標。當範圍設定好後,

便亂數產生一組(x ,y)座標,並跟一開始設定的座標作比對,以檢查 是否超出可移動之範圍。若比對的結果是超出範圍,則回到亂數產生 座標的程序在重新往下作(此時怪物是不會移動的)。反之,若比對結 果仍在範圍內,則計算最短路徑並將結果存下以作為接下來逐步移動 的依據。

移動的過程中,若無發生其它事件(如:被玩家攻擊)便會一直往 前走,待到達目的地座標後,便會再回到亂數產生座標的動作再繼續 下去。但移動期間,若遭受玩家攻擊,則怪物便會停下腳步,予以回 擊。

簡易3D多人線上遊戲系統

圖 5-43 隨機游走程序圖

三、在特定的路線上走動

雖然 NPC 及怪物並沒有那麼聰明,知道該在地圖中的哪些路徑上 移動,不過我們可以透過函式來指定它們所要行走的路線。這些路線 是一連串座標的集合,我們必須保證當在它們抵達某一座標後,才能 再往下一組座標前進。且一但到達指定的最後一組座標,它們需回頭

走向起始座標再重複相同路線。主要有以下兩種模式:

1)在兩座標間來回走動

透過 NPC 或怪物物件裡行為函式 Setpath()的呼叫,我們可以指 定一條路線來讓 NPC 或怪物在上面來回走動。此函式需要 4 個變數,

(Xstart,Ystart)、(Xfinal,Yfinal)分別代表一組起始座標及一組 目的地座標。

當設定好之後,程式內部就會呼叫計算最短路徑的函式予以計 算,並將結果放在 NPC 或怪物的資料欄位 walkroutine[]內。如此主 程式便可依照陣列內的座標逐步移動。在移動的過程中,需將下一步 座標與目的地座標作比對,若不是目的地座標則繼續走。若是,則走 到下一步之後便要開始往回走。程式流程如圖 5-44 所示。

簡易3D多人線上遊戲系統

圖 5-44 兩座標間來回走動程序圖

2)在給定的數個座標間繞圈圈

事實上,這個控制模式是前者的應用。在圖 5-45 中,NPC 可以 繞這四個圓點來依序移動,每兩個圓點的座標就是 Setpath()的參數 值。甚至,我們也可讓 NPC 繞著整間屋子移動,也是可行的。

圖 5-45 繞圈圈範例

簡易3D多人線上遊戲系統

5.6 戰鬥系統

怪物被玩家攻擊時會引起特定的行為函式 beAttack(),在此函 式中主要有兩個判斷依據:

一、 HitFlag = ( 玩家命中率 >= rand()%100 )?1:0;

二、 DodgeFlag = ( 怪物閃躲率 >= rand()%100 )?1:0;

其中,HitFlag 表玩家是否命中的旗標,它的值可能是 0(False) 或 1(True)。當第一個判斷程序結束並確定玩家有命中之後,才會再 進入第二個判斷程序繼續處理,否則就不做任何動作。若玩家命中(第 一個程序判斷完成),此時並還沒確定怪物已經受到傷害,接下來會 進入到第二個判斷程序,其中,DodgeFlag 表怪物是否閃避的旗標,

它的值亦可能是 0(False)或 1(True)。當 DodgeFlag 旗標的值也為 1(True),這時,我們才可說怪物即將受到玩家所帶來的傷害,並進 入傷害計算的階段。

在文檔中 簡易3D多人線上遊戲系統 (頁 132-138)

相關文件