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
mysql中存储过程、函数的一些问题
Feb 14 PHP
php读取数据库信息的几种方法
May 24 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 PHP
PHP加密解密函数详解
Oct 28 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
PHP实现时间日期友好显示实现代码
Sep 08 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 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多功能图片处理类
2016/05/15 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
mouse_on_title.js
2006/08/25 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
Python判断变量是否已经定义的方法
2014/08/18 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
CSS3中:nth-child和:nth-of-type的区别深入理解
2014/03/10 HTML / CSS
党员入党表决心的话
2014/03/11 职场文书
理财投资建议书
2014/03/12 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
工作失职检讨书500字
2014/10/17 职场文书
惊天动地观后感
2015/06/10 职场文书
合作协议书格式范本
2016/03/21 职场文书
Jsonp劫持学习
2021/04/01 PHP
详解Redis集群搭建的三种方式
2021/05/31 Redis
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis