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 iconv 解决utf-8和gb2312编码转换问题
Apr 12 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
PHP计划任务、定时执行任务的实现代码
Apr 23 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 PHP
理解php依赖注入和控制反转
May 11 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
yii2.0框架场景的简单使用示例
Jan 25 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往windows中添加用户
2006/12/06 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
vue.js 使用axios实现下载功能的示例
2018/03/05 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
使用python实现链表操作
2018/01/26 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
python3 re返回形式总结
2020/11/20 Python
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
乡镇综治宣传月活动总结
2014/07/02 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript