• 技术文章 >后端开发 >php教程

    PHP网页游戏学习之Xnova(ogame)源码解读(十)_php实例

    2016-05-17 08:40:58原创344
    十三、 建造总览(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解析出来建筑的种类、建筑或拆除、结束建筑的时间等;然后更新该建筑的等级,升级或者降级;更新星球的最大空间和使用空间;更新当前建筑的时间为0和更新当前的剩余建筑队列。不难吧,呵呵。

    接下来处理队列中的下一个建筑,跟踪SetNextQueueElementOnTop函数,也不难。先从队列中解析出建筑数据;然后判断是否可以建造,如果可以就要计算建造资源等;如果不行就发送消息等;最后更新建筑完成的时间、剩余建筑队列和资源等。和上面的流程一样简单,拿下。

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:PHP延迟静态绑定示例分享_php技巧 下一篇:美图秀秀web开放平台--PHP流式上传和表单上传示例分享_php实例
    大前端线上培训班

    相关文章推荐

    • PHP中怎样完成Cookie的创建、读取和删除?• PHP中怎样完成Session的设置、获取和删除?• 带你分清类中的构造函数与析构函数• PHP中的命名空间定义与使用(实例详解)• PHP中clone关键字和__clone()方法的使用(实例详解)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网