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和MySql来与ODBC数据连接
Oct 09 PHP
PHP Ajax中文乱码问题解决方法
Feb 27 PHP
用PHP查询搜索引擎排名位置的代码
Jan 05 PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 PHP
php中cookie的使用方法
Mar 29 PHP
win7计划任务定时执行PHP脚本设置图解
May 09 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 PHP
PHP通过API获取手机号码归属地
May 28 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
PHP邮件群发机实现代码
Feb 16 PHP
php爬取天猫和淘宝商品数据
Feb 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
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 #PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 #PHP
ThinkPHP实现事务回滚示例代码
Jun 23 #PHP
You might like
十天学会php(3)
2006/10/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
js constructor的实际作用分析
2011/11/15 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
python学生管理系统代码实现
2020/04/05 Python
python中format()函数的简单使用教程
2018/03/14 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
用Django写天气预报查询网站
2018/10/21 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Django 路由层URLconf的实现
2019/12/30 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
python怎么调用自己的函数
2020/07/01 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
澳大利亚家具商店:Freedom
2020/12/17 全球购物
高中同学聚会邀请函
2014/01/11 职场文书
大学生未来职业生涯规划书
2014/02/15 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
Python实现简繁体转换
2021/06/07 Python
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏