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 基本语法格式
Dec 15 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
理解和运用PHP中的多态性[译]
Aug 02 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
Jan 16 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
Nov 14 PHP
php使用curl访问https示例分享
Jan 17 PHP
试用php中oci8扩展
Jun 18 PHP
PHP微信API接口类
Aug 22 PHP
PHP常用的三种设计模式
Feb 17 PHP
laravel 关联关系遍历数组的例子
Oct 10 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
php中使用GD库做验证码
2016/03/31 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
firefox下input type=&quot;file&quot;的size是多大
2011/10/24 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
javascript折半查找详解
2015/01/26 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
python+pyqt实现右下角弹出框
2017/10/26 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
18岁生日感言
2014/01/12 职场文书
运动会入场词50字
2014/02/20 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
英语辞职信范文
2015/02/28 职场文书