PHP网页游戏学习之Xnova(ogame)源码解读(六)


Posted in PHP onJune 23, 2014

九、公共代码(common.php)

Common.php是Xnova的公共代码,几乎每次点击都会被执行,所以这里要是优化的好,那么整个程序的效率都会有提升;当然这个文件调用的其他代码也要一并优化才行。

$game_config  = array();
$user     = array();
$lang     = array();
$link     = "";
$IsUserChecked = false;

变量$game_config存放整个游戏的参数数据,每次都要读数据库,可以优化,优化方式比如保存在文件里面;变量$user存放登录的用户数据;$lang存放的是本地语言数据;$IsUserChecked记录是否check过用户。然后设置一些系统常量,在以后的代码中都要使用到的;再include一些函数文件,有以前我们介绍过的小函数在里面等。

接下来就要用到一个常量INSTALL,这个是在安装的时候定义的;除了安装的时候,这个判断都会进入。进入之后,又include一些文件,其中的includes/vars.php文件很重要,我将专门讲解,现在继续。这里还要从数据库中取得数据,并填充变量$game_config。

if ($InLogin != true) {
 $Result    = CheckTheUser ( $IsUserChecked );
 $IsUserChecked = $Result['state'];
 $user     = $Result['record'];
} elseif ($InLogin == false) {
 if( $game_config['game_disable']) {
 if ($user['authlevel'] < 1) {
  message ( stripslashes ( $game_config['close_reason'] ), $game_config['game_name'] );
 }
 }
}

以上是检查保存在cookie里面的用户登录数据的,在$InLogin = true的时候,不会执行;现在我们讲到的是用户平时操作,所以这里$InLogin的值为false。首先调用函数CheckTheUser(),参数$IsUserChecked的值为false;CheckTheUser()声明在 includes/functions/CheckUser.php文件中,它又调用了声明在 includes/functions/CheckCookies.php中的CheckCookies()函数。而函数CheckCookies() 的功能就是使用Cookie中的信息来check用户,代码我就不列出了。

如果CheckTheUser()成功,那么变量$user里面就填充好了用户的数据,然后执行下面的分支。这个分支是检查服务器参数设置的,如果服务器被管理员设置为关闭,则检查用户的权限;如果权限不够,则显示错误消息。

然后就要处理的是用户活动中的舰队了,分为两段逻辑:

1.当前时间大于舰队抵达目的地的时间,需要处理发生战斗、运输等逻辑

2.当前时间大于舰队返回出发地的时间,同样要处理发生战斗后、运输后的舰队回归逻辑

每个活动都调用函数FlyingFleetHandler()来处理,此函数我们以后再分析,现在只要知道功能就行了。如果用户点击频繁的话,这段逻辑将是非常耗资源的,所以这里也可以优化,比如缓存或者不是每次都执行等等。

舰队活动处理完了,那么导弹的活动呢怎么办?接下来的rak.php文件就是用来处理星际导弹的。文件功能包括了导弹的拦截、导弹摧毁的防御数量、发送消息给被攻击方等。具体逻辑我们也略过,以后分析。

然后调用函数SetSelectedPlanet()取得玩家上次所在的星球,注意这个函数的参数,是传址的,函数声明在includes/functions/SetSellectPlanet.php。接下来的要取得两个变量值,$planetrow存放用户当前星球的数据;$galaxyrow存放当前星球的星系坐标数据。

最后调用函数CheckPlanetUsedFields()更新当前星球的使用空间,同样参数是传址的,声明在 includes/functions/CheckPlanetUsedFields.php。

Common.php文件分析完了,如果大家理解了的话,就应该知道这里的效率很重要;希望大家一起来优化,其他部分也同样。

PHP 相关文章推荐
php自动跳转中英文页面
Jul 29 PHP
php+mysql事务rollback&amp;commit示例
Feb 08 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
Jun 12 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP 实现的将图片转换为TXT
Oct 21 PHP
php阿拉伯数字转中文人民币大写
Dec 21 PHP
教你在header中隐藏php的版本信息
Aug 10 PHP
php判断目录存在的简单方法
Sep 26 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 12 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
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 #PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 #PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 #PHP
You might like
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP安全防范技巧分享
2011/11/03 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
PHP数组Key强制类型转换实现原理解析
2020/09/01 PHP
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
python之array赋值技巧分享
2019/11/28 Python
python 实现多维数组转向量
2019/11/30 Python
Python socket聊天脚本代码实例
2020/01/02 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
会走路的树教学反思
2014/02/20 职场文书
护士求职自荐信范文
2014/03/19 职场文书
欢迎家长标语
2014/10/08 职场文书
服务员岗位职责范本
2015/04/09 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
php 原生分页
2021/04/01 PHP
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js