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

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

接上回:

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:

基本打法* _前锋甲;

基本打法* _前锋乙;

};

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航