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


Posted in PHP onMarch 26, 2020

本文实例讲述了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 相关文章推荐
3
Oct 09 PHP
深入了解php4(1)--回到未来
Oct 09 PHP
我的论坛源代码(二)
Oct 09 PHP
PHP 采集程序 常用函数
Dec 18 PHP
php若干单维数组遍历方法的比较
Sep 20 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
CodeIgniter框架URL路由总结
Sep 03 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
php页面缓存方法小结
Jan 10 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
WordPress中获取所使用的模板的页面ID的简单方法
Dec 31 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 #PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 #PHP
You might like
php网页版聊天软件实现代码
2016/08/12 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
python读写二进制文件的方法
2015/05/09 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
tensorflow 变长序列存储实例
2020/01/20 Python
python drf各类组件的用法和作用
2021/01/12 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
美国性感内衣店:Yandy
2018/06/12 全球购物
单位工程竣工验收方案
2014/03/16 职场文书
校外活动方案
2014/08/28 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
2015年中个人总结范文
2015/03/10 职场文书
交通事故调解协议书
2015/05/20 职场文书
一个都不能少观后感
2015/06/04 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
高一军训口号
2015/12/25 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
redis cluster支持pipeline的实现思路
2021/06/23 Redis
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android
实操Python爬取觅知网素材图片示例
2021/11/27 Python
JVM之方法返回地址详解
2022/02/28 Java/Android
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python
如何利用python实现Simhash算法
2022/06/28 Python
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server