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 相关文章推荐
关于文本留言本的分页代码
Oct 09 PHP
php桌面中心(二) 数据库写入
Mar 11 PHP
php 显示指定路径下的图片
Oct 29 PHP
php 无限分类的树类代码
Dec 03 PHP
php线性表顺序存储实现代码(增删查改)
Feb 16 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
php代码审计比较有意思的例子
May 07 PHP
php魔术变量用法实例详解
Nov 13 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
PHP设计模式之单例模式定义与用法分析
Mar 26 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
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
php while循环控制的简单实例
2016/05/30 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
Python中使用中文的方法
2011/02/19 Python
python实现的登录和操作开心网脚本分享
2014/07/09 Python
Python线程详解
2015/06/24 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
python实现Virginia无密钥解密
2019/03/20 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
ubuntu上安装python的实例方法
2019/09/30 Python
如何使用python传入不确定个数参数
2020/02/18 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
市场营销职业生涯规划书范文
2014/01/12 职场文书
出国留学介绍信
2014/01/13 职场文书
亚运会口号
2014/06/20 职场文书
药店促销活动策划方案
2014/08/24 职场文书
2016教师节感恩话语
2015/12/09 职场文书