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

 更新时间:2014年06月24日 08:55:16   作者:铁船长  
这篇文章主要介绍了PHP网页游戏Xnova(ogame)源码解读的建造总览部分,需要的朋友可以参考下

十三、 建造总览(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嵌套输出缓冲代码实例

    PHP嵌套输出缓冲代码实例

    这篇文章主要介绍了PHP嵌套输出缓冲代码实例,本文讲解嵌套使用ob系列函数的实例,需要的朋友可以参考下
    2015-05-05
  • PHP实现的网站目录扫描索引工具

    PHP实现的网站目录扫描索引工具

    本文给大家分享的是一个基于PHP实现的网站目录扫描索引工具的源码,非常的简单实用,有需要的小伙伴可以参考下
    2016-09-09
  • php生成静态页面的简单示例

    php生成静态页面的简单示例

    这篇文章主要介绍了php生成静态页面的简单示例,需要的朋友可以参考下
    2014-04-04
  • docker-compose部署php项目实例详解

    docker-compose部署php项目实例详解

    在本篇文章里小编给大家整理了关于docker-compose部署php项目的相关实例以及代码内容,有需要的朋友们可以学习参考下。
    2019-07-07
  • php高清晰度无损图片压缩功能的实现代码

    php高清晰度无损图片压缩功能的实现代码

     经常会用到把上传的大图片压缩,特别是体积,在微信等APP应用上,也默认都是有压缩的,那么,怎么样对图片大幅度压缩却仍能保持较高的清晰度呢?接下来通过本文给大家分享php高清晰度无损图片压缩功能,感兴趣的朋友一起看看吧
    2018-12-12
  • Zend的MVC机制使用分析(二)

    Zend的MVC机制使用分析(二)

    本篇文章介绍了,Zend的MVC机制使用分析,需要的朋友参考下
    2013-05-05
  • 记录mysql性能查询过程的使用方法

    记录mysql性能查询过程的使用方法

    本篇文章介绍了,记录mysql性能查询过程的使用方法。需要的朋友参考下
    2013-05-05
  • PHP环境中Memcache的安装和使用

    PHP环境中Memcache的安装和使用

    本文给大家介绍php环境中memcache的安装和使用,它可以应用任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable,感兴趣的朋友一起学习吧
    2015-11-11
  • PHP 构造函数和析构函数原理与用法分析

    PHP 构造函数和析构函数原理与用法分析

    这篇文章主要介绍了PHP 构造函数和析构函数原理与用法,结合具体实例形式分析了PHP 构造函数和析构函数基本概念、功能、原理、用法及相关操作注意事项,需要的朋友可以参考下
    2020-04-04
  • 学习php中的正则表达式

    学习php中的正则表达式

    简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到ta的身影。此外,象JavaScript这种客户端的脚本语言也提供了支持。正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。
    2014-08-08

最新评论