網(wǎng)絡(luò)游戲開發(fā):回合制網(wǎng)絡(luò)游戲架構(gòu)與設(shè)計
時間:2023-09-10 00:24:01 | 來源:網(wǎng)站運營
時間:2023-09-10 00:24:01 來源:網(wǎng)站運營
網(wǎng)絡(luò)游戲開發(fā):回合制網(wǎng)絡(luò)游戲架構(gòu)與設(shè)計:上一節(jié)講解了傳統(tǒng)意義上的基于服務(wù)器上跑地圖的狀態(tài)同步,本節(jié)來講解基于回合制戰(zhàn)斗玩法的網(wǎng)絡(luò)同步?;睾现朴螒蚴且环N游戲打怪形式,所有游戲內(nèi)玩家輪流自己的回合,只有輪到自己的回合,才能夠進行操縱。而基于網(wǎng)絡(luò)玩家來進行回合制對戰(zhàn)的時候,服務(wù)端如何做好同步,本節(jié)我們從3個點來做詳細的分析。
(1)玩家的戰(zhàn)斗匹配;
(2)回合制戰(zhàn)斗邏輯控制;
(3)機器人與NPC戰(zhàn)斗角色設(shè)計;
玩家戰(zhàn)斗匹配
回合制游戲首先是玩家的戰(zhàn)斗匹配,對于回合制游戲而言戰(zhàn)斗可以分為兩種,一種是玩家與系統(tǒng)之間的PK,比如做某個任務(wù),PK系統(tǒng)中的某個角色, 另外一種是玩家與玩家之間的戰(zhàn)斗匹配。其實這里的本質(zhì)都是一樣的,唯一的普通是玩家與系統(tǒng)之間的pk,系統(tǒng)角色的操作是由后臺系統(tǒng)的規(guī)則控制的,玩家與玩家PK,玩家的所有操作來自于網(wǎng)絡(luò)客戶端。玩家戰(zhàn)斗時匹配的規(guī)則是由策劃來定的,比如兩個玩家商量好指定相互PK,比如系統(tǒng)根據(jù)某些條件,隨機匹配玩家來PK等。這個由策劃給出PK的匹配規(guī)則我們來實現(xiàn)。在做玩家匹配戰(zhàn)斗的時候,如果是按照系統(tǒng)規(guī)則,通過系統(tǒng)來匹配對手,一般我們在服務(wù)端會設(shè)計一個等待列表,等待列表就是按照策劃提供的規(guī)則來進行分類,比如新手場,高手場等。當玩家要進入戰(zhàn)斗時,先會先加入到服務(wù)器上的等待列表中,等待系統(tǒng)分配其它的玩家來開一個戰(zhàn)斗局。這個時候一般服務(wù)端會啟動一個定時器或者事件來驅(qū)動檢查看等待列表里面是否有玩家,如果有,就抽取出來組成一個戰(zhàn)斗局。服務(wù)端會創(chuàng)建一個”回合戰(zhàn)斗管理對象” + “玩家對象”或”系統(tǒng)控制的角色對象”?!被睾蠎?zhàn)斗管理對象”來管理整個回合制戰(zhàn)斗流程與進度邏輯與結(jié)算結(jié)果?!被睾现茟?zhàn)斗管理對象”,給每個玩家對象(系統(tǒng)控制的角色對象)分配一個”位置”?;睾现茟?zhàn)斗管理對象基于對應(yīng)的位置來做好回合管理。
回合制戰(zhàn)斗邏輯控制
系統(tǒng)完成玩家匹配以后,就進入了回合制戰(zhàn)斗邏輯控制,這部分主要有RoundFightMgr來做管理與推進整個游戲邏輯的進度。主要的流程如下:
1: 把參與戰(zhàn)斗的玩家對象的引用放在一個數(shù)組里面,方便遍歷每個玩家與廣播事件;
2: 可以添加一個旁觀數(shù)組,用來存放旁觀的玩家角色(游戲觀眾),視業(yè)務(wù)的需求而定。
3: 遍歷所有玩家(戰(zhàn)斗玩家與旁觀玩家),發(fā)送一個RoundReady的事件消息給每個客戶端,告訴客戶端戰(zhàn)斗馬上要開始了,進行準備;
4: 發(fā)送一個RoundStart的事件消息給所有玩家,告訴它們戰(zhàn)斗正式開始;
5: 在服務(wù)端上做好一個當前的回合輪到哪個玩家的標記,一般我們會用一個位置的索引來處理,因為玩家對象的引用都存在一個數(shù)組里面,比如sideA的索引為0, sideB的索引為1。
6: 廣播TrunToPlayer給所有的客戶端,目前輪到誰的回合了, 客戶端收到處理后重置倒計時等信息,等待玩家的操作。
7: 服務(wù)端下一個操作超時的定時器,如果在規(guī)定的時間內(nèi),當前Trun玩家沒有做任何操作,服務(wù)端就會判定當前玩家超時,輪到下一個玩家繼續(xù)執(zhí)行步驟6。
8: 服務(wù)端接受到客戶端玩家的戰(zhàn)斗操作,先判斷一下這個客戶端是不是當前的Trun玩家,如果不是,不予理睬,如果是,進入操作合法性檢測。
9: 獲取當前Trun玩家發(fā)過來操作的類型,數(shù)據(jù)等,檢車這些類型,數(shù)據(jù)條件的合法性,即是否允許這樣的操作。如果合法性都允許了,就把操作保存起來,方便生成錄像。
10: 操作合法后,表示Trun玩家做了對應(yīng)的一個操作,服務(wù)端做好傷害與防御的計算,同時服務(wù)端會把這個玩家的操作廣播給所有的客戶端,客戶端播放回合攻擊動畫。
11: 服務(wù)端留足了回合的時間給客戶端播放動畫展示以后,繼續(xù)重復(fù)執(zhí)行第6步。
12: 特定條件戰(zhàn)斗結(jié)束后,進行結(jié)算,向?qū)?yīng)的客戶端發(fā)送結(jié)算數(shù)據(jù)CheckGame,戰(zhàn)斗結(jié)束。
機器人設(shè)計與NPC戰(zhàn)斗角色
回合制網(wǎng)絡(luò)游戲中有兩個比較重要的東西的設(shè)計就是
機器人與NPC的戰(zhàn)斗角色。特別是機器人,前期剛上線的時候沒有那么多人PK,怎么辦呢?系統(tǒng)一般會創(chuàng)建機器人。機器人的設(shè)計同樣也適合NPC的戰(zhàn)斗角色單元。機器人的設(shè)計怎么做呢?其實非常簡單,我們機器人的大部分的數(shù)據(jù)功能與策略基本和普通玩家是一樣的。普通玩家代碼寫好以后這部分代碼也可以共用,唯一不同的是機器人有一個機器人的標志。玩家控制角色的操作來自玩家,而機器人就沒有對應(yīng)的網(wǎng)絡(luò)玩家,所以我們會做一個機器人決策的AI模塊,來做出操作決策。比如Trun到某個玩家,判斷這個玩家的標志是否為一個機器人,如果是,那么我們就進入AI決策模塊,經(jīng)過計算做出操作決策后廣播給所有客戶端,這樣客戶端就看到這個玩家的操作了。所以關(guān)于機器人的設(shè)計,基本上不用動太多。一般我們把數(shù)據(jù)庫中一些玩家設(shè)置成機器人,在服務(wù)器啟動的時候,把這些玩家數(shù)據(jù)加載進來,創(chuàng)建生成機器人數(shù)據(jù)對象Player。哪里需要機器人,就把機器人放等待列表進行匹配。NPC戰(zhàn)斗角色也是類似的。
好今天的回合制同步就講解到這里,源碼素材更多教程可以去主頁學習小組哦 關(guān)注學習更多的網(wǎng)絡(luò)游戲?qū)崙?zhàn)系列教程。
關(guān)鍵詞:網(wǎng)絡(luò),游戲,設(shè)計