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


Posted in PHP onJune 24, 2014

十三、 建造总览(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 相关文章推荐
模仿OSO的论坛(三)
Oct 09 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
php实现将字符串按照指定距离进行分割的方法
Mar 14 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
PHP实现原比例生成缩略图的方法
Feb 03 PHP
PHP实现的方程求解示例分析
Nov 11 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
Jun 23 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
Jun 23 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
Jun 23 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 #PHP
You might like
php调用mysql存储过程
2007/02/14 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
WebPack基础知识详解
2017/01/16 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
python 变量初始化空列表的例子
2019/11/28 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
文职个人求职信范文
2013/09/23 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
入股合作协议书
2014/10/12 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android