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 常用函数库和一些实用小技巧
Jan 01 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
php实现只保留mysql中最新1000条记录
Jun 18 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
PHP回调函数简单用法示例
May 08 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学习 运算符与运算符优先级
2008/06/15 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
利用python发送和接收邮件
2016/09/27 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
基于python调用psutil模块过程解析
2019/12/20 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
荣耀商城:HIHONOR
2020/11/03 全球购物
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
消防志愿者活动方案
2014/08/23 职场文书
师德师风自我评价范文
2014/09/11 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
python非标准时间的转换
2021/07/25 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python