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 相关文章推荐
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
php学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
PHP中的正则表达式函数介绍
Feb 27 PHP
php入门之连接mysql数据库的一个类
Apr 21 PHP
php实现单链表的实例代码
Mar 22 PHP
php去除字符串中空字符的常用方法小结
Mar 17 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
深入浅析PHP无限极分类的案例教程
May 09 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
Jun 13 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
PHP Swoole异步读取、写入文件操作示例
Oct 24 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中empty is_null和isset的测试
2013/06/29 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
javascript 函数调用的对象和方法
2010/07/01 Javascript
JavaScript类库D
2010/10/24 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
小程序实现左滑删除效果
2019/07/25 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
python使用正则表达式替换匹配成功的组
2017/11/17 Python
使用python 3实现发送邮件功能
2018/06/15 Python
Django实现跨域请求过程详解
2019/07/25 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
指针和引用有什么区别
2013/01/13 面试题
物业客服专员岗位职责
2013/11/30 职场文书
学校十一活动方案
2014/02/01 职场文书
安全生产计划书
2014/05/04 职场文书
电视节目策划方案
2014/05/16 职场文书
调研汇报材料范文
2014/08/17 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis
Python实现自动玩连连看的脚本分享
2022/04/04 Python