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一些公用函数的集合
Mar 27 PHP
PHP网站基础优化方法小结
Sep 29 PHP
Linux下将excel数据导入到mssql数据库中的方法
Feb 08 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
Jun 09 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语言流程控制中的主动与被动
2012/11/05 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
一个js控制的导航菜单实例代码
2013/12/03 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
Form表单及django的form表单的补充
2019/07/25 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
2015年宣传部个人工作总结
2015/05/14 职场文书
2015党建工作简报
2015/07/21 职场文书
新员工入职感想
2015/08/07 职场文书