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 相关文章推荐
桌面中心(四)数据显示
Oct 09 PHP
php桌面中心(一) 创建数据库
Mar 11 PHP
PHP 编写的 25个游戏脚本
May 11 PHP
php 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
PHP Try-catch 语句使用技巧
Feb 28 PHP
PHP数组函数知识汇总
May 12 PHP
php版微信公众号自定义分享内容实现方法
Sep 22 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP扩展安装方法步骤解析
Nov 24 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 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数组无限分级数据的层级化处理代码
2012/12/29 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
PHP7 windows支持
2021/03/09 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
sails框架的学习指南
2014/12/22 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
VSCode搭建React Native环境
2020/05/07 Javascript
python调用API实现智能回复机器人
2018/04/10 Python
python实现彩票系统
2020/06/28 Python
python获取txt文件词向量过程详解
2019/07/05 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
Python将字典转换为XML的方法
2020/08/01 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
军训鉴定表自我鉴定
2014/02/13 职场文书
产品售后服务承诺书
2014/05/21 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
产品调价通知函
2015/04/20 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
毕业感言怎么写
2015/07/31 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle