• 沒有找到結果。

Chapter 6 多人連線遊戲設計

6.2 用戶端

6.2.1 用戶端元件

內部的成員如表6-4 所示,主要負責與伺服端之間的連線。

表 6-4 用戶端內部函式成員

函式 功能

SelectAdapter( ) 取得連線裝置的GUID。

ConnectServer( ) 與Server 建立連線,並傳送本地玩家姓 名

ConnectComplete( ) 當Client 和 Server 端連線成功後,Server 會傳回 “S_OK”訊息給 Client 端 Receive( ) [class m_Client] 接收Server 發送的所有訊息,然後程式

主體的Receive( )去對應處理

Disconnect() 當Client 端要離開遊戲時,會利用這個 函式與Server 端斷線

SendMessageToServer( ) 傳送本地玩家的訊息到Server,包含玩 家位置、向Server 要求玩家清單等等

dpnidPlayer DPNID 記 錄 已 經 連 線 玩 家 的 專 屬PlayerID

XMove、ZMove、YMove float 記錄玩家的位置 RotateX、RotateY float 記錄玩家的視點

m_Player CPlayer 記 錄 玩 家 角 色 出 現 的 整

sAssignPlayerIDMessage 在連線期間,向Server 要求自己的 PlayerID sRequestPlayerInfoMessage 較晚加入的玩家向Server 要求玩家清單時所用

的訊息

sCreatePlayerMessage 當本地玩家連上Server 時或者有新加入的玩家 時,Server 會發送這個訊息給本地玩家

sDestroyPlayerMessage 當有玩家離開遊戲時,Server 會發送這個訊息 給其他繼續進行遊戲的玩家

sStateChangeMessage 當本地玩家改變狀態時,會利用此訊息發送給 Server 再傳給其他玩家。其他玩家狀態也是利 用此訊息傳給本地玩家

sMessage 當接受到Server 發送過來的訊息,會利用這個 訊息結構先存起來

(3) 處理訊息的函式:對於不同的訊息,自然要有對應的函式去處理。詳細內容 PlayerID 更新為 Server 回 傳的 PlayerID 確保 Client 端和Server 端相同

CreatePlayer( ) sRequestPlayerInfoMessage

sCreatePlayerMessage

會 把 Server 傳 來 的 PlayerID 和基本訊息建立 到m_Player 陣列內顯示未 連線的改成連線並存入 DestroyPlayer( ) sDestroyPlayerMessage 這個函式會刪除本地玩家

m_Player 陣列內 PlyaerID 和訊息內傳送的 PlayerID 相同的玩家資料

ChangeState( ) sStateChangeMessage 用於更新除了本地玩家以 外的玩家狀態改變

6.2.3 Client 端與 Server 端建立連線的流程

當玩家執行遊戲時,會先出現一個對話視窗,讓玩家輸入 Server 端的 IP,

以及選擇連線裝置,和本地玩家的名字,如圖6-9 所示。只有當輸入的資料符合 格式,才可以進一步與Server 端建立連線。按下 Cancel 鍵則直接退出遊戲。

圖 6-9 Client 端執行後的輸入介面

只有當連線成功後,才會開始顯示遊戲畫面,並開始與 Server 端進行訊息 交換。而與Server 端連線的整體概要流程就如圖 6-10 所示。

6.2.4 Client 端和 Server 端連線後的互動流程

當Client 端與 Server 端連線成功後,除非是其中一方終止,不然會一直傳送 交換訊息。而Client 端訊息傳送和接收流程如圖 6-11 所示。

圖 6-11 Client 端和 Server 端連線後的互動流程圖

6.2.5 Client 端離開遊戲與 Server 端斷線的概要流程

當Client 端離開遊戲時,必須先與 Server 端斷線,並清除所有存在記憶體裡 面玩家的資料和遊戲資料。斷線概要流程如圖6-12 所示。

圖 6-12 Client 端離開遊戲與 Server 端斷線的概要流程圖

Chapter 7 未來發展與感想

Systems。利用 Particle Systems 可以製作出雨滴粒子、雪和雲霧等之類的大自然 現象;並且利用燈光來製作出光影效果,就如同電影的拍攝,場景的打光是很重

要的,即使是在人工搭建的場景,利用打光技巧一樣可以帶來彷彿身處在真實的 房屋裡。

(4) 整合 Server 和 Client

一般遊戲都是既可當 Server 也是可連去別的玩家所開的 Server,所以我們想 把Server 執行檔和 Client 執行檔整合在同一個程式中,使得玩家在執行遊戲時不 用開啟兩個執行就能玩,另外當 Server 的玩家在開啟後就可以直接進入自己所 開的遊戲中進行遊戲。

7.2 感想

專題不像一般作業只要短短幾行程式碼,用到的 Library file 和 Include file 不再僅僅只限於基本內建的,甚至是會用到一些別人開發的API。這時就要開始

作品,看看別人到底怎麼開發,以及到底需要注意哪些地方還有到底用哪種寫法 在某種情況下可能會比較好等等。我們花了不少時間在於Trace 別人作品的程式 碼上。對於一些不是很了解的區段我們也會利用 Debug 的方式去看為什麼要這 樣做。也因此讓我們對於一些原本認為很直觀的見解有了改變。因為我們不只要 讓程式可以動就好,遇到一些例外情況也要能盡快掌握。譬如對於一些開發過程 中可能產生的錯誤我們都要能盡快找出來,因此要加入一些不在原本程式範圍裡 面的程式碼來幫助除錯。這都是除了開發專案以外要注意的。

(4) Debug 能力的學習:

由於我們的程式是Client 端和 Server 端互動,因此一旦程式出問題將會很難 判斷到底是哪邊的哪個程式區段出問題。這時就需要同時對兩邊Debug,查看到 底是哪裡出問題。再加上我們的程式有包含多執行緒,不能像一般學校作業只要 按著順序 Debug 下來就好。因此也要試著去猜測哪邊出問題,才能針對某條路 線去Debug 找出問題。

藉由這次的專題製作,讓我們稍微體驗了一下真正開發一個比較像樣的程式 絕對不簡單。從初期的技術資料的查詢、專題開發、成品測試、完成每個過程中 都可能會出現上一個過程中想像不到問題,而造成進度中斷無法繼續製作下去。

也因此我們要更加注意任何細節不能在像以前一樣想到什麼就直接做什麼;而是 要謹慎的去分析各種可能出現的情況。對我們來說應該可以算是從實作中去學習 技術以及各項細節。

參考資料

‧書籍

[1] Daniel/著,大師談 遊戲程式設計 核心技術與演算法。

上奇科技出版,2004 年 6 月。

[2] Jim Adams/著,張世敏/譯,2D/3D RPG 角色扮演遊戲 程式設計-使用 DirectX。

博碩文化出版,2004 年 2 月。

[3] Sinan Si Albir /著,黃莉雯/編譯,UML 學習手冊。

美商歐萊禮出版,2004 年 7 月。

[4] Mason McCuskey /著,黃聖峰/譯,DirectX 特效遊戲程式設計。

博碩文化出版,2002 年 9 月。

[5] 連承洙/著,郭淑慧 博碩文化/編譯,嗯!3DS MAX 電腦 3D 動畫我也會。

博碩文化出版,2004 年 2 月。

[6] 繆龍驥 曾俊宏/編撰,向量解析幾何。

徐式基金會出版,民65。

[7] Oakley, C. O./撰,葉勇/譯,解析幾何。

教育部出版,民47。

‧網頁

[1] GameDev.net - all your game development needs URL:

http://www.gamedev.net/

附錄一 類別

一、Core(核心相關類別):

Core_Input 處理輸入作業 Core_Network 處理網路作業 Core_Sound 處理聲音作業

CWorldPosition 處理三維空間座標作業

三、FPS(第一人稱遊戲相關類別): CAnimationNode 處理動畫的節點 CFrameNode 處理框架的節點 CMeshNode 處理網格的節點

附錄二 轉檔成.x 檔操作過程

1. 從網路上下載轉換.x 檔的 plugin,放入\3dsmax6\plugins 資料夾中。

我們是使用 Pandasoft 所製作的 plugin。

2. 利用 3DS MAX 製作好所需的 3D 物件。

3. 點選 File 中的 Export,選擇好儲存路徑,按下儲存。

4. 出現以下畫面,依照所需加以設定,設定完後按下確定。

5. 最後在程式碼中加入產生的.x 檔。

附錄三 遊戲操作手冊

二、執行Client 端:

(1) 執行 Client.exe,會出現連線到 Server 端的對話視窗,如右圖所 示。假如不想繼續執行 Client 直接按下 Cancel 鈕即可離開。

(2)在 Host IP Address 欄輸入 Server 端的 IP 位址。在 Select Adapter 選擇連線用的裝置,假 如沒有選擇也是預設第一個連 線裝置。在 Player Name 欄輸入 你想要的暱稱。

(3)輸入完畢後,按下 OK 鈕就開始 連線到 Server 端。當連線成功,

就會出現遊戲畫面。

(4)此時在 Server 端也會顯示連線的 人數和玩家暱稱。

貳、遊戲中操作按鍵

‧ 前進:W 鍵

‧ 後退:S 鍵

‧ 左橫移:A 鍵

‧ 右橫移:D 鍵

‧ 變形:C 鍵

‧ 發射槍枝子彈:滑鼠左鍵

‧ 旋轉視角:滑鼠左右平移

相關文件