手機(jī)編寫網(wǎng)游《瘋狂的炸彈》
手機(jī)編寫網(wǎng)游之《瘋狂的炸彈》
(2019-12-03)河南鄭州科技市場(chǎng)IT產(chǎn)品配送網(wǎng)-鄭州電腦手機(jī)測(cè)評(píng)中心
開發(fā)平臺(tái):Java平臺(tái)
PC上程序的服務(wù)器端開發(fā),對(duì)安全性和響應(yīng)時(shí)間等要求都比較苛刻,要求數(shù)據(jù)傳輸處理快、存儲(chǔ)安全,響應(yīng)時(shí)間短。不過手機(jī)程序的網(wǎng)絡(luò)傳輸速度相對(duì)PC要慢不少,所以手機(jī)網(wǎng)游的服務(wù)器端要求相對(duì)較低不高,開發(fā)也更容易。在一般的服務(wù)器端程序中,服務(wù)器端程序主要包含數(shù)據(jù)存儲(chǔ)、程序邏輯控制和網(wǎng)絡(luò)編程等部分,數(shù)據(jù)存儲(chǔ)和程序邏輯控制結(jié)合的比較緊密,可以統(tǒng)稱為數(shù)據(jù)處理。為了方便網(wǎng)絡(luò)數(shù)據(jù)的傳輸和整個(gè)程序的維護(hù),程序的服務(wù)器端最好跟客戶端的開發(fā)語言一致。
服務(wù)器端數(shù)據(jù)處理設(shè)計(jì)思路:
當(dāng)客戶端第一次連接服務(wù)器端時(shí),服務(wù)器端分配一個(gè)唯一的用戶ID給客戶端,在客戶端獲得該用戶ID以后,每隔一定時(shí)間向服務(wù)器端查詢,看服務(wù)器端是否有匹配的用戶可以進(jìn)行對(duì)戰(zhàn)。如果沒有則向客戶端反饋繼續(xù)等待的指令,如果有匹配的用戶則為這兩個(gè)客戶端分配房間ID,并生成地圖數(shù)據(jù)信息,開始游戲?qū)?zhàn)。進(jìn)入游戲界面以后每隔一定時(shí)間獲得一次地圖數(shù)據(jù),當(dāng)用戶移動(dòng)角色時(shí)向服務(wù)器端發(fā)送移動(dòng)指令,服務(wù)器端根據(jù)客戶端的移動(dòng)請(qǐng)求進(jìn)行邏輯處理并對(duì)應(yīng)的修改地圖數(shù)據(jù)。
當(dāng)客戶端連接到服務(wù)器端時(shí),服務(wù)器端進(jìn)行邏輯處理,分配一個(gè)唯一的用戶ID給客戶端。在獲得房間ID時(shí)實(shí)現(xiàn)的思路和用戶ID實(shí)現(xiàn)一樣,而對(duì)于游戲界面的地圖數(shù)據(jù),包括各個(gè)地圖塊的數(shù)據(jù)和玩家位置、方向等信息,則使用Java中一個(gè)自定義類進(jìn)行代表,每個(gè)房間的數(shù)據(jù)就是該類的一個(gè)對(duì)象。
在《瘋狂的炸彈》游戲中,要處理的數(shù)據(jù)主要有三種:用戶ID分配邏輯、玩家分配邏輯和玩家移動(dòng)控制邏輯。用戶ID分配邏輯是為玩家分配唯一的編號(hào),比較簡(jiǎn)單;玩家分配邏輯是將處于等待狀態(tài)的兩個(gè)客戶端分配到一個(gè)房間,并初始化游戲數(shù)據(jù)的邏輯;玩家移動(dòng)控制邏輯是判斷玩家是否可以實(shí)現(xiàn)移動(dòng),并修正移動(dòng)以后的游戲數(shù)據(jù),比較復(fù)雜。
玩家移動(dòng)控制邏輯的原理如下所示:在游戲界面中,依次存儲(chǔ)每個(gè)單元格中顯示的圖片序號(hào),玩家也按照行號(hào)和列號(hào)來存儲(chǔ)位置,整個(gè)界面是一個(gè)11行10列的區(qū)域,所以在移動(dòng)是按照單元格判斷移動(dòng)即可。在移動(dòng)時(shí),先判斷當(dāng)前用戶ID是對(duì)戰(zhàn)玩家中的用戶1還是用戶2,然后判斷以后的單元格是否超出地圖區(qū)域,如果沒有超出地圖區(qū)域則按照移動(dòng)方向,修改玩家的行號(hào)和列號(hào)。
第一步:創(chuàng)建項(xiàng)目
啟動(dòng)Eclipse,選擇“File→New→Java Project”,設(shè)置項(xiàng)目名稱為“BomberServer”,并一路選擇“Next”, 完成項(xiàng)目的建立。然后新建一個(gè)入口類,選擇“File→New→Class”,設(shè)置名稱為“Server”,點(diǎn)擊“Finish”。
第二步:創(chuàng)建游戲數(shù)據(jù)類
選擇“File→New→Class”,設(shè)置名稱為“GameData”,點(diǎn)擊“Finish”完成游戲數(shù)據(jù)類的創(chuàng)建。然后輸入該類的代碼,其中關(guān)鍵碼如下所示/* 界面相關(guān)數(shù)據(jù) */
/** 盒子層地圖數(shù)據(jù) */
byte[][] boxMap = new byte[ROWS][COLS];
/** 樹木層地圖數(shù)據(jù) */
byte[][] treeMap = new byte[ROWS][COLS];
/** 房子層地圖數(shù)據(jù) */
byte[][] houseMap = new byte[ROWS][COLS];
/** 草叢層地圖數(shù)據(jù) */
byte[][] brushwoodMap = new byte[ROWS][COLS];
/** 炸彈層地圖數(shù)據(jù) */
byte[][] bombMap = new byte[ROWS][COLS];
第三步:數(shù)據(jù)處理
選擇“File→New→Class”,設(shè)置名稱為“LogicEngine”,點(diǎn)擊“Finish”完成數(shù)據(jù)處理類的創(chuàng)建,該類包含所有游戲數(shù)據(jù)和數(shù)據(jù)處理的代碼,關(guān)鍵碼如下所示 if(userID == userID1){ //用戶1
c = playerC1;
r = playerR1;
playerDire1 = dire; //改變?nèi)宋锓较?/p>
}else{ //用戶2
c = playerC2;
r = playerR2;
playerDire2 = dire; //改變?nèi)宋锓较?/p>
}
//邊界檢測(cè)
if(isInMap(c,r,dire)){
switch(dire){ //根據(jù)方向移動(dòng)
case DIRE_UP:
r--;
break;
case DIRE_DOWN:
r++;
break;
case DIRE_LEFT:
c--;
break;
case DIRE_RIGHT:
c++;
break;
}
//移動(dòng)到的單元格無內(nèi)容
if(isSpace(userID,r,c)){
movePlayer(userID,dire);
}else{ //不能移動(dòng)
//推箱子的情形
pushBox(userID,c,r,dire);
第四步:運(yùn)行程序
在Eclipse主界面左側(cè)的“Package Explorer”中,選中項(xiàng)目源代碼Server.java,單擊鼠標(biāo)右鍵,選擇“Run As→Java Application”即可運(yùn)行程序。
河南鄭州科技市場(chǎng)IT產(chǎn)品配送網(wǎng)----------DIY游戲電腦、辦公電腦聯(lián)系電話:17739760690(同微信)
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由http://www.qyfce.cn發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。


