专注于WEB技术的IT博客

1009月

分类:设计模式

作者:

星际争霸之php设计模式之组合模式

星际里面我们可以下载别人制作的地图,或者自己做地图玩。 我们在选择玩哪张地图的时候,可以看到游戏列出当前地图包里面的地图或地图包的名字。 虽然地图和地图包是通过文件和文件夹区分的,但是我们开发的时候,总希望能使用对象来进行抽象。 那么对于地图和地图包这两个相关的对象,我们能不能简化他们之间的区别呢?

2707月

分类:设计模式

作者:

星际争霸之php备忘模式

我们在玩星际任务版或者单机与电脑对战的时候,有时候会突然要离开游戏,或者在出兵前面,需要存储一下游戏。 那么我们通过什么办法来保存目前的信息呢?而且在任何时候,可以恢复保存的游戏呢? 待解决的问题:保存游戏的一切信息,如果恢复的时候完全还原。 思路:建立一个专门保存信息的类,让他来处理这些事情,就像一本备忘录。

0807月

分类:设计模式

作者:

星际争霸之php适配器模式

星际的很多兵种,都有至少一项特殊技能。而且有些兵种的技能是相同的,比如虫族部队都会恢复血。 如果按照一般的思路,把技能的操作和控制作为方法,放在每个兵种的定义类来实现,代码会重复,也不容易修改。 那我们就会考虑用继承的办法,比如我们可以设计一个虫族的基类,里面有受伤后血恢复的方法。

1106月

分类:设计模式

作者:

星际争霸之php中介者模式

其实从实质来讲,任何升级一般只要知道某种建筑是否存在就行了,因此我们不必让他们多对多联系,设置一个中介者就行了。 这就好像我们不管买什么东西,到超市就可以了,而厂家也只要和超市联系,不必和我们每个消费者直接接触。 待解决的问题:不要让各个建筑互相联系,减少复杂程度。

1804月

分类:设计模式

作者:

星际争霸之php状态模式

如果按照一般的思路,每次我们对一个小兵进行操作的时候,比如一辆坦克,我们都要用if判断他的状态,这样代码中会有很多的if,else或者swith。 不过我们可以发现,我们需要的是他在某个状态下的行为,如果把这些行为按照状态封装起来,就可以减少大量的判断。

1204月

分类:设计模式

作者:

星际争霸之php迭代器模式

那么过多的固定细节(用数组存放)以及依赖细节(对数组循环),将使得代码的关联性变得很高。 待解决的问题:把循环处理的事务变的抽象。 思路:关键是对农民的循环,用数组处理只是一种方式,我们考虑抽象的数组,而不是具体的数组。

1104月

分类:设计模式

作者:

星际争霸之php原型模式

待解决的问题:我们能否减少new的使用,同时避免需要新增对象的时候,了解对象的类名。 思路:php5提供了克隆方法,我们可以新增一个对象,然后每次需要新增和她同类的对象,克隆他就可以了。

0804月

分类:设计模式

作者:

星际争霸之php享元模式

星际的战斗达到后面,地图里面的部队很多,如果我们把每个兵的图像动画和属性值作为一个对象的话,系统的内存里会消耗极大。 我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个。 虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的颜色。比如每个人族的机枪兵。

3103月

分类:设计模式

作者:

星际争霸之php建造器模式

星际里面有不少的任务关,也可以自己编辑地图,画面上有各种地形,建筑和部队。 这存在一个问题,初始化画面的流程很乱。 待解决的问题:完成初始化画面的工作,同时尽量减少各种绘制细节的耦合。 思路:既然星际的画面由几个部分组成:地图(就是地形和矿产),建筑,部队。那么我们把他们看成是零件,组装起来就是最后的产品(整个画面)。

2903月

分类:设计模式

作者:

星际争霸之php代理模式

星际争霸如果是多人对战模式,就会遇到一个问题:如何降低网络延时和负担。 为了确保数据的一致性,我们应该将每个玩家的发生变化的数据不停的传送到开地图的主机进行保存,一旦任何某个玩家的客户机读取数据,就必须向主机请求数据。

2603月

分类:设计模式

作者:

星际争霸之php策略模式

星际开地图对战,等5秒钟进入地图后,每个玩家都会拥有一个基地,几个农民等,还会有初始的人口供给。但这些是根据种族的不同而不同。 待解决的问题:我们需要根据种族的不同,而对玩家进行不同的初始化,最好将这些不同的处理方式封装。

2403月

分类:设计模式

作者:

星际争霸之php职责链模式

星际的兵种属性随着对平衡性的调节,会进行修改。如果这样的话,我们就要考虑减少一个事件和具体处理的关联性。 比如一颗原子弹投下的瞬间,在杀伤范围内的部队或者建筑都会减少血,但是随着距离中心点的远近,受损程度是不同的,而且不同的兵种和建筑受损情况是不同的。

2303月

分类:设计模式

作者:

星际争霸之php观察者模式

当我们在星际中开地图和几家电脑作战的时候,电脑的几个玩家相当于结盟,一旦我们出兵进攻某一家电脑,其余的电脑会出兵救援。 那么如何让各家电脑知道自己的盟友被攻击了呢?并且自动做出反应? 待解决的问题:一旦某个电脑被我们进攻,其他电脑就获知,并且自动出兵救援。

2103月

分类:设计模式

作者:

星际争霸之php正面模式

星际里面的战斗都是在地图上进行的,只要我们可以编辑地图,就可以创造一些新的战役。可是,星际里面的地图绘制相关的代码如果开放出来,估计大多数万家都看不懂,更不要说自己编辑地图了。

2003月

分类:设计模式

作者:

星际争霸之php模板模式

星际中的虫族部队有个特别的进化兵种,就是飞龙,飞龙可以变成空中卫士(天蟹)或者吞噬者(对空的)。另外还有口水兵可以进化变成地刺。 这三个变化过程都是类似的:变化的原部队消失,产生一个蛋或茧,孵化一会儿,蛋消失,新的部队产生。

1603月

分类:设计模式

作者:

星际争霸之php单件和单态模式

星际争霸允许玩家作弊,当然这是在人和电脑对战的时候。而且作弊有个特点,比如快速建造,能量无限是对所有的玩家(包括电脑)都生效,如果关闭了作弊,对所有的玩家的作用都同时消失。 这也就是说如果我们把作弊状态作为一个类,他只能有一个对象。 待解决的问题:确保某个类只能有一个对象。

1503月

分类:设计模式

作者:

星际争霸之php抽象工厂模式

星际争霸是战略游戏,所以同样的兵种,敌我显示是不同的。 典型的就是鼠标的颜色,点中自己的物体的时候,鼠标颜色变成绿色,点中敌人的物体的时候,鼠标颜色变成红色。 还有就是每个物体的状态,点中自己的物体的时候,状态区显示完整的状态,点中敌人的物体的时候,状态区显示一部分信息。 我们假设只考虑鼠标和人族的运输船,玩家自己的运输船点中后状态区会显示里面装载的部队,而点中敌人的则不会显示里

1303月

分类:设计模式

作者:

星际争霸之php工厂方法模式

待解决的问题:虽然简单工厂解决了动态返回不同类型对象的问题,但是实际情况当中,往往在新建一个对象的时候,需要做一些额外处理,比如制造机枪兵的时候需要判断水晶矿是否大于50,而制造火焰兵的时候需要同时判断水晶

»  1  2