您的位置:首页 > 其它

逗B少年搞程序04 策略模式——这次要甩什么技能呢~

2014-04-27 21:35 246 查看
   开始看设计模式已经一周了,没事上课就拿着看看,看了不少但是敲得不多,看到后面已经有些理解困难了。果然这个不动动手就不行啊。

   每次看一个模式的时候都会联想应用的地方,当然最多的时候还是联系游戏中的场景。。。看了大神用剪刀石头布来分析策略模式,本来还有点不太懂的地方也就看得差不多了。

   策略模式,简单说就是事先写好各种能想到的策略,然后根据传递的参数不同,系统给出不同的反应。

   这不就简单了嘛~

   作为一名游戏玩家,策略类游戏也是非常的了解,电脑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;
    }
}
   [b]技能效果可以自己调整,比如伤害类型,伤害数值等等,具体什么效果这里我就不写了,写出来还不知道什么德行的。每个技能是要玩家根据局势自己选择的,那么我们就写几个条件。[/b]

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.释放结果());
}
}
}

   就是这样了。

   策略模式可以配合一些事先写好的组合框选项选项,很快的完成业务逻辑变换,而且维护起来也相对容易。和简单工厂结合一下,也能大大降低系统的耦合性。

          越写越兴奋,妥妥的搞起,先甩对面一脸技能再说~

以上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: