PHP网页游戏学习之Xnova(ogame)源码解读(十三)
十六、造船和防御(FleetBuildingPage.php与DefensesBuildingPage.php页面)
先说造船厂页面,其实这个页面中并没有真正的造船,只是把要造的船和数量保存到数据库中;产生船舰的代码在另外一个函数里面。下面我们开始分析这个页面,并且也按照前面的思路,先讲解构造页面的代码。
首先判断本星球是否已有造船厂,没有当然要提示。
下面使用循环语句,构造出每种船舰的建造页面,这段代码我觉得不需要再详细讲解了。
接下来是要显示正在制造的船舰列表,要脚本动态显示,实际上是假像;即使显示有船舰造好了,如果不是刷新,数据库里面并不会有。注意这里有两个重要的字段:b_hangar_id保存着要造的船列表;b_hangar保存着上次更新后剩下的时间,单位是秒。
使用函数ElementBuildListBox(),构造出一个正在造船的脚本,函数代码大家自己看,不难,只要理解了前面我说的两个字段就可以了。
最后输出造船厂页面。
现在我们又回到前面,玩家输入要制造的船舰的数量,进入这段代码。
1.取得要制造的船舰代码和数量
2.判断制造的数量是否超过允许的最大值,超过则取最大值
3.如果制造数量不为零,判断是否允许制造
4.然后取得当前资源能制造的最大值
5.设置资源消耗和时间消耗
6.最后更新星球数据,包括减少资源和建造船舰的字段b_hangar_id,贴出代码如下:
if ($Count >= 1) { $CurrentPlanet['metal'] -= $Ressource['metal']; $CurrentPlanet['crystal'] -= $Ressource['crystal']; $CurrentPlanet['deuterium'] -= $Ressource['deuterium']; $CurrentPlanet['b_hangar_id'].= "". $Element .",". $Count .";"; }
造船厂页面完成了,下面我们来看防御页面。这个页面基本逻辑和造船厂一样,这里就不写了。不同的是多一些逻辑限制,罗列出来如下:
1.在构造防御单位页面的时候,代码407和408是大小防御护盾,要注意只能有一个
2.在玩家输入数量后的制造代码里面,代码502和503是拦截导弹和星际导弹,要注意两个导弹的数量关系和正在制造列表里面的导弹数量
3.同样使用字段b_hangar_id保存
造船和防御页面简单的讲解完了,最重要的制造代码在另外一个函数里面,下一章节分析。
相关推荐
-
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
十七.资源更新(PlanetResourceUpdate.php页面) 前面基本把重要的功能讲解完了,这章节我们分析重要的一个函数PlanetResourceUpdate,主要功能是更新资源.制造船舰和防御单位:代码很有条理,下面是详细的说明: 1.计算星球的最大存储空间,包括系统设置的浮动值 2.计算星球三种资源的产量和能量消耗总量,包括专家的加成 3.如果星球是月球,以上计算的产量和能量直接为0 4.计算上次更新资源到现在的时间 5.计算由于能量比率而引起的产量变化,能量为0的时候,只有基本
-
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
十八.舰队活动(FlyingFleetHandler.php) 在前文中我们曾经初步研究过舰队活动的源码,提到过舰队活动的触发.现在我进一步分析Xnova中舰队活动,这些在本质上是由玩家触发的,并不是由定时器在进行定时计算.舰队活动的触发是在common.php中进行的,所以入口就在这文件中,代码如下: //检查是否有到达目的地的舰队 $_fleets = doquery("SELECT * FROM {{table}} WHERE 'fleet_start_time' <= '"
-
PHP网页游戏学习之Xnova(ogame)源码解读(九)
十二.舰队相关函数(unlocalised.php) 本节将把舰队派遣相关的函数做个说明,继续以注释方式说明:由于这次涉及的函数比较多,需要花不少时间来整理消化. // ------------------------------------------------------------------- // // 以下是舰队派遣需要用到的函数列表 // // -------------------------------------------------------------------
-
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
十四.建筑页面(BatimentBuildingPage.php) 现在开始解析真正的建筑页面,里面用到的函数不少,不过都不难,我们一起来看. 一开始先检查星球的已使用空间并更新,使用函数CheckPlanetUsedFields,这个函数前面讲过,实现也不难. 接下来这个是我们前面重点讲过的结构,就是判断是否输入:所以我们先跳到这段代码的后面看,但是这里有几个函数是处理一些建筑队列的. 1. SetNextQueueElementOnTop:我们讲过,处理队列中的下一个建筑 2. ShowBu
-
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
十五.研究页面(ResearchBuildingPage.php) 研究因为没有队列,所以相对简单一些:但是也有一些比较特殊的东西.我们先看研究之前的一个处理函数HandleTechnologieBuild(). 这个函数是处理现在的科技研究的,其中b_tech_planet字段是研究的星球ID,b_tech字段是完成研究的时间点,b_tech_id字段是研究的具体科技字段名.函数逻辑不难,我就不仔细讲解了,大家自己看看,下面正式进入研究页面: 首先要检查当前星球是否有研究所. 然后检查当前星球
-
PHP网页游戏学习之Xnova(ogame)源码解读(一)
一. 引言 xnova(ogame)是一款世界上最火的战争策略类网页游戏之一,也是大部分同类网页游戏效仿的对象.你只需要网页浏览器,无需下载客户端就可进行的网络游戏. Xnova是个怎么样的游戏? 你是一个跨星系的统治者,利用不同的战略扩大你的实力.你将从一个自己的星球上开始你的事业,在那里你用现有的资源建造一个你的经济和军事基础.通过科学 研究你获得达到新的.优势的技术的入口和新的武器系统.随着游戏的进行你将对多个星球移民,与其它的玩家联盟,与其它的玩家作生意或者发动战争.无论你想 要做什么,
-
PHP网页游戏学习之Xnova(ogame)源码解读(八)
十一.公共函数(functions.php) 本来打算写建筑页面的分析,但是建筑页面东西比较多,一天时间也写不完:而且我们还有很多函数要经常用到,先简单介绍下这些函数还是有必要的:下面我们还是以注释方式说明. // ------------------------------ // //检查用户是否假期模式,这个函数没有被调用过 // function check_urlaubmodus ($user) //输出目前登陆用户假期模式剩余时间,这个函数没有被调用过 function check_u
-
PHP网页游戏学习之Xnova(ogame)源码解读(十)
十三. 建造总览(buildings.php) 从这篇文章开始,对xnova的研究重点放在流程上面,其实就是大量的函数:至于页面的构造将不再仔细解释. buildings.php文件不只是处理建筑金属矿产等,而是包括了建筑.研究.造船厂.防御四个功能:通过传递不同的参数来决定进入哪个功能,所以这个文件其实是一个导航文件.下面我们简单解释下这个文件. //更新当前星球的建筑队列,比较复杂 UpdatePlanetBatimentQueueList ( $planetrow, $user ); //
-
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
十九.攻击任务(MissionCaseAttack.php) 按照舰队任务的编号,排在第一个的就是攻击任务.这个代码很长,看的时候要有耐心. 好在引用的内容并不是很多,并且给出了详细的注释,读者不会晕头转向. function MissionCaseAttack ($FleetRow) { global $user, $phpEx, $xnova_root_path, $pricelist, $lang, $resource, $CombatCaps; // 在舰队的记录中,fleet_star
-
PHP网页游戏学习之Xnova(ogame)源码解读(三)
四. 用户注册(reg.php) 在看用户注册之流程之前,我把表的用途做个简单说明,现在只是大概的说明,后面我们再仔细了解,大家可以记下这个说明. game_aks 联合攻击组记录表,攻击完成删除数据 game_alliance 联盟表 game_annonce 公告表,基本无用 game_banned Ban玩家表 game_buddy 好友表 game_chat 聊天记录表 game_config 系统参数表 game_errors 错误日志表 game_fleets 舰队活动记录表,活动完
-
PHP网页游戏学习之Xnova(ogame)源码解读(六)
九.公共代码(common.php) Common.php是Xnova的公共代码,几乎每次点击都会被执行,所以这里要是优化的好,那么整个程序的效率都会有提升:当然这个文件调用的其他代码也要一并优化才行. $game_config = array(); $user = array(); $lang = array(); $link = ""; $IsUserChecked = false; 变量$game_config存放整个游戏的参数数据,每次都要读数据库,可以优化,优化方式比如保存在
-
PHP网页游戏学习之Xnova(ogame)源码解读(二)
三. 安装(install/index.php) 这个文件是安装页面,一开始就可以看到定义了两个常量: define('INSIDE' , true); define('INSTALL' , true); 因为这两个常量在接下来的代码中总是用到,所以在这里先说明下.INSIDE是用来防止攻击的:INSTALL是用来记录现在是否处于安装游戏的进程中. 接下来Include两个文件:extension.inc和common,这两个都是正宗的php文件.首先extension.inc里面加入了防止攻击
-
PHP网页游戏学习之Xnova(ogame)源码解读(七)
十.基础数值(vars.php) vars.php文件中定义游戏中关键的基础数值,全部以数组形式定义:PHP中的数组实际上是一个有序图.我们下面将以代码注释的方式进行说明,可能有不正确的理解,希望大家自己也仔细看看,有问题请提出来!如果对这段数值理解了,那么你就可以创造新的单位了,比如新的科技(可以看我服的殖民技术).新的船舰等. // 玩家消息类型定义,具体含义请看messages.mo $messfields = array ( 0 => "mnl_spy", 1 =>
-
PHP网页游戏学习之Xnova(ogame)源码解读(五)
六. 游戏主界面(frames.php) frames.php文件功能就是显示游戏主界面,先看下面的代码: $InLogin = false; $XNova_Host = $_SERVER['HTTP_HOST']; $XNova_Script = $_SERVER['SCRIPT_NAME']; $Uri_Array = explode ('/', $XNova_Script); // On vire le script array_pop($Uri_Array); $XNova_URI =
-
PHP网页游戏学习之Xnova(ogame)源码解读(四)
五. 用户登录(login.php) 在开始的时候,我们说过游戏的入口是index.php文件:我们已经安装好了,自然转向登录流程,开始看. 前面照例是一段我们前进介绍过的代码,我们就不再详细讲了:不同的是使用的语言文件是login.mo,还有一个LOGIN的常量.如下 define('INSIDE' , true); define('INSTALL' , false); define('LOGIN' , true); $InLogin = true; $xnova_root_path = '.
随机推荐
- Python定时器实例代码
- 讨论CSS中的各类居中方式
- exe2swf 工具(Adodb.Stream版)
- Tomeat6.0 连接池数据库配置
- 简单的java读取文件示例分享
- Swift3.0剪切板代码拷贝及跨应用粘贴实现代码
- 防止服务器被攻击的妙招(推荐)
- Tsys OkHtm.com修改版数据采集方法
- Android仿知乎日报开屏页效果
- 基于mysql全文索引的深入理解
- mysql常见错误集锦
- 实例代码讲解jquery easyui动态tab页
- 比Jquery的document.ready更快的方法
- 114论坛2005正式版漏洞
- Java8中的default方法详解
- asp 中常用的文件处理函数
- C# 获取汉字的拼音首字母
- VS2012 程序打包部署图文详解
- 突破80K限制-ADSL宽带提速大法
- @PathParam和@QueryParam区别简析