1. 程式人生 > 程式設計 >php設計模式之策略模式例項分析【星際爭霸遊戲案例】

php設計模式之策略模式例項分析【星際爭霸遊戲案例】

本文例項講述了php設計模式之策略模式。分享給大家供大家參考,具體如下:

星際開地圖對戰,等5秒鐘進入地圖後,每個玩家都會擁有一個基地,幾個農民等,還會有初始的人口供給。但這些是根據種族的不同而不同。

待解決的問題:我們需要根據種族的不同,而對玩家進行不同的初始化,最好將這些不同的處理方式封裝。

思路:定義初始化的介面,然後製作不同種族的初始化類。

策略模式(Strategy)示例:

為了使程式碼不至於過長,一部分類的定義不在此寫出,如果要除錯,請用字串等方式替代new。

<?php
  //玩家的類
  class player
  {
    //所屬種族
    public $race;

    //部隊
    public $army;

    //建築
    public $building;

    //人口供給
    public $supply;

    //建構函式,設定所屬種族
    public function __construct($race)
    {
      $this->race = $race;
    }
  }

  //初始化的介面
  interface initialPlayer 
  {
    //製造初始化的部隊
    public function giveArmy($player);

    //製造初始化的建築
    public function giveBuilding($player);

    //初始化人口供給
    public function giveSupply($player);
  }

  //蟲族的初始化演算法
  class zergInitial implements initialPlayer 
  {
    //製造初始化的部隊
    public function giveArmy($player)
    {
      //一個Overlord
      $player->army[] = new Overlord();

      //四個蟲族農民
      for($i=0; $i<4;$i++)
      {
        $player->army[] = new Drone();
      }
    }

    //製造初始化的建築
    public function giveBuilding($player)
    {
      //一個基地
      $player->building[] = new Hatchery();
    }

    //初始化人口供給
    public function giveSupply($player)
    {
      //蟲族初始人口供給為9
      $player->supply = 9;
    }
  }

  //人族的初始化演算法
  class terranInitial implements initialPlayer 
  {
    //製造初始化的部隊
    public function giveArmy($player)
    {
      //四個人族農民
      for($i=0; $i<4;$i++)
      {
        $player->army[] = new SVC();
      }
    }

    //製造初始化的建築
    public function giveBuilding($player)
    {
      //一個基地
      $player->building[] = new Hatchery();
    }

    //初始化人口供給
    public function giveSupply($player)
    {
      //人族初始人口供給為10
      $player->supply = 10;
    }
  }

  //初始化的控制類
  class initialController 
  {
    //建構函式,引數為玩家的陣列
    public function __construct($playerArray)
    {
      foreach ($playerArray as $player)
      {
        switch ($player->race)
        {
          case 'zerg':
            $initialController = new zergInitial();
            break;
          case 'terran':
            $initialController = new terranInitial();
            break;
        }

        $initialController->giveArmy($player);
        $initialController->giveBuilding($player);
        $initialController->giveSupply($player);
      }
    }
  }

  //假設兩個蟲族,一個人族
  $playerArray = array(
    new player('zerg'),new player('zerg'),new player('terran'),);

  //進行初始化工作
  $initialController = new initialController($playerArray);
?>

用途總結:策略模式可以將不同情況下的演算法封裝,根據具體的情況呼叫。

實現總結:需要一個介面,規定演算法規範,使用者(比如初始化來)只要呼叫對應的演算法就可以了。

更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php面向物件程式設計入門教程》、《PHP陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家PHP程式設計有所幫助。