$P1->strat->owner =$P1;
這樣就足夠了。
對話已開啓。
好吧,如果我們接觸,從理論和概念的角度來看這個問題,我們可以解決在幾個不同的方式隱含的問題。讓我們來看看球員的戰略是什麼。顧名思義,策略基本上是一個驅動因素,可能會影響遊戲在特定環境中的行爲。這進一步表明,以下做法將使意義:
$player->useStrategy($strategy);
此外,玩家最有可能是在給定的範圍內行事,那麼,它將使用$戰略目標作爲控制器,並會通過從輸入任何戰略行爲控制者滿足條件。那麼,考慮到玩家可以:
1)幫助確定要進行的活動
2)使用玩家界面來響應戰略行爲必須應用的任何動作。現在
,我們可以假設,可能有不同的策略,也可以很容易地應用到任何球員,因爲該策略類實現戰略界面。在這種情況下,Strategy不需要知道關於玩家的任何信息。如果只是,有不同類型的球員有不同的界面,可以允許不同的控制組合。但是在這種情況下,爲特定玩家類設置擴展類來實現這些玩家提供的額外功能將更爲明智。
class Strategy {
private $player;
public usePlayer($player){
$this->player = $player;
}
public makeNextMove($input){
1) return array($a,$b);
2) return new Behavior_NextMove()->setTarget($a,$b);
3) $this->player->move($a, $b);
}
}
class Strategy_MegaPlayer extends Strategy {
public makeNextMove($input){
parent::makeNextMove($input);
$player->useMegaPlayerSpecialPower();
}
}
另外,也可以集中戰略目標,其中,通過配置接口的基礎上,玩家將決定適當的行動和戰略的類型,無論是根據玩家類型和配置它的。
但似乎結構合理的戰略性支持類,你最受益。
我同意將策略類的名稱傳遞給構造函數。根據你對唐·科比的解決方案的評論,它最有意義。 – Sonny