PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(十)
十三、 建造總覽(buildings.php)
從這篇文章開始,對xnova的研究重點放在流程上面,其實就是大量的函數(shù);至于頁面的構造將不再仔細解釋。
buildings.php文件不只是處理建筑金屬礦產(chǎn)等,而是包括了建筑、研究、造船廠、防御四個功能;通過傳遞不同的參數(shù)來決定進入哪個功能,所以這個文件其實是一個導航文件。下面我們簡單解釋下這個文件。
//更新當前星球的建筑隊列,比較復雜
UpdatePlanetBatimentQueueList ( $planetrow, $user );
//處理當前用戶的科技研究
HandleTechnologieBuild ( $planetrow, $user );
//下面是根據(jù)參數(shù)進入不同的功能頁面
//造船廠頁面
case 'fleet':
FleetBuildingPage ( $planetrow, $user );
//研究頁面
case 'research':
ResearchBuildingPage ( $planetrow, $user, $IsWorking['OnWork'], $IsWorking['WorkOn'] );
//防御頁面
case 'defense':
DefensesBuildingPage ( $planetrow, $user );
//剩下的自然是建筑頁面
default:
BatimentBuildingPage ( $planetrow, $user );
下面我們看更新當前星球的建筑隊列函數(shù)
function UpdatePlanetBatimentQueueList ( &$CurrentPlanet, &$CurrentUser ) {
$RetValue = false;
//判斷是否有建筑隊列,字段b_building_id保存建筑隊列
if ( $CurrentPlanet['b_building_id'] != 0 ) {
//進入循環(huán),開始處理隊列
while ( $CurrentPlanet['b_building_id'] != 0 ) {
//如果當前建造的建筑時間小于time的話,就處理,字段b_building保存建筑到期的時間
if ( $CurrentPlanet['b_building'] <= time() ) {
//先更新下星球的資源,以后再解析
PlanetResourceUpdate ( $CurrentUser, $CurrentPlanet, $CurrentPlanet['b_building'], false );
//處理掉當前的建筑,并把當前建筑字段清空;代碼很多,其實比較簡單
$IsDone = CheckPlanetBuildingQueue( $CurrentPlanet, $CurrentUser );
//如果前面處理成功,這里就要處理隊列中的下一個建筑,包括扣除資源
if ( $IsDone == true ) {
SetNextQueueElementOnTop ( $CurrentPlanet, $CurrentUser );
}
} else {
$RetValue = true;
break;
}
}
}
return $RetValue;
}
我們繼續(xù)下去,跟蹤入CheckPlanetBuildingQueue函數(shù),這個函數(shù)代碼挺多,其實簡單;我不寫注釋了,說下流程。先從字段b_building_id解析出來建筑的種類、建筑或拆除、結束建筑的時間等;然后更新該建筑的等級,升級或者降級;更新星球的最大空間和使用空間;更新當前建筑的時間為0和更新當前的剩余建筑隊列。不難吧,呵呵。
接下來處理隊列中的下一個建筑,跟蹤SetNextQueueElementOnTop函數(shù),也不難。先從隊列中解析出建筑數(shù)據(jù);然后判斷是否可以建造,如果可以就要計算建造資源等;如果不行就發(fā)送消息等;最后更新建筑完成的時間、剩余建筑隊列和資源等。和上面的流程一樣簡單,拿下。
- PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(十五)
- PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(十四)
- PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(十三)
- PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(十二)
- PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(十一)
- PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(九)
- PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(八)
- PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(一)
- PHP網(wǎng)頁游戲?qū)W習之Xnova(ogame)源碼解讀(十六)
相關文章
Laravel事件系統(tǒng)實現(xiàn)瀏覽量的統(tǒng)計
Laravel的事件系統(tǒng)提供了一種簡單而強大的方式來實現(xiàn)瀏覽量的統(tǒng)計,通過創(chuàng)建瀏覽事件和事件監(jiān)聽器,以及在合適的地方觸發(fā)事件,我們可以輕松地實現(xiàn)網(wǎng)頁瀏覽量的統(tǒng)計功能,本文將介紹如何使用Laravel的事件系統(tǒng)來實現(xiàn)瀏覽量的統(tǒng)計2024-03-03
php大小寫轉換函數(shù)(strtolower、strtoupper)用法介紹
strtoupper() 函數(shù)把字符串轉換為大寫而strtolower函數(shù): 該函數(shù)將傳入的字符串參數(shù)所有的字符都轉換成小寫,并以小定形式放回這個字符串。下面通過本文給大家分享php大小寫轉換函數(shù)(strtolower、strtoupper)用法,需要的朋友參考下吧2017-11-11
詳解thinkphp+redis+隊列的實現(xiàn)代碼
本篇文章主要介紹了thinkphp+redis+隊列的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
php 微信公眾平臺開發(fā)模式實現(xiàn)多客服的實例代碼
這篇文章主要介紹了php 微信公眾平臺開發(fā)模式實現(xiàn)多客服的實例代碼的相關資料,需要的朋友可以參考下2016-11-11

