源码解读

十九、 建造总览(buildings.php)

从那篇小说早先,对xnova的商量主要放在流程方面,其实正是大方的函数;至于页面的构造将不再留神解释。

buildings.php文件不止是管理建筑五金矿产等,而是包含了建筑、探讨、浮船坞、防卫两个效果与利益;通过传递分化的参数来调节走入哪个意义,所以这几个文件其实是三个导航文件。上面我们差十分少解释下这么些文件。

//更新当前星球的建筑队列,比较复杂
UpdatePlanetBatimentQueueList ( $planetrow, $user );
//处理当前用户的科技研究
HandleTechnologieBuild ( $planetrow, $user );
//下面是根据参数进入不同的功能页面
//造船厂页面
case 'fleet':
FleetBuildingPage ( $planetrow, $user );
//研究页面
case 'research':
ResearchBuildingPage ( $planetrow, $user, $IsWorking['OnWork'], $IsWorking['WorkOn'] );
//防御页面
case 'defense':
DefensesBuildingPage ( $planetrow, $user );
//剩下的自然是建筑页面
default:
BatimentBuildingPage ( $planetrow, $user ); 
下面我们看更新当前星球的建筑队列函数
function UpdatePlanetBatimentQueueList ( &$CurrentPlanet, &$CurrentUser ) {
 $RetValue = false;
 //判断是否有建筑队列,字段b_building_id保存建筑队列
 if ( $CurrentPlanet['b_building_id'] != 0 ) {
 //进入循环,开始处理队列
 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;
} 

我们继续下去,跟踪入CheckPlanetBuildingQueue函数,那几个函数代码挺多,其实轻松;作者不写注释了,说下流程。先从字段b_building_id剖判出来建筑的花色、建筑或拆除与搬迁、截至建筑的光阴等;然后更新该建筑的阶段,晋级也许降级;更新星球的最大空间和应用空间;更新当前建造的年三星(SamsungState of Qatar0和立异当前的剩余建筑队列。简单吧,呵呵。

接下去管理队列中的下三个构筑,追踪SetNextQueueElementOnTop函数,也一呼百诺。先从队列中深入分析出建筑数据;然后判断是或不是可以建造,如果能够将在总计建造能源等;假若不行就发送新闻等;最后更新建筑成就的年月、剩余建筑队列和能源等。和方面包车型大巴流程相近简单,拿下。

网站地图xml地图