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 相关文章推荐
使用无限生命期Session的方法
Oct 09 PHP
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
简单的移动设备检测PHP脚本代码
Feb 19 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
PHP图片加水印实现方法
May 06 PHP
PHP微信开发之模板消息回复
Jun 24 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
简单解决微信文章图片防盗链问题
Dec 17 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
基于Zend的Captcha机制的应用
2013/05/02 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
显示、隐藏密码
2006/07/01 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
2019/05/07 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
浅谈python字符串方法的简单使用
2016/07/18 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Python descriptor(描述符)的实现
2020/11/15 Python
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
播音主持女孩的自我评价分享
2013/11/20 职场文书
党课学习思想汇报
2014/01/02 职场文书
应届电子商务毕业自荐书范文
2014/02/11 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
团队会宣传标语
2014/10/09 职场文书
司机个人年终总结
2015/03/03 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS