足彩总进球数二三球足彩总进球数二三球

足球戰術之observer及memento篇



作者:不詳    文章來源:足彩总进球数二三球 www.ngfcl.com
發布日期:2005年10月20日

足彩总进球数二三球 www.ngfcl.com    足球戰術中最重要的應該是隊員的跑動,而對于全體隊員的跑動應該符合observer模式才對。因為作為subject的傳球隊員不僅僅是要對被傳球的隊員發送消息,而且要改變所有隊員(observers)的跑動方式。廣播的方式應該分為兩種情況:推和拉。被傳球的隊員是接收推的方式,由傳球隊員的傳球路線直接引導他的跑動路線。其他隊員是接收拉的方式,由視覺接受傳球隊員的跑動及傳球路線繼而決定自己的跑動。代碼如下:
  class 無球隊員{
  public:
        virtual ~觀察();
        virtual void 跑動(傳球隊員* 傳球路線)=0;
  protected:
        觀察();
};

class 傳球隊員{
public:
     virtual ~傳球消息();

     virtual void 準備傳球(無球隊員*);
     virtual void 繼續帶球(無球隊員*);
     virtual void 傳球();

protected:
     傳球消息();
private:
     List<無球隊員*> *_無球隊員;
};

void 傳球消息::準備傳球(無球隊員* 對象){
      _無球隊員->開始觀察(對象);
}

void 傳球消息::繼續帶球(無球隊員* 對象){
     _無球隊員->停止跑動;
}

void 傳球消息::傳球(){
     ListIterator<無球隊員*> i(_無球隊員);
     for (i.First();i.IsDone();i.Next()){
          i.CurrentItem()->傳球后更新跑動(this);
     }
}

隊形的保持需要memento模式,特別是兩個邊后衛,上一場意甲AC米蘭輸給佩努賈,主要是因為邊后衛助攻后未回原位所致。這里使用memento主要是象使用contra那樣讓邊后衛兼任邊前衛,但如果隊員能力不足,或防守任務過于艱巨,以至于需要邊后衛反復無效的來回奔跑則不應該使用此模式。這里由教練事先演練的算法,由一個虛擬的caretaker由進攻的需要向邊后衛(originator)發出請求,生成一個虛擬的memento,后衛前插助攻,防守時邊后衛因為caretaker的防守需要的請求,返回到memento的位置。
代碼如下:
class 邊后衛{
public:
     防守位置* 創建防守位置();
     void 設置防守位置(const 防守位置*);
private:
     位置* _位置;
};

class 防守位置{
public:
      virtual ~防守位置();
pivate:
      friend class 邊后衛;
      防守位置();

     void 設置位置(位置*);
     位置* 得到位置();
private:
     位置* _位置;
};

Copyright © 2002-2012 www.ngfcl.com. All rights reserved.
JSP中文網    備案號:粵ICP備09171188號
成都恒??萍擠⒄褂邢薰?nbsp;   成都市一環路南二段6號新瑞樓三樓8號