当前位置:首页 > PHP教程 > php面向对象 > 列表

php设计模式之策略模式实例分析【星际争霸游戏案例】

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-22 11:17:05 浏览: 评论:0 

本文实例讲述了php设计模式之策略模式,分享给大家供大家参考,具体如下:

星际开地图对战,等5秒钟进入地图后,每个玩家都会拥有一个基地,几个农民等,还会有初始的人口供给。但这些是根据种族的不同而不同。

待解决的问题:我们需要根据种族的不同,而对玩家进行不同的初始化,最好将这些不同的处理方式封装。

思路:定义初始化的接口,然后制作不同种族的初始化类。

策略模式(Strategy)示例:

为了使代码不至于过长,一部分类的定义不在此写出,如果要调试,请用字符串等方式替代new。

  1. <?php 
  2.   //玩家的类 
  3.   class player 
  4.   { 
  5.     //所属种族 
  6.     public $race
  7.  
  8.     //部队 
  9.     public $army
  10.  
  11.     //建筑 
  12.     public $building
  13.  
  14.     //人口供给 
  15.     public $supply
  16.  
  17.     //构造函数,设定所属种族 
  18.     public function __construct($race
  19.     { 
  20.       $this->race = $race
  21.     } 
  22.   } 
  23.  
  24.   //初始化的接口 
  25.   interface initialPlayer  
  26.   { 
  27.     //制造初始化的部队 
  28.     public function giveArmy($player); 
  29.  
  30.     //制造初始化的建筑 
  31.     public function giveBuilding($player); 
  32.  
  33.     //初始化人口供给 
  34.     public function giveSupply($player); 
  35.   } 
  36.  
  37.   //虫族的初始化算法 
  38.   class zergInitial implements initialPlayer  
  39.   { 
  40.     //制造初始化的部队 
  41.     public function giveArmy($player
  42.     { 
  43.       //一个Overlord 
  44.       $player->army[] = new Overlord(); 
  45.  
  46.       //四个虫族农民 
  47.       for($i=0; $i<4;$i++) 
  48.       { 
  49.         $player->army[] = new Drone(); 
  50.       } 
  51.     } 
  52.  
  53.     //制造初始化的建筑 
  54.     public function giveBuilding($player
  55.     { 
  56.       //一个基地 
  57.       $player->building[] = new Hatchery(); 
  58.     } 
  59.  
  60.     //初始化人口供给 
  61.     public function giveSupply($player
  62.     { 
  63.       //虫族初始人口供给为9 
  64.       $player->supply = 9; 
  65.     } 
  66.   } 
  67.  
  68.   //人族的初始化算法 
  69.   class terranInitial implements initialPlayer  
  70.   { 
  71.     //制造初始化的部队 
  72.     public function giveArmy($player
  73.     { 
  74.       //四个人族农民 
  75.       for($i=0; $i<4;$i++) 
  76.       { 
  77.         $player->army[] = new SVC(); 
  78.       } 
  79.     } 
  80.  
  81.     //制造初始化的建筑 
  82.     public function giveBuilding($player
  83.     { 
  84.       //一个基地 
  85.       $player->building[] = new Hatchery(); 
  86.     } 
  87.  
  88.     //初始化人口供给 
  89.     public function giveSupply($player
  90.     { 
  91.       //人族初始人口供给为10 
  92.       $player->supply = 10; 
  93.     } 
  94.   } 
  95.  
  96.   //初始化的控制类 
  97.   class initialController  
  98.   { 
  99.     //构造函数,参数为玩家的数组 
  100.     public function __construct($playerArray
  101.     { 
  102.       foreach ($playerArray as $player
  103.       { 
  104.         switch ($player->race) 
  105.         { 
  106.           case 'zerg'
  107.             $initialController = new zergInitial(); 
  108.             break
  109.           case 'terran'
  110.             $initialController = new terranInitial(); 
  111.             break
  112.         } 
  113.  
  114.         $initialController->giveArmy($player); 
  115.         $initialController->giveBuilding($player); 
  116.         $initialController->giveSupply($player); 
  117.       } 
  118.     } 
  119.   } 
  120.  
  121.   //假设两个虫族,一个人族 
  122.   $playerArray = array
  123.     new player('zerg'),  
  124.     new player('zerg'),  
  125.     new player('terran'), 
  126.   ); 
  127.  
  128.   //进行初始化工作 
  129.   $initialController = new initialController($playerArray); 
  130. ?> 

用途总结:策略模式可以将不同情况下的算法封装,根据具体的情况调用。

实现总结:需要一个接口,规定算法规范,使用者(比如初始化来)只要调用对应的算法就可以了。

Tags: php策略模式 php星际争霸

分享到: