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 相关文章推荐
深入理解curl类,可用于模拟get,post和curl下载
Jun 08 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
PHP导入导出Excel代码
Jul 07 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 PHP
phpfpm的作用和用法
Oct 10 PHP
简单的php购物车代码
Jun 05 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 PHP
PHP7 新增功能
Mar 09 PHP
Laravel中获取IP的真实地理位置
Apr 01 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中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
基于JavaScript实现选项卡效果
2017/07/21 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
python字符串判断密码强弱
2020/03/18 Python
数字天堂软件测试面试题
2012/12/23 面试题
自荐书封面下载
2013/11/29 职场文书
机械专业应届生求职信
2013/12/12 职场文书
奉献演讲稿范文
2014/05/21 职场文书
技术负责人任命书
2014/06/05 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书