欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

从魔兽世界看策略模式

程序员文章站 2022-04-22 16:43:18
...

    策略这两个字乍一听上去有点像三国志游戏里,那些鬼点子特别多的谋士出的阴谋阳谋之类的。但在面向对象的软件世界中,策略的范围要比谋略广很多。

 

    我想以一款网络游戏来描述这个模式,玩过魔兽世界的人都知道它是比较早引入地下城(Dungeon)概念的游戏之一。地下城里有各种妖魔鬼怪给玩家砍啊杀啊。杀死boss后会掉落玩家所需要的各种装备。地下城从低级到高级,种类繁多,适合不同等级的玩家去探险刷装备。其中一些特殊的地下城因为难度较高,对玩家的人数有要求,需要组队才能通过冒险。越高难度需要的人数越多,当然奖励也会越丰厚。

 

    比如著名的黑龙公主巢穴,这个地下城可以支持10人组队和25人组队两种游戏难度。组队在游戏中指的是由一名队长(玩家)联合其他玩家组成一个小队,一起完成冒险。队长必须先选定难度(比如10人或者25),再开始召集各路好手,进入地下城探险。

 

    闲聊结束。

     

    接下来,让我们从游戏设计者的角度来看待这个问题。刚开始的设计应该是这样的。一切看上去很简单。

     
从魔兽世界看策略模式
            
    
    博客分类: 设计模式 设计模式策略模式策略StrategyPattern
                  

    后来游戏开发者突发奇想,觉得25人也没有挑战性了,又想增加难度,加入一个40人组队的难度。


从魔兽世界看策略模式
            
    
    博客分类: 设计模式 设计模式策略模式策略StrategyPattern
 

 

    其实在加入40人难度时,合格的设计者就会开始思考,将来是否还会加入60人甚至80人难度?

 

    根据不同难度,分别初始化地下城。其实初始化这个动作本身就可以看做一种策略。策略模式也可以在此发挥它的长处。

 

    我们现在需要定义三种策略,策略其实就是一种动作,如果用计算机语言描述约等于算法(后面统一用算法来代替动作这个名词)。

    

    如下图所示

                    
从魔兽世界看策略模式
            
    
    博客分类: 设计模式 设计模式策略模式策略StrategyPattern
 

 

    到这里其实还没有真正发挥策略模式的优点。

 

    如果用抽象的概念来看,这三个动作其实都一样,只是具体算法不同。在抽象的世界里应该是下图这样

                     
从魔兽世界看策略模式
            
    
    博客分类: 设计模式 设计模式策略模式策略StrategyPattern
 

    这样做的好处是如果以后要加入60人或者80人的地下城,程序的结构会非常清晰。

    上面的结构其实就是策略模式的典型应用,当然到这里还没有结束。那么如何应用策略呢。

 

     我想用伪代码的形式来说明策略模式的应用,分为不使用模式和使用模式:

      1、应用策略模式之前,看到的应该是这样的逻辑:

 

      //如果是10人地下城

      //初始化10人地下城

      //否则如果是25地下城

      //初始化25人地下城

      .....

 

      2、应用策略模式之后,看到的应该是这样的逻辑:

      //根据玩家人数初始化对应的地下城(统一入口)

 

      不使用模式的做法在算法不是非常多的情况下非常适合。套用程序员的白话讲就是把代码逻辑写死。

      但第二种更灵活,并且很方便扩展。因为人数是动态的,策略模式带来的好处是明显的,就是在程序运行时动态地替换算法。而不用把代码写死。

     关于如何用代码实现策略模式,网上有很多文章,使了用各种语言,不管是C++,C#,Java还是动态语言来说明和讲解。都讲的很多,这里就不再重复。

 

     最后来总结一下策略模式的使用,大体实现都是两步:

     第一步:针对每种策略抽象各自的算法。使各算法可以互不影响。

     第二步:提供统一入口。用于根据指定条件来替换算法。

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 从魔兽世界看策略模式
            
    
    博客分类: 设计模式 设计模式策略模式策略StrategyPattern
  • 大小: 18.9 KB
  • 从魔兽世界看策略模式
            
    
    博客分类: 设计模式 设计模式策略模式策略StrategyPattern
  • 大小: 33.6 KB
  • 从魔兽世界看策略模式
            
    
    博客分类: 设计模式 设计模式策略模式策略StrategyPattern
  • 大小: 4.4 KB
  • 从魔兽世界看策略模式
            
    
    博客分类: 设计模式 设计模式策略模式策略StrategyPattern
  • 大小: 9 KB