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 相关文章推荐
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 PHP
php保存信息到当前Session的方法
Mar 16 PHP
php给每个段落添加空格的方法
Mar 20 PHP
php邮件发送的两种方式
Apr 28 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
Mar 01 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制作静态网站的模板框架
2006/10/09 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
Python标准库内置函数complex介绍
2014/11/25 Python
Python抽象类的新写法
2015/06/18 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
Python zip()函数用法实例分析
2018/03/17 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
python-视频分帧&amp;多帧合成视频实例
2019/12/10 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
军训的自我鉴定
2013/12/10 职场文书
机关门卫制度
2014/02/01 职场文书
生物制药专业求职信
2014/03/11 职场文书
租房协议书范例
2014/10/14 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
python绘制箱型图
2021/04/27 Python
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python