本發(fā)明涉及一種游戲引擎,尤其是涉及一種基于unity 3D引擎的跳棋信息處理器系統(tǒng)。
背景技術(shù):
3D游戲是使用空間立體計算技術(shù)實現(xiàn)操作的游戲。從編程實現(xiàn)角度來說游戲基礎(chǔ)模型(游戲的人物,場景,基礎(chǔ)地形)是使用三維立體模型實現(xiàn)的。它是相對于二維游戲(2D游戲又稱平面游戲)而言的,因其采用了立體空間坐標(biāo)的概念,所以更顯真實,而且對空間操作的隨意性也較強。也更容易吸引人。
網(wǎng)絡(luò)技術(shù)通過將互聯(lián)網(wǎng)上分散的資源融為有機整體,實現(xiàn)資源的全面共享與有效協(xié)作。將網(wǎng)絡(luò)技術(shù)應(yīng)用于游戲領(lǐng)域,提高了游戲的現(xiàn)實感,使游戲本身成為一個全民娛樂的虛擬社區(qū)。
3D技術(shù)與網(wǎng)絡(luò)技術(shù)的日益發(fā)展,為傳統(tǒng)游戲的發(fā)展打開了一道新的大門。由于玩法單一、游戲性不高的桎梏,許多傳統(tǒng)游戲被弱化。我們的工作就是基于3D引擎和網(wǎng)絡(luò)平臺,豐富傳統(tǒng)游戲的游戲內(nèi)容,以達到使其更加吸引人的預(yù)期效果。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種基于unity3D引擎的跳棋信息處理器系統(tǒng)。
本發(fā)明的目的可以通過以下技術(shù)方案來實現(xiàn):
一種基于unity 3D引擎的跳棋信息處理器系統(tǒng),包括:
全局主控模塊,與unity 3D引擎連接,用于向用戶展示棋盤和棋子;
棋子信息模塊,與全局主控模塊連接,用于保存棋子信息;
AI決策模塊,與棋子信息模塊和全局主控模塊連接,用于根據(jù)棋子分布生成AI棋子的走步;
網(wǎng)絡(luò)連接模塊,與全局主控模塊連接,用于對外通信,傳輸棋子信息以實現(xiàn)用戶對戰(zhàn)。
所述棋子信息模塊包括用于保存棋子位置的位置保存單元和用于存儲棋子屬性的中樞單元,所述位置保存單元和中樞單元連接,所述中樞單元還與AI決策模塊連接。
所述AI決策模塊的決策過程包括步驟:
S1:計算所有棋子的最優(yōu)走步;
S2:從所有棋子中選出最優(yōu)棋子進行走步。
所述步驟S1中對于任一棋子最優(yōu)走步的計算過程具體包括步驟:
S11:判斷尚未進入目的區(qū)域的棋子是否大于2,若為是,則執(zhí)行步驟S12,若為否,則執(zhí)行步驟S15:
S12:載入該棋子每種走法走步后距離目的區(qū)域的距離和偏離行進方向的距離,其中,所述行進方向為從棋子初始區(qū)域指向目的區(qū)域的方向;
S13;計算每種走法的走法權(quán)重w1:
w1=a·dis+bias/b
其中:dis為走步后棋子距離目的區(qū)域的距離,bias為棋子走步后偏離行進方向的距離,a,b為大于0的常數(shù)且;
S14:挑選出權(quán)重最大的走法作為該棋子的最優(yōu)走步;
S15:在預(yù)設(shè)棋譜列表中搜索對應(yīng)的最優(yōu)走步。
所述步驟S2具體包括步驟:
S21:判斷尚未進入目的區(qū)域的棋子是否大于2,如為是,則執(zhí)行步驟S22,若為否,則執(zhí)行步驟S24;
S22:根據(jù)棋子所處位置生成位置權(quán)重w2,其中棋子位置距離目的區(qū)域越遠,位置權(quán)重w2越大;
S23:合成w1和w2得到棋子權(quán)重,并選取棋子權(quán)重最大的棋子作為最優(yōu)棋子進行走步;
S24:在預(yù)設(shè)棋譜列表中搜索對應(yīng)的最優(yōu)棋子。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點:
1)可以同時實現(xiàn)AI對戰(zhàn)和玩家對戰(zhàn)。
2)基于走法權(quán)重得到棋子的最優(yōu)走步可以提高前期的處理效率,并且在棋盤到達中后期時采用棋譜搜索的方式可以避免后期AI走蠢棋。
3)在挑選最優(yōu)棋子時,融入了棋子位置的因素,可以避免因末端棋子被忽略而造成的失誤。
附圖說明
圖1為本發(fā)明的結(jié)構(gòu)示意圖;
其中:1、全局主控模塊,2、棋子信息模塊,3、AI決策模塊,4、網(wǎng)絡(luò)連接模塊。
具體實施方式
下面結(jié)合附圖和具體實施例對本發(fā)明進行詳細說明。本實施例以本發(fā)明技術(shù)方案為前提進行實施,給出了詳細的實施方式和具體的操作過程,但本發(fā)明的保護范圍不限于下述的實施例。
一種基于unity 3D引擎的跳棋信息處理器系統(tǒng),如圖1所示,包括:
全局主控模塊1(即GameManager),與unity 3D引擎連接,用于向用戶展示棋盤和棋子;
棋子信息模塊2,與全局主控模塊1連接,用于保存棋子信息;
AI決策模塊3(即AI層),與棋子信息模塊2和全局主控模塊1連接,用于根據(jù)棋子分布生成AI棋子的走步;
網(wǎng)絡(luò)連接模塊4(即Network),與全局主控模塊1連接,用于對外通信,傳輸棋子信息以實現(xiàn)用戶對戰(zhàn)。
棋子信息模塊2包括用于保存棋子位置的位置保存單元(即HoodleMove)和用于存儲棋子屬性的中樞單元(即Board),位置保存單元和中樞單元連接,中樞單元還與AI決策模塊3連接。
其中,GameManager為全局主控模塊,是信息發(fā)送和接收的最重要的站點,也是物體層和代碼層的連接紐帶。在GameManager模塊中,unity引擎中創(chuàng)建的物體通過GetGameObject語句與代碼層互連。用戶在游戲中出現(xiàn)的移動、點擊等動作,都是通過GameManager將信息的變動傳送至各個分支模塊的。而各個分支模塊確認(rèn)相應(yīng)的操作后,最終也是在GameManager上完成操作的。
Board為代碼層游戲的中樞模塊,存放著關(guān)于棋盤上棋子信息的所有屬性,如各個棋子的坐標(biāo)、當(dāng)前玩家等等。Board與其它各個分支層次交互十分頻繁,因為幾乎任何一項操作都必須從棋盤上讀出相應(yīng)的信息。同時,Board也將GameManager中的實物抽象化,轉(zhuǎn)變?yōu)橐子谶M行編程的信息。如某個棋子,在Board中即是以一個特定的編號而出現(xiàn)的。
AI層是AI的主控模塊,用于引導(dǎo)AI完成相應(yīng)的動作。當(dāng)輪到某個AI玩家時,GameManager會先將程序的控制權(quán)移交至AI,AI向Board發(fā)送一個請求,Board根據(jù)棋盤上現(xiàn)有的信息和設(shè)計好的AI算法,給出AI的移動特征,并返回給AI模塊。AI模塊獲得移動特征好,將控制權(quán)還給GameManager,由GameManager進行移動。
Network是網(wǎng)絡(luò)層的主要模塊。
HoodleMove保存棋子的信息,Board中會同時保存實際棋子(HoodleMove)與虛擬棋子(棋子的編號)。這兩者在Board中進行統(tǒng)一。
AI決策模塊3的決策過程包括步驟:
S1:計算所有棋子的最優(yōu)走步,其中對于任一棋子最優(yōu)走步的計算過程具體包括步驟:
S11:判斷尚未進入目的區(qū)域的棋子是否大于2,若為是,則執(zhí)行步驟S12,若為否,則執(zhí)行步驟S15:
S12:載入該棋子每種走法走步后距離目的區(qū)域的距離和偏離行進方向的距離,其中,行進方向為從棋子初始區(qū)域指向目的區(qū)域的方向;
S13;計算每種走法的走法權(quán)重w1:
w1=a·dis+bias/b
其中:dis為走步后棋子距離目的區(qū)域的距離,bias為棋子走步后偏離行進方向的距離,a,b為大于0的常數(shù)且;
S14:挑選出權(quán)重最大的走法作為該棋子的最優(yōu)走步;
S15:在預(yù)設(shè)棋譜列表中搜索對應(yīng)的最優(yōu)走步。例如,兩種情況(因為有兩個棋子和兩個剩余位置)選一最優(yōu)解;對于已經(jīng)進入目的地的棋子,如果棋子位于目的地的內(nèi)層(最后一層和倒數(shù)第二層,共是三個位置),則不移動該棋子;如果棋子位于目的地外層(倒數(shù)第三層和倒數(shù)第四層,共7個位置)且可以一步到達內(nèi)層,則將該走法作為該棋子的最優(yōu)解。
S2:從所有棋子中選出最優(yōu)棋子進行走步,具體包括步驟:
S21:判斷尚未進入目的區(qū)域的棋子是否大于2,如為是,則執(zhí)行步驟S22,若為否,則執(zhí)行步驟S24;
S22:根據(jù)棋子所處位置生成位置權(quán)重w2,其中棋子位置距離目的區(qū)域越遠,位置權(quán)重w2越大;
S23:合成w1和w2得到棋子權(quán)重w(該過程可以是將w1和w2相加得到w),并選取棋子權(quán)重最大的棋子作為最優(yōu)棋子進行走步;
S24:在預(yù)設(shè)棋譜列表中搜索對應(yīng)的最優(yōu)棋子,例如,該模型的選子過程分為兩步,第一是預(yù)處理過程,已經(jīng)在營地內(nèi)的棋子必須滿足靠后的三個位置占滿,才能保證還未進營的棋子能正常跳入目的地。因此,先挪動已經(jīng)進入目的地的棋子,直到最深的三個位置被填充。
網(wǎng)絡(luò)模塊是基于Photon Networking實現(xiàn)的。Photon Networking是通過Photon Cloud進行Unity多玩家游戲開發(fā)的一個庫,為網(wǎng)絡(luò)游戲提供可靠的信息交流。其服務(wù)器遍及全球,比官方的Unity Networking網(wǎng)絡(luò)引擎覆蓋率更高。二者的一個關(guān)鍵區(qū)別在于,Unity Networking把其中一個客戶設(shè)置成服務(wù)器,而Photon Network使用專用的服務(wù)器,從而防止一名玩家退出導(dǎo)致其他玩家全部掉線的情況。
一、加入游戲
在Unity工程中嵌入Photon Networking提供的密鑰之后,從該工程建立的應(yīng)用程序都可以進入到同一個游戲大廳(Lobby)。通過密鑰可以保證與其他游戲互不干擾,并且同一個游戲的所有玩家都有交互的機會,就像擁有了一個該游戲?qū)S玫姆?wù)器一樣。
二、進出房間
進入大廳之后我們?yōu)橥婕绎@示房間列表,包括房間的名稱以及每個房間的屬性(玩家人數(shù)、游戲模式等等)。玩家可以自己選擇加入某個房間,或者創(chuàng)建一個新的房間。
創(chuàng)建房間的同時玩家可以選擇房間人數(shù)和游戲模式。進入房間以后,通過PhotonNetwork.room可以獲取或設(shè)置房間的各種屬性,包括當(dāng)前房間內(nèi)的人數(shù),控制房間的開關(guān)等等。
Photon Network提供了一系列的借口函數(shù)用來進出房間、響應(yīng)進入大廳、進入房間等事件。在第一個玩家創(chuàng)建并進入房間之后,需要馬上設(shè)置房間的最大人數(shù),與玩家的選擇相匹配。這時就可以在OnJoinedRoom()這個函數(shù)里面進行設(shè)置,該函數(shù)在進入房間時立即調(diào)用。進入一個房間后,玩家可以通過按鈕選擇離開,這時只要調(diào)用LeaveRoom()即可。這些接口在繼承了Photon.PunBehaviour的類當(dāng)中都可以得到。使用Photon Network時必須要定義這樣一個類的腳本,并把他放到任意一個物體上。在我們的項目中創(chuàng)建了一個RadomMatchmaker.cs腳本,并把他附在一個名為NetworkManger的空物體上。
三、玩家交互與同步
實現(xiàn)玩家的交互與同步是最重要的一個環(huán)節(jié)。由于棋子數(shù)目較多,動作頻率高,以及游戲中的一些隨機事件,讓同步變得困難。我們想了很多辦法才解決了這個問題。
首先,要通過Photon Networking同步信息必須有一個配置了Photon Network View游戲模塊的物體。該物體需要在運行時實例化。在我們的游戲中,創(chuàng)建了一個名為port的預(yù)制件(prefab),并給他配備上Photon Network View。
每個玩家還有一個Photon Stream,Photon Network View會觀察一個物體某些屬性的變化,并實時把這些變化寫到Photon Stream上,其他玩家從自己的Photon Stream上可以接受到這些信息,從而做出各種反應(yīng)。