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 相关文章推荐
PHP简介
Oct 09 PHP
php win下Socket方式发邮件类
Aug 21 PHP
网页游戏开发入门教程三(简单程序应用)
Nov 02 PHP
Memcache 在PHP中的使用技巧
Feb 08 PHP
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
使用php语句将数据库*.sql文件导入数据库
May 05 PHP
利用PHP函数计算中英文字符串长度的方法
Nov 11 PHP
php绘制一条直线的方法
Jan 24 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
PHP与以太坊交互详解
Aug 24 PHP
关于laravel 日志写入失败问题汇总
Oct 17 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
Windows下的PHP5.0详解
2006/11/18 PHP
谈谈PHP的输入输出流
2007/02/14 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
PHP制作万年历
2015/01/07 PHP
php中define用法实例
2015/07/30 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
python模块restful使用方法实例
2013/12/10 Python
Python退火算法在高次方程的应用
2018/07/26 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
python print出共轭复数的方法详解
2019/06/25 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
pandas分组聚合详解
2020/04/10 Python
python如何随机生成高强度密码
2020/08/19 Python
Django url 路由匹配过程详解
2021/01/22 Python
用canvas显示验证码的实现
2020/04/10 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
精神文明单位申报材料
2014/05/02 职场文书
大学生求职信
2014/06/17 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
歌咏比赛主持词
2015/06/29 职场文书
SQL基础的查询语句
2021/11/11 MySQL