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动态图像的创建
Oct 09 PHP
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
Jun 09 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
关于php连接mssql:pdo odbc sql server
Jul 20 PHP
php中的curl使用入门教程和常见用法实例
Apr 10 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
php导出生成word的方法
Dec 25 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
php 破解防盗链图片函数
2008/12/09 PHP
PHP学习笔记之session
2018/05/06 PHP
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
Python程序设计入门(1)基本语法简介
2014/06/13 Python
python实现简单socket通信的方法
2016/04/19 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
Django在Model保存前记录日志实例
2020/05/14 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
内部类的定义、种类以及优点
2013/10/16 面试题
汽车运用工程毕业生自荐信
2013/10/29 职场文书
2014的自我评价
2014/01/13 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
群众路线剖析材料
2014/09/30 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android