PHP网页游戏学习之Xnova(ogame)源码解读(五)


Posted in PHP onJune 23, 2014

六、 游戏主界面(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   = implode ('/', $Uri_Array);
$XNovaRootURL = "http://". $XNova_Host ."/". $XNova_URI ."/";

上面的代码主要是拼出服务器的URL,比较简单;前面的变量$InLogin暂时不讲,等我们专门讲解common.php的时候,集中说明。

然后include了两个我们前面讲过的文件,最后输出一大段 HTML 代码。需要注意的是,HTML代码里面构造了两frame,分别是leftmenu.php 和 overview.php,我下面将要分析。

七、 左导航栏(leftmenu.php)

这个文件其实很简单,除去前面我们常见的代码,就只声明了ShowLeftMenu()函数,最后用 display() 输出页面。函数ShowLeftMenu()也不难,代码无非是gettemplate模板文件、取得服务器设置的参数以及登录的用户等级,然后构造页面。其中要注意的是用户等级变量$Level,当$level的值大于0的时候,会显示管理员链接。$level的值所代表的级别定义在system.mo文件中, 0 是普通玩家,1 是游戏操作员,2 是游戏管理员,3 是管理员。

八、 概况(overview.php)

这个文件其实就是左导航栏中对应的链接'概况',主要功能是显示当前星球的大概信息和用户的信息,包括其他星球的当前状态等。代码量很大,其实条理很清晰,我们慢慢看来,前面的几行代码我们略过。

$lunarow = doquery("SELECT * FROM {{table}} WHERE 'id_owner' = '" . $planetrow['id_owner'] . "' AND 'galaxy' = '" . $planetrow['galaxy'] . "' AND 'system' = '" . $planetrow['system'] . "' AND 'lunapos' = '" . $planetrow['planet'] . "';", 'lunas', true);
CheckPlanetUsedFields ($lunarow);

这段代码功能是取得当前星球的月球,并检查修正月球的使用空间。CheckPlanetUsedFields函数不仅对月球起作用,同样可以用来检查星球,先不看其中代码,我们继续。

接下来是一段安全性的验证,需要在参数中设置启用这个功能才行,大家可以自行看看,这样的代码还有很多,以后我一般都不分析,对游戏流程关系不大。接下来是一个switch,两个分支,一个重命名星球(放弃星球),暂时不看;另一个default分支,就是登录后要进行的流程,如下

1. 检查用户的消息,如果有新消息则要显示消息链接
2. 专家系统的流程,我自己去掉了这段逻辑,所以也不打算分析
3. 检查用户是否有舰队活动,如果有则构造舰队活动信息表,使用BuildFleetEventTable函数构造,以后介绍
4. 如果用户有其他星球,则构造其他星球列表,并显示每个星球的当前活动
5. 显示自己发射和来自其他玩家的攻击的星际导弹活动信息
6. 其他信息显示,比如公告啊,google的广告等等
7. 如果有月球,显示月球信息
8. 下面是一些星球名、星球空间、用户排名等信息,比较杂乱

上面这些流程的代码,都有注释,不难明白,下面这段代码我们要介绍下。

if ($planetrow['b_building'] != 0) {
 UpdatePlanetBatimentQueueList ($planetrow, $user);
 if ($planetrow['b_building'] != 0) {
 $BuildQueue = explode (";", $planetrow['b_building_id']);
 $CurrBuild = explode (",", $BuildQueue[0]);
 $RestTime = $planetrow['b_building'] - time();
 $PlanetID = $planetrow['id'];
 $Build = InsertBuildListScript ("overview");
 $Build .= $lang['tech'][$CurrBuild[0]] . ' (' . ($CurrBuild[1]) . ')';
 $Build .= "
<div id="\"blc\"" class="\"z\"">" . pretty_time($RestTime) . "</div>
";
 $Build .= "\n<script type="text/javascript"><!--mce:0--></script>\n";
 
 $parse['building'] = $Build;
 } else {
 $parse['building'] = $lang['Free'];
 }
} else {
 $parse['building'] = $lang['Free'];
}

$planetrow 存放当前星球信息,其中的b_building是建筑队列。上面代码先判断是否有建筑队列,然后根据现在的时间,更新建筑信息;如果还是有建筑未完成,则显示出来建筑单位和建筑的剩余时间。关于建筑队列功能,以后要详细介绍,现在先略过。

我们简单介绍下前面的一个分支,分支里面还有三个流程:

1. 重命名星球,代码不难,也不多说了
2. 放弃殖民星球,并显示用户要输入密码的页面
3. 用户输入密码,如果密码正确则更新本星球的信息和用户的默认星球ID(月球未判断)

至此,用户登录到游戏主界面的流程都清楚了,总算进入游戏了。

PHP 相关文章推荐
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
Oct 19 PHP
PHP里的中文变量说明
Jul 23 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
Symfony实现行为和模板中取得request参数的方法
Mar 17 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
php静态成员方法和静态的成员属性的使用方法
Oct 26 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 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
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 #PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 #PHP
ThinkPHP实现事务回滚示例代码
Jun 23 #PHP
You might like
php高级编程-函数-郑阿奇
2011/07/04 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
python psutil模块使用方法解析
2019/08/01 Python
基于python实现从尾到头打印链表
2019/11/02 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
python在协程中增加任务实例操作
2021/02/28 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
群众对十八届四中全会的期盼
2014/10/17 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
任命书格式模板
2015/09/22 职场文书
党章学习心得体会2016
2016/01/14 职场文书
2019消防宣传标语!
2019/07/10 职场文书