开始看设计模式已经一周了,没事上课就拿着看看,看了不少但是敲得不多,看到后面已经有些理解困难了。果然这个不动动手就不行啊。
每次看一个模式的时候都会联想应用的地方,当然最多的时候还是联系游戏中的场景。。。看了大神用剪刀石头布来分析策略模式,本来还有点不太懂的地方也就看得差不多了。
策略模式,简单说就是事先写好各种能想到的策略,然后根据传递的参数不同,系统给出不同的反应。
这不就简单了嘛~
作为一名游戏玩家,策略类游戏也是非常的了解,电脑AI会根据玩家不同的站位,职业,生命值,魔法等等条件,瞬间做出各种各样的反应。
恩,差不多。
上次有人要看简单兵营模式,这次就写个强行联系dota的吧。
首先,一般来说dota中一个英雄有四个技能,而这四个技能的释放时机是要玩家自己判断的。就拿萌萌的冰女来说,四个技能分别是霜冻新星,冰封禁制,辉煌光环,极寒领域。那么着四个技能就是我们要事先写好的四个策略类。
abstract class 技能
{
public abstract string 释放();
}
class 霜冻新星 : 技能
{
private string name = "霜冻新星";
public override string 释放()
{
return name;
}
}
class 冰封禁制 : 技能
{
private string name = "冰封禁制";
public override string 释放()
{
return name;
}
}
class 辉煌光环 : 技能
{
private string name = "辉煌光环";
public override string 释放()
{
return name;
}
}
class 极寒领域 : 技能
{
private string name = "极寒领域";
public override string 释放()
{
return name;
}
}
技能效果可以自己调整,比如伤害类型,伤害数值等等,具体什么效果这里我就不写了,写出来还不知道什么德行的。每个技能是要玩家根据局势自己选择的,那么我们就写几个条件。
class 选择
{
private 技能 jn = null;
public 选择(string condition)
{
switch (condition)
{
case "爆发":
霜冻新星 jn1 = new 霜冻新星();
jn = jn1;
break;
case "控制":
冰封禁制 jn2 = new 冰封禁制();
jn = jn2;
break;
case "队友缺魔法":
辉煌光环 jn3 = new 辉煌光环();
jn = jn3;
break;
case "队友打不过了":
极寒领域 jn4 = new 极寒领域();
break;
}
}
public string 释放结果()
{
return jn.释放();
}
}
最后就是根据玩家的选择,把condition的传过去。
namespace ConsoleApplication8
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("当前局势:");
选择 xz = new 选择(Console.ReadLine());
Console.WriteLine(xz.释放结果());
}
}
}
就是这样了。
策略模式可以配合一些事先写好的组合框选项选项,很快的完成业务逻辑变换,而且维护起来也相对容易。和简单工厂结合一下,也能大大降低系统的耦合性。
越写越兴奋,妥妥的搞起,先甩对面一脸技能再说~
以上