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