freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于unity的回合制網(wǎng)游戰(zhàn)斗系統(tǒng)的研究與實(shí)現(xiàn)(編輯修改稿)

2025-07-21 04:09 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 系統(tǒng)架構(gòu)和相關(guān)功能架構(gòu)進(jìn)行簡(jiǎn)單的羅列和說明。圖42 實(shí)踐項(xiàng)目《PKer》戰(zhàn)斗系統(tǒng)及相關(guān)功能架構(gòu)說明:(1) 玩家從游戲大廳可以搜索加入房間或創(chuàng)建房間,與房間內(nèi)其他玩家進(jìn)行對(duì)戰(zhàn)進(jìn)入戰(zhàn)斗(讀者可根據(jù)自身游戲玩法考慮如何觸發(fā)戰(zhàn)斗,如常見的回合制游戲通過暗雷或明雷遇敵、玩家對(duì)點(diǎn)觸發(fā)戰(zhàn)斗);(2) 《PKer》中玩家可以直接在玩家屬性配置界面中通過點(diǎn)選“寵物庫(kù)”內(nèi)的寵物即可獲得對(duì)應(yīng)寵物,并且通過設(shè)置“參戰(zhàn)寵物”可讓寵物在戰(zhàn)斗中出戰(zhàn)(讀者可根據(jù)自身游戲玩法考慮寵物的獲得途徑,常見的途徑有戰(zhàn)斗捕捉、任務(wù)獎(jiǎng)勵(lì)等);(3) 《PKer》中玩家可以直接在玩家屬性配置界面中通過點(diǎn)選“裝備物品庫(kù)”內(nèi)的裝備/物品即可獲得對(duì)應(yīng)裝備/物品,裝上裝備將提高角色的屬性使角色更具戰(zhàn)斗力,放在物品欄的物品可以在戰(zhàn)斗中使用回復(fù)Hp/Mp(讀者可根據(jù)自身游戲玩法考慮裝備物品的獲得途徑,常見的途徑有戰(zhàn)斗獎(jiǎng)勵(lì)、任務(wù)獎(jiǎng)勵(lì)等);(4) 《PKer》中玩家可以直接在玩家屬性配置界面中更改職業(yè),從而獲得在戰(zhàn)斗中使用的技能;(5) 進(jìn)入戰(zhàn)斗后,參戰(zhàn)角色的屬性由各個(gè)玩家配置(屬性加點(diǎn)、裝備、參戰(zhàn)寵物、職業(yè)等)所決定;(6) 各玩家通過指令菜單下達(dá)指令從而控制自身角色和自身參戰(zhàn)寵物(如有設(shè)置參戰(zhàn)寵物)的行動(dòng)。其中,使用技能能夠選擇使用自身職業(yè)的技能,使用物品能夠選擇使用物品欄的物品;(7) 戰(zhàn)斗動(dòng)畫主要由多個(gè)協(xié)同程序組成來實(shí)現(xiàn),根據(jù)各個(gè)參戰(zhàn)人物/寵物的下達(dá)的戰(zhàn)斗指令對(duì)應(yīng)的播放其行為的動(dòng)畫,不同的行為動(dòng)畫內(nèi)容不一樣;(8) 而在技能動(dòng)畫中,為了增加回合制戰(zhàn)斗的畫面感和可玩性,對(duì)不同的技能配置了不同的特效播放方式,讓特效動(dòng)畫更華麗更多元化,; 第5章 回合制戰(zhàn)斗系統(tǒng)實(shí)現(xiàn) 戰(zhàn)斗系統(tǒng)相關(guān)消息結(jié)構(gòu)體的定義結(jié)構(gòu)體消息是服務(wù)器與客戶端溝通的“共同語言”,結(jié)構(gòu)體消息在客戶端和服務(wù)器分別定義并且數(shù)據(jù)結(jié)構(gòu)是相同,發(fā)送方填寫結(jié)構(gòu)體數(shù)據(jù),接收方先獲取消息頭的消息類型ID和長(zhǎng)度,再判斷是哪種類型的消息并轉(zhuǎn)換成該類型結(jié)構(gòu)體,然后讀取內(nèi)容并進(jìn)行對(duì)應(yīng)的處理。以下是Unity客戶端(C)中定義的相關(guān)結(jié)構(gòu)體消息,服務(wù)器的定義與其一致,但由于服務(wù)器(C++)與客戶端(C)的編程語言不同所以定義語法有些許區(qū)別。 //戰(zhàn)斗初始化消息public struct MSG_BATTLE_INIT{public ushort nMsgID。 //消息類型IDpublic ushort nLen。 //結(jié)構(gòu)體長(zhǎng)度public uint nBattleID。 //戰(zhàn)局ID[MarshalAs(, SizeConst = 20)]public BATTLE_SPRITE_INIT[] battleSprites。//所有戰(zhàn)斗角色基本數(shù)據(jù)}。//戰(zhàn)斗角色(人物/寵物)基本數(shù)據(jù)消息public struct BATTLE_SPRITE_INIT{ public uint nID。 //玩家/寵物ID(客戶端用此值判斷是否有戰(zhàn)斗成員,可能還會(huì)用來標(biāo)識(shí)自身和自身寵物) [MarshalAs(, SizeConst = 22)] public byte[] strName。 //戰(zhàn)斗人物/寵物名字public uint nImageID。 //圖形及動(dòng)畫控制器IDpublic short nHpMax。 //最大HPpublic short nHp。 //當(dāng)前HPpublic short nMpMax。 //最大MPpublic short nMp。 //當(dāng)前MP }。//戰(zhàn)斗指令消息public struct MSG_BATTLE_COMMAND{public ushort nMsgID。 //消息類型IDpublic ushort nLen。 //結(jié)構(gòu)體長(zhǎng)度public ushort nActorType。 //行動(dòng)者類型(1=人物 2=寵物,由服務(wù)端賦值,客戶端不需要賦值)public ushort nActorIndex。 //行動(dòng)者索引(由服務(wù)端賦值,客戶端不需要賦值)public ushort nActionType。 //行動(dòng)的類型public ushort nTargetIndex。 //目標(biāo)索引public ushort nParam。 //參數(shù)(根據(jù)行動(dòng)類型而定,如使用技能則是技能ID,使用物品則是物品欄位置,切換戰(zhàn)寵則是寵物欄位置)}。//戰(zhàn)斗動(dòng)畫播放消息(客戶端收到此消息后開始播放戰(zhàn)斗動(dòng)畫)public struct MSG_BATTLE_ANIM_BEGIN{ public ushort nMsgID。 //消息類型ID public ushort nLen。 //結(jié)構(gòu)體長(zhǎng)度}。//戰(zhàn)斗動(dòng)畫消息public struct MSG_BATTLE_ANIM{ public ushort nMsgID。 //消息類型ID public ushort nLen。 //結(jié)構(gòu)體長(zhǎng)度 public ushort nActorIndex。 //行動(dòng)者索引 [MarshalAs(, SizeConst = 10)] public ushort[] nTargetIndex。 //目標(biāo)索引(初始值為0,0則無目標(biāo)) public ushort action_type。 //行動(dòng)類型 public ushort nParam。 //參數(shù)(根據(jù)行動(dòng)類型而定,如使用技能則是技能ID,使用物品則是物品欄位置) [MarshalAs(, SizeConst = 10)] public short[] nActorHp。 //行動(dòng)者Hp影響(<0:扣血,> 0:加血,0=無任何影響) [MarshalAs(, SizeConst = 10)] public short[] nActorMp。 //行動(dòng)者M(jìn)p影響 [MarshalAs(, SizeConst = 10)] public short[] nTargetHp。 //目標(biāo)Hp影響(<0:扣血,>0:加血,0=無任何影響) [MarshalAs(, SizeConst = 10)] public short[] nTargetMp。 //目標(biāo)Mp影響}。 服務(wù)器戰(zhàn)斗系統(tǒng)的實(shí)現(xiàn) 服務(wù)器戰(zhàn)斗系統(tǒng)相關(guān)結(jié)構(gòu)體圖51 服務(wù)器戰(zhàn)斗系統(tǒng)的相關(guān)結(jié)構(gòu)體的關(guān)系圖//戰(zhàn)局結(jié)構(gòu)體struct BATTLE{UINT nBattleID。 //戰(zhàn)局ID BATTLE_SPRITE battleSprites[20]。 //戰(zhàn)斗角色(人物/寵物)數(shù)組std::listUSHORT team1_survivors_index。 //隊(duì)伍1存活者索引liststd::listUSHORT team2_survivors_index。 //隊(duì)伍2存活者索引listUSHORT nSpriteTotal。 //參戰(zhàn)角色總數(shù)std::multimapfloat, MSG_BATTLE_COMMAND* m_CommandMap。//玩家戰(zhàn)斗指令字典,用于保存每回合接收的戰(zhàn)斗指令消息,Key為角色速度數(shù)值}說明:battleSprites數(shù)組的索引04位置分別為隊(duì)伍1人物隊(duì)伍1人物2……,索引59位置分別為隊(duì)伍1人物1的寵物、隊(duì)伍1人物2的寵物……,類似的,索引1014為隊(duì)伍2人物,索引1519為隊(duì)伍2寵物,人物索引+5即該人物的寵物的索引,根據(jù)人物索引即可獲得其寵物索引//戰(zhàn)斗角色(人物/寵物)struct BATTLE_SPRITE{BATTLE_SPRITE_DATA *pBattleData。 //戰(zhàn)斗數(shù)據(jù)(包含Hp、Mp、攻擊力等)CLIENT_DATA *pClient。 //客戶端數(shù)據(jù)(CLIENT_DATA包含客戶端IOCP完成鍵、套接字、玩家游戲數(shù)據(jù)等數(shù)據(jù),本文不闡述,請(qǐng)讀者根據(jù)自身游戲服務(wù)器架構(gòu)設(shè)計(jì))USHORT nType。 //角色類型,1=人,2=寵物USHORT bCommand。 //是否已經(jīng)下命令,0=沒下命令,1=已下命令}//戰(zhàn)斗數(shù)據(jù)(人物與寵物通用)struct BATTLE_SPRITE_DATA{ UINT nID。 //玩家/寵物ID char strName[22]。 //戰(zhàn)斗人物/寵物名字 UINT nImageID。 //圖形及動(dòng)畫控制器ID USHORT nLevel。 //等級(jí) short nHpMax。 //最大Hp short nHp。 //當(dāng)前Hp short nMpMax。 //最大Mp short nMp。 //當(dāng)前Mp short nAtk。 //物理攻擊力 short nDef。 //物理防御力 short nMat。 //魔法攻擊力 short nMdf。 //魔法防御力 short nSpd。 //速度 } 初始化一個(gè)戰(zhàn)局即初始化一個(gè)戰(zhàn)局BATTLE實(shí)例,并根據(jù)參戰(zhàn)玩家的數(shù)據(jù)對(duì)戰(zhàn)局所有成員進(jìn)行賦值,由于成員較多,并且游戲邏輯復(fù)雜,讀者可根據(jù)自身游戲邏輯賦值,此處初始化的方式不影響后續(xù)的實(shí)現(xiàn),所以這里不進(jìn)行詳細(xì)闡述,最后在客戶端數(shù)據(jù)存放指向戰(zhàn)局的指針,以便后面通過完成鍵以及客戶端數(shù)據(jù)能夠獲得戰(zhàn)局?jǐn)?shù)據(jù)。本文假設(shè)一個(gè)戰(zhàn)局最多能5位玩家對(duì)戰(zhàn)5位玩家,包括每位玩家可出戰(zhàn)的一個(gè)戰(zhàn)斗寵物,所以一個(gè)戰(zhàn)局最多能有20個(gè)戰(zhàn)斗角色,故battleSprites戰(zhàn)斗角色數(shù)組長(zhǎng)度為20,讀者可根據(jù)自身游戲邏輯進(jìn)行變更。另外,如果戰(zhàn)局不足20個(gè)戰(zhàn)斗角色,本文通過檢查battleSprites中的戰(zhàn)斗數(shù)據(jù)pBattleData是否為NULL進(jìn)行判斷并計(jì)數(shù),用成員nSpriteTotal保存戰(zhàn)斗角色總數(shù)。戰(zhàn)局初始時(shí)所有戰(zhàn)斗角色理應(yīng)是存活的,battleSprites中所有存在的戰(zhàn)斗角色的索引相應(yīng)的存放到隊(duì)伍1存活索引list或隊(duì)伍2存活索引list中,本文假設(shè)索引09為隊(duì)伍1(04隊(duì)伍1人物,59隊(duì)伍1寵物),1019為隊(duì)伍2(1014為隊(duì)伍2人物,1519為隊(duì)伍2寵物),并且人物和其寵物的索引相差5(即0索引上的人物其寵物索引為5,如此類推)。 接收客戶端的戰(zhàn)斗指令消息圖52 接收戰(zhàn)斗指令消息流程圖收到客戶端發(fā)來的消息后,通過消息頭和消息類型ID(可用宏定義或定義枚舉類型)的判斷,確定是否為戰(zhàn)斗指令消息后,然后處理戰(zhàn)斗指令消息。本文實(shí)踐項(xiàng)目從IOCP完成鍵可以獲取玩家數(shù)據(jù)進(jìn)而獲取玩家所在的戰(zhàn)局指針(BATTLE*)。收到戰(zhàn)斗指令消息后,通過消息中的行動(dòng)者索引nActorIndex從戰(zhàn)局的戰(zhàn)斗角色battleSprites數(shù)組中獲取該角色,根據(jù)該角色的“速度”數(shù)值和戰(zhàn)斗指令消息一并加入到戰(zhàn)斗指令字典m_CommandMap中,以便之后遍歷逐個(gè)處理。檢測(cè)m_CommandMap的元素個(gè)數(shù)是否等于戰(zhàn)斗角色總數(shù)(即檢測(cè)是否所有戰(zhàn)斗角色都已下達(dá)戰(zhàn)
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1