波's profile蓝色天际PhotosBlogLists Tools Help

波 陆

Occupation
这就是我~

Windows Media Player

About Heaven Blue...

  iLwave Style
  BGM: Children - Dreamland
  时辰将至。

终之章 - 1

刚回来,纪念品派送 & 整理照片中... x小时后上图~

终之章 - 序

- your force is under attack.

几乎每一个男生都玩过的游戏里最熟悉的一句话,
四年后重新打开星际认真地和电脑玩了一盘,
没有熟练的微操作也没有计算时间去协调生产和消耗,
一张128X96的地图玩了近两个小时终于把电脑摆平,
最后的战场,壮烈。

一开始是用了计谋的,
电脑的智力毕竟只是代码逻辑演算出来的结果,
几次声东击西调虎离山之后电脑的BASE几乎被攻陷,
不过这不怎么有趣的,撤军;

到中期两方科技树都攀到最顶层,
偶尔有些小规模的交火但伤亡不多,
遍布整张地图的12架幽灵机可以第一时间掌握情报;

到了后期终于爆发起几场大规模交战,
几乎是以血拼的方式消耗了大部分的战斗力,
数场战役打下来感觉酣畅淋漓;

待临近尾声,自己这边还剩两台坦克,
电脑剩一群机枪兵和火枪兵,
战场在电脑的BASE旁边,机枪兵和火枪兵追着坦克打,
半分钟后双方的战斗力都全线飘红,
我从最隐秘的角落召唤出一个幽灵赶往前线,
坦克已事先撤往安全的地方,
而当这个死神带着一枚刚生产出的核弹降临的时候,
本来犹豫着追赶坦克的机枪兵和火枪兵全部回到了自己的BASE周围,
平静地等待最后的宣判;

于是核弹降临,一切随之灰飞烟灭,
默默看着这一切的我此时心情已无法言喻,那战火燃烧不息;

我的最后一架坦克驶到电脑接近毁坏的BASE旁边停下,
看着它再次生产出一个SCV,像一切都没有发生过一样:
采矿,运回,复而采矿,运回...

结局是没有结局,或者结局意味着新的开局。

这一生和命运的博弈,
有时候我输了有时候我赢了,
有时候我筹划一出和棋,
命运默许了这种状态的存在;
所谓退一步海阔天空,
是建立在利益损失不大的基础之上,
命运如此吝啬给予这样的生活,
会不会是因为我们还不曾退这一步。

此次,阴谋和阳谋都黯去,
此次,天真和淳朴亦不在,
此次,释然和淡泊皆归隐,
此次,唯为我者举杯邀己,相醉于江湖。

四年即逝,谨以此章记之。

365 -

逝去的风景何须留恋 吾等当自强不息。

Nebula 开发日记 3

上次解决完PHP全局变量作用域的问题之后看看代码很不爽,
于是又把两个配置文件的包含放回到函数里面,
对 nConfig 稍作修改使之成为一个配置管理器,
实现的功能有:装载和解析配置文件,支持访问和管理多种配置方式,提供扩展接口。
因 nConfig 类被载入之后是作用于全局的类,
所以可以把所有载入的配置信息交由 nConfig 管理,
所有已经载入的配置信息均保存在类内部,
其他模块可以通过类提供的一系列接口来访问和修改配置信息,
这其中存在几个关键点就是外部接口的统一以及各种类型配置信息的访问方式,
因此参考数据库模块的处理方法,把每种类型的配置信息操纵方式封装到相应的类中,
而这些类的访问接口都是统一的,类的原型描述如下:

abstract class nConfig_ {
   
    abstract public function __construct($arrSection); // $arrSection 基本配置描述信息
   
    abstract public function get($strItem = ''); // 获取一条配置信息,如参数为空则返回所有配置信息
   
    abstract public function set($strItem, $mixValue); // 设置一条配置信息,不保存
    
    abstract public function write($strItem, $mixValue); // 将配置信息写入到存储介质上
   
}

要说明的是构造函数 __construct 的参数 $arrSection 是一个数组,
nebula 的配置信息是以 section (节) 的方式来组织的,
每个 section 都保存在相应的配置文件里,
nLoader 中有一个 $arrConfig 全局变量数组是包含所有 section 的容器,
换一种方式来说即每个 section 都是 $arrConfig 数组的成员,
最初的时候在 nLoader 描述 $arrConfig = array() 为一个空数组,
在基本配置文件 config.global.php 中为 $arrConfig 添加一个名为 'global' 的数组成员即 section global,
代码如下:

$arrConfig['global'] = array(
    'TYPE' => array('php'),
    'sitename' => 'default'
);

其中 TYPE 描述了这个 section 信息的格式为 php,
而 sitename 是一条自定义的配置信息,描述了站点名称为 default ,
配置管理器 nLoader 读取 config.global.php 之后根据 TYPE 信息格式选择一个可以操纵这个格式的类 nConfig_php,
之后生成一个 nConfig_php 的实例,将 $arrConfig['global'] 作为参数传给构造函数完成初始化,
最后将这个类实例放入自身的资源池中,外部模块可以通过以下接口来访问 global 的配置信息:

    nConfig::sectionExists($strSection) - 判断该配置节是否存在;
    nConfig::get($strSection, $strItem = '') - 从配置节中提取 $strItem 配置项,如后者为空则提取所有;
    nConfig::set($strSection, $strItem, $strValue) - 设置 $strSection 配置节的 $strItem 配置项;
    nConfig::write($strSection, $strItem, $strValue) - 将配置信息写入到存储介质上;

框架自带了 php 格式的配置信息操纵类 nConfig_php,代码如下:

class nConfig_php extends nConfig_ {

    private $arrSection = array();

    public function __construct($arrSection) {
        $this->arrSection = $arrSection;
    }

    public function get($strItem = '') {
        return $strItem ? $this->arrSection[$strItem] : $this->arrSection;
    }

    public function set($strItem, $mixValue) {
        //  ...
    }

    public function write($strItem, $mixValue) {
        // ...
    }

};

这里在类构造的时候仅是简单地将配置节复制到自身私有数组里,
而其他类型的配置信息操纵类则需要实现进一步的操作,
在此暂不实现。

nLoader 在装载完系统文件之后会自动调用 nConfig 包含 global 和 module 两个配置节,
之后引导 nContext 正式进入到系统的运行阶段。
 

蓝色天际

over the clouds