ITPub博客

首页 > 应用开发 > IT综合 > 足球战术->排兵布阵之interpreter篇 (转)

足球战术->排兵布阵之interpreter篇 (转)

原创 IT综合 作者:worldblog 时间:2007-12-09 14:29:17 0 删除 编辑
足球战术->排兵布阵之interpreter篇 (转)[@more@]

接上回:

.NET/develop/read_article.ASP?id=11439">http://www.csdn.net/develop/read_article.asp?id=11439

排兵布阵时使用interpreter模式
可以让教练不用去hack,而是简单
的复用就可以完成复杂的战术。
在这个模式中,client是教练,
context是球队,abstractexpression
是基本打法,teRminalexpression
是单个队员的打法,nonterminal
expression是一条线的打法,
好处是用类来表示打法,可以用
继承来改变或扩展打法;而且
"抽象打法树"中各节点的类的
实现大体类似,易于实现。缺点是
为每种打法定义一个类,当打法
很复杂时,很难维护。interpreter
和composite(组合进攻)在实现上
有很多相通之处,以下是需要考虑的
特殊问题:
1.抽象打法树的创建。可以使用经典
教科书上的打法,也可以由教练提供。
2.打法的实现可以采用visitor(全攻全守)
来实现。
3.当许多打法都以某个队员作为
最终完成者时,这个队员可以作为
flyweight来共享:)
代码如下:
class 基本打法{
public:
  基本打法();
  virtual ~基本打法();

  virtual bool 组织(球队&)=0;
  virtual 基本打法* 进攻(const char*,基本打法&)=0;
  virtual 基本打法* 防守(const char*,基本打法&)=0;
};

class 球队{
public:
  bool 找寻球员(const char*) const;
  void 赋给(球员打法*,bool);
};

class 左后卫打法:public 基本打法{
public:
  左后卫打法(const char*);
  virtual ~左后卫打法();

  virtual bool 组织(球队&);
  virtual 基本打法* 进攻(const char*,基本打法&);
  virtual 基本打法* 防守(const char*,基本打法&);
private:
  char* _左后卫号码;
};

class 双前锋打法:public 基本打法{
public:
  双前锋打法(基本打法*,基本打法*);
  virtual ~双前锋打法();

  virtual bool 组织(球队&);
  virtual 基本打法* 进攻(const char*,基本打法&);
  virtual 基本打法* 防守(const char*,基本打法&);
private:
  基本打法* _前锋甲;
  基本打法* _前锋乙;
};


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-990665/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    6241
  • 访问量
    2406178