PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十)
十三、 建造總覽(buildings.php)
從這篇文章開始,對(duì)xnova的研究重點(diǎn)放在流程上面,其實(shí)就是大量的函數(shù);至于頁(yè)面的構(gòu)造將不再仔細(xì)解釋。
buildings.php文件不只是處理建筑金屬礦產(chǎn)等,而是包括了建筑、研究、造船廠、防御四個(gè)功能;通過傳遞不同的參數(shù)來決定進(jìn)入哪個(gè)功能,所以這個(gè)文件其實(shí)是一個(gè)導(dǎo)航文件。下面我們簡(jiǎn)單解釋下這個(gè)文件。
//更新當(dāng)前星球的建筑隊(duì)列,比較復(fù)雜 UpdatePlanetBatimentQueueList ( $planetrow, $user ); //處理當(dāng)前用戶的科技研究 HandleTechnologieBuild ( $planetrow, $user ); //下面是根據(jù)參數(shù)進(jìn)入不同的功能頁(yè)面 //造船廠頁(yè)面 case 'fleet': FleetBuildingPage ( $planetrow, $user ); //研究頁(yè)面 case 'research': ResearchBuildingPage ( $planetrow, $user, $IsWorking['OnWork'], $IsWorking['WorkOn'] ); //防御頁(yè)面 case 'defense': DefensesBuildingPage ( $planetrow, $user ); //剩下的自然是建筑頁(yè)面 default: BatimentBuildingPage ( $planetrow, $user ); 下面我們看更新當(dāng)前星球的建筑隊(duì)列函數(shù) function UpdatePlanetBatimentQueueList ( &$CurrentPlanet, &$CurrentUser ) { $RetValue = false; //判斷是否有建筑隊(duì)列,字段b_building_id保存建筑隊(duì)列 if ( $CurrentPlanet['b_building_id'] != 0 ) { //進(jìn)入循環(huán),開始處理隊(duì)列 while ( $CurrentPlanet['b_building_id'] != 0 ) { //如果當(dāng)前建造的建筑時(shí)間小于time的話,就處理,字段b_building保存建筑到期的時(shí)間 if ( $CurrentPlanet['b_building'] <= time() ) { //先更新下星球的資源,以后再解析 PlanetResourceUpdate ( $CurrentUser, $CurrentPlanet, $CurrentPlanet['b_building'], false ); //處理掉當(dāng)前的建筑,并把當(dāng)前建筑字段清空;代碼很多,其實(shí)比較簡(jiǎn)單 $IsDone = CheckPlanetBuildingQueue( $CurrentPlanet, $CurrentUser ); //如果前面處理成功,這里就要處理隊(duì)列中的下一個(gè)建筑,包括扣除資源 if ( $IsDone == true ) { SetNextQueueElementOnTop ( $CurrentPlanet, $CurrentUser ); } } else { $RetValue = true; break; } } } return $RetValue; }
我們繼續(xù)下去,跟蹤入CheckPlanetBuildingQueue函數(shù),這個(gè)函數(shù)代碼挺多,其實(shí)簡(jiǎn)單;我不寫注釋了,說下流程。先從字段b_building_id解析出來建筑的種類、建筑或拆除、結(jié)束建筑的時(shí)間等;然后更新該建筑的等級(jí),升級(jí)或者降級(jí);更新星球的最大空間和使用空間;更新當(dāng)前建筑的時(shí)間為0和更新當(dāng)前的剩余建筑隊(duì)列。不難吧,呵呵。
接下來處理隊(duì)列中的下一個(gè)建筑,跟蹤SetNextQueueElementOnTop函數(shù),也不難。先從隊(duì)列中解析出建筑數(shù)據(jù);然后判斷是否可以建造,如果可以就要計(jì)算建造資源等;如果不行就發(fā)送消息等;最后更新建筑完成的時(shí)間、剩余建筑隊(duì)列和資源等。和上面的流程一樣簡(jiǎn)單,拿下。
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十五)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十四)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十三)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十二)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十一)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(九)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(八)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(一)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十六)
相關(guān)文章
ThinkPHP 連接Oracle數(shù)據(jù)庫(kù)的詳細(xì)教程[全]
最近收集了一些關(guān)于THinkPHP連接Oracle數(shù)據(jù)庫(kù)的問題,有很多朋友按照連接mysql的方法來操作,導(dǎo)致有一些方法在Oreale中無法正常使用2012-07-07php封裝實(shí)現(xiàn)釘釘機(jī)器人報(bào)警接口的示例代碼
這篇文章主要介紹了php封裝實(shí)現(xiàn)釘釘機(jī)器人報(bào)警接口的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08yii2 開發(fā)api接口時(shí)優(yōu)雅的處理全局異常的方法
這篇文章主要介紹了yii2 開發(fā)api接口時(shí)優(yōu)雅的處理全局異常的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05JieqiCMS 杰奇1.5注冊(cè)機(jī)php源碼
杰奇1.5注冊(cè)機(jī)php源碼,大家可以看下代碼。2009-08-08PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(三)
這篇文章主要介紹了PHP網(wǎng)頁(yè)游戲Xnova(ogame)源碼解讀的用戶注冊(cè)頁(yè)面,需要的朋友可以參考下2014-06-06