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+MYSQL 出现乱码的解决方法
Aug 08 PHP
PHP var_dump遍历对象属性的函数与应用代码
Jun 04 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
php学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
php发送与接收流文件的方法
Feb 11 PHP
详解php中空字符串和0之间的关系
Oct 23 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 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
各种战术和打法的原创者
2020/03/04 星际争霸
php socket方式提交的post详解
2008/07/19 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
介绍Python中的文档测试模块
2015/04/28 Python
python文件操作之目录遍历实例分析
2015/05/20 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
python 实现的车牌识别项目
2021/01/25 Python
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
表彰大会主持词
2014/03/26 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
民事和解协议书格式
2014/11/29 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
springcloud之Feign超时问题的解决
2021/06/24 Java/Android