页游php怎么读其他文件夹,PHP网页游戏学习之Xnova(ogame)源码解读(十五)
这篇文章主要介绍了PHP网页游戏Xnova(ogame)源码解读的舰队活动页面处理流程,需要的朋友可以参考下
十八、舰队活动(FlyingFleetHandler.php)
在前文中我们曾经初步研究过舰队活动的源码,提到过舰队活动的触发。现在我进一步分析Xnova中舰队活动,这些在本质上是由玩家触发的,并不是由定时器在进行定时计算。舰队活动的触发是在common.php中进行的,所以入口就在这文件中,代码如下:
//检查是否有到达目的地的舰队
$_fleets = doquery("SELECT * FROM {{table}} WHERE 'fleet_start_time' <= '".time()."';", 'fleets'); // OR fleet_end_time <= ".time()
//循环处理每个舰队
while ($row = mysql_fetch_array($_fleets)) {
$array = array();
$array['galaxy'] = $row['fleet_start_galaxy'];
$array['system'] = $row['fleet_start_system'];
$array['planet'] = $row['fleet_start_planet'];
$array['planet_type'] = $row['fleet_start_type'];
//舰队处理函数
$temp = FlyingFleetHandler ($array);
}
//检查是否有返回出发地的舰队
$_fleets = doquery("SELECT * FROM {{table}} WHERE 'fleet_end_time' <= '".time()."';", 'fleets'); // OR fleet_end_time <= ".time()
//循环处理每个舰队
while ($row = mysql_fetch_array($_fleets)) {
$array = array();
$array['galaxy'] = $row['fleet_end_galaxy'];
$array['system'] = $row['fleet_end_system'];
$array['planet'] = $row['fleet_end_planet'];
$array['planet_type'] = $row['fleet_end_type'];
//舰队处理函数
$temp = FlyingFleetHandler ($array);
}
大家看到了,前面这段代码其实写的不好,因为这里每次都会被调用,效率太低了。因此我们在这里可以进行优化,使每次循环只需要一个舰队的ID传递给函数即可;相应的函数也要做修改,有兴趣的自己修改下。
接下来看看函数FlyingFleetHandler(),这是集中调用舰队活动的函数。
//锁表,防止出现数据不同步等问题
doquery("LOCK TABLE {{table}}lunas WRITE, {{table}}rw WRITE,
{{table}}errors WRITE, {{table}}messages WRITE, {{table}}fleets WRITE,
{{table}}planets WRITE, {{table}}galaxy WRITE ,{{table}}users WRITE", "");
//这里一大段就是取得舰队数组,参数完全可以使用舰队ID,优化之
$QryFleet = "SELECT * FROM {{table}} ";
$QryFleet .= "WHERE (";
$QryFleet .= "( ";
$QryFleet .= "`fleet_start_galaxy` = ". $planet['galaxy'] ." AND ";
$QryFleet .= "`fleet_start_system` = ". $planet['system'] ." AND ";
$QryFleet .= "`fleet_start_planet` = ". $planet['planet'] ." AND ";
$QryFleet .= "`fleet_start_type` = ". $planet['planet_type'] ." ";
$QryFleet .= ") OR ( ";
$QryFleet .= "`fleet_end_galaxy` = ". $planet['galaxy'] ." AND ";
$QryFleet .= "`fleet_end_system` = ". $planet['system'] ." AND ";
$QryFleet .= "`fleet_end_planet` = ". $planet['planet'] ." ) AND ";
$QryFleet .= "`fleet_end_type`= ". $planet['planet_type'] ." ) AND ";
$QryFleet .= "( `fleet_start_time` < '". time() ."' OR `fleet_end_time` < '". time() ."' );";
$fleetquery = doquery( $QryFleet, 'fleets' );
//根据舰队活动的目标不同,分别进入不同的函数处理
while ($CurrentFleet = mysql_fetch_array($fleetquery)) {
switch ($CurrentFleet["fleet_mission"]) {
case 1:
// 普通攻击
MissionCaseAttack ( $CurrentFleet );
break;
case 2:
// 这里应该是ACS攻击或者是其他攻击,但是现在没有用
doquery ("DELETE FROM {{table}} WHERE `fleet_id` = '". $CurrentFleet['fleet_id'] ."';", 'fleets');
break;
case 3:
// 运输
MissionCaseTransport ( $CurrentFleet );
break;
case 4:
// 派遣
MissionCaseStay ( $CurrentFleet );
break;
case 5:
// 联合派遣,即ACS防御
MissionCaseStayAlly ( $CurrentFleet );
break;
case 6:
// 侦查
MissionCaseSpy ( $CurrentFleet );
break;
case 7:
// 殖民
MissionCaseColonisation ( $CurrentFleet );
break;
case 8:
// 回收
MissionCaseRecycling ( $CurrentFleet );
break;
case 9:
// 毁月,厉害了
MissionCaseDestruction ( $CurrentFleet );
break;
case 10:
// 保留 !!
break;
case 15:
// 远征、探险
MissionCaseExpedition ( $CurrentFleet );
break;
//其他情况删除舰队,这个是好习惯
default: {
doquery("DELETE FROM {{table}} WHERE `fleet_id` = '". $CurrentFleet['fleet_id'] ."';", 'fleets');
}
}
}
//解锁表
doquery("UNLOCK TABLES", "");
上面的函数结构清晰,代码明了,注释也讲的很清楚了。
页游php怎么读其他文件夹,PHP网页游戏学习之Xnova(ogame)源码解读(十五)相关推荐
- 微信小程序开发之文件上传下载应用场景(附Demo源码)
微信小程序开发之文件上传下载应用场景(附Demo源码),Demo为小相册应用,源码在附件中,本示例需要腾讯云支持. http://www.henkuai.com/forum.php?mod=viewt ...
- jpcsp源码解读6:PSF文件
当你运行了模拟器,通过模拟器菜单选择并加载一个umd镜像,模拟器就用这个umd镜像实例化一个UmdIsoReader(见上一篇,源码解读5). 通过这个UmdIsoReader,从光盘提取的第一个文件 ...
- PTMs:QLoRA技巧之源码解读(qlora.py文件)—解析命令与加载参数→数据预处理→模型训练+评估+推理
PTMs:QLoRA技巧之源码解读(qlora.py文件)-解析命令与加载参数→数据预处理→模型训练+评估+推理 目录 QLoRA技巧之源码解读(qlora.py文件)-解析命令与加载参数→数据预处理 ...
- python遍历一个文件夹下所有excel,读取所有sheet页,然后写入另一个文件夹下对应模板的excel中
本来想直接写入,但是我们的excel报表太麻烦了,里面表头有多处要求合并的,用python去写太要命了,想了下,设置一堆空的excel模板,这样只需要把原文件的数据读出来就可以了,简单多了 #读取文件 ...
- 使用Process.Start打开文件夹或网页
代码 /// <summary> /// 打开文件所在的文件夹 /// </summary> public static void OpenFileDialog(string ...
- php文件夹转换网页,PHP转换文件夹下所有文件的编码 适合发布网站的其他编码版本...
PHP转换文件夹下所有文件的编码 适合发布网站的其他编码版本 比如你有一个GBK版本 你想有一个UTF8版本 或者你只有GBK的源码 你想二次开发 但是你不想改变IDE的编码方式 你可以用这个程序将其 ...
- 安卓游戏服务器文件是哪个文件夹,安卓手机游戏数据包放在哪个文件夹
数据包路径一般为sdcard\ANDRIOD\data\某游戏数据包(com.游戏英文名称就是那个游戏的数据包). 安卓4.0及以上的话就是在内置存储中,也即文件管里中的sdcard目录(外置存储卡叫 ...
- 如何新建一个看不见的文件夹(我们的游戏都在里头)
首先在桌面新建一个正常的文件夹 右击中英文切换 然后将半角设定成全角 之后重命名我们的文件夹 按一下空格,之后因为系统识别全角就不是空格啦 我们就可以按一下回车 他就变成了金色的文件夹啦 之后右击- ...
- 35.FFmpeg学习笔记 - ffplay源码解读3之读文件
本篇文章看看ffplay是如何读取packet放入队列中的. 一.先看入口函数: int main(int argc, char **argv) {VideoState *is;...av_init_ ...
- steam文件夹移动后游戏需要重新安装怎么办
有的时候我们一不小心当时年少轻狂不小心把游戏文件夹装到了c盘后来c盘空间太少移到了d盘不能用了怎么办呢,其实很简单,看网上有很多方法都不是好用的,下面就告诉你咋办 1.移动路径 直接拖拽就行这里我直接 ...
最新文章
- 浅谈ASP.NET中render方法
- 小学计算机ppt课教案,小学信息技术公开课教案《让幻灯片变得更加漂亮》教学设计与反思...
- javascript --- 作用域和闭包
- .NET Core 3.0 Preview 7 已经发布
- 《Python程序设计》在亚马逊京东当当互动出版网淘宝全面上架
- winform定义数据源名称_WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源...
- 安卓 多条通知_【安卓+苹果】石头阅读,全网小说、漫画免费看,最好用的追书神器!...
- php漂浮广告代码,js 居中漂浮广告_广告代码
- HTML5七夕情人节表白网页制作【我喜欢你H5】HTML+CSS+JavaScript
- mysql乐观锁 超卖_秒杀系统之超卖现象
- 【Oracle】并行等待之PX Deq: Table Q Normal
- SNS、FaceBook、导航设计等等
- 计算机无法读取移动光驱,电脑检测不到光驱怎么办?
- fatal: could not create work tree dir ‘xxx’: Permission denied解决办法
- Kafka Confluent 简介
- 9660图像 缺少iso_刻录映像时出现的问题
- Centos7 -samba服务配置
- Serverless 2.0,鸡蛋还是银弹?
- 计算机系统结构课后习题答案1
- 搜索引擎发展趋势:对SNS社交网站的收录