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

星际里面有不少的任务关,也可以自己编辑地图,画面上有各种地形,建筑和部队。

这存在一个问题,初始化画面的流程很乱。

待解决的问题:完成初始化画面的工作,同时尽量减少各种绘制细节的耦合。

思路:既然星际的画面由几个部分组成:地图(就是地形和矿产),建筑,部队。那么我们把他们看成是零件,组装起来就是最后的产品(整个画面)。

建造器(Builder)模式示例:

//规范制造各个零件的接口

interface Builder

{

//制造地图零件

public function buildMapPart();

//制造建筑零件

public function buildBuildingPart();

//制造部队零件

public function buildArmyPart();

//组装零件

public function getResult();

}

//实际建造器类,比如初始化某个任务关

class ConcreteBuilder implements Builder

{

//制造地图零件

public function buildMapPart()

{

//根据任务的设定画上地图

echo "地图零件\n";

}

//制造建筑零件

public function buildBuildingPart()

{

//根据任务的设定画上建筑,包括玩家的和敌人的

echo "建筑零件\n";

}

//制造部队零件

public function buildArmyPart()

{

//根据任务的设定画上部队,包括玩家的和敌人的

echo "部队零件\n";

}

//组装零件

public function getResult()

{

//将所有的东西叠加和处理,形成初始化画面

echo "组装零件\n";

}

}

//监督类,也就是控制绘制流程的类

class Director

{

//私有属性,确定使用的建造器

private $builder;

//构造方法,参数为选定的建造器对象

public function __construct($builder)

{

//确定使用的建造器

$this->builder = $builder;

}

//负责建造流程的方法,调用建造器对象的方法,制造所有零件

public function buildeAllPart()

{

//制造地图零件

$this->builder->buildMapPart();

//制造建筑零件

$this->builder->buildBuildingPart();

//制造部队零件

$this->builder->buildArmyPart();

}

}

//假设根据任务关,初始化我们需要的实际建造器对象

$concreteBuilder = new ConcreteBuilder();

//初始化一个监督对象

$director = new Director($concreteBuilder);

//制造所有零件

$director->buildeAllPart();

//最后让建造器组装零件,生成画面

$concreteBuilder->getResult();

?>

运行结果:

地图零件

建筑零件

部队零件

组装零件

用途总结:建造器模式可以将流程和细节分离,各司其职。

实现总结:需要一个建造器接口或者抽象类,负责规范各个方法,比如上面的Builder。然后让实际的建造器类去实现所有的方法,比如上面的ConcreteBuilder。同时需要负责流程管理的监督类,比如上面的Director,负责调用建造器的各个零件制造方法。最后让建造器去组装所有的零件。

希望本文所述对大家PHP程序设计有所帮助。

php创建游戏房间思路,php设计模式之建造器模式分析【星际争霸游戏案例】相关推荐

  1. 星际争霸php,php设计模式之建造器模式分析【星际争霸游戏案例】

    本文实例讲述了php设计模式之建造器模式.分享给大家供大家参考,具体如下: 星际里面有不少的任务关,也可以自己编辑地图,画面上有各种地形,建筑和部队. 这存在一个问题,初始化画面的流程很乱. 待解决的 ...

  2. 多智能体强化学习_基于多智能体强化学习主宰星际争霸游戏

    大家好,今天我们来介绍基于多智能体强化学习主宰星际争霸游戏这篇论文 Grandmaster level in StarCraft II using multi-agent reinforcement ...

  3. Java项目:星际争霸游戏(java+swing+awt界面编程+IO输入输出流+socket+udp网络通信)

    源码获取:博客首页 "资源" 里下载! 功能简介: 星际争霸游戏项目,该项目实现了单人模式和多人合作模式,可记录游戏进度,新建游戏,载入历史记录等功能,多人模式下可以创建一个区,然 ...

  4. java手机游戏星际争霸_java Swing实现的星际争霸游戏源码

    今天给大家介绍一下由Java swing实现的星际争霸游戏项目,该项目实现了单人模式和多人合作模式,可记录游戏进度,新建游戏,载入历史记录等功能,多人模式下可以创建一个区,然后邀请玩家加入一起玩,主要 ...

  5. 如何用python语言控制星际争霸游戏

    StarCraft II API是由暴雪开发的一个接口,允许研究人员和开发人员通过Python程序访问游戏状态并控制单元.这个API是专为人工智能研究而设计的,不适用于玩游戏. 安装和使用StarCr ...

  6. php 星际争霸 面向对象,php面向对象基础详解【星际争霸游戏案例】

    本文实例讲述了php面向对象基础.分享给大家供大家参考,具体如下: 前言 面向对象博大精深,对于从未接触过得的人,会觉得一头雾水. 学习的资料很多,但大多比较抽象,所以我用经典的游戏-星际争霸来讨论P ...

  7. 深度 | 人工智能的游戏征途:超级玛丽简直小菜一碟,星际争霸、LOL才是大boss...

    人类玩家依然能在类似<星际争霸>这样的游戏中夺冠 AP Photo/David Goldman "深蓝"打败人类距今已有20年,离 AlphaGo和李世石的世纪围棋之战 ...

  8. 星际争霸php,php设计模式之原型模式分析【星际争霸游戏案例】

    本文实例讲述了php设计模式之原型模式.分享给大家供大家参考,具体如下: 我们一般用new来新增对象,不过很多时候新增一个对象需要一些工作.而星际里面往往会新增某些类的大量的对象,比如新增很多机枪兵和 ...

  9. php迭代器实例,php设计模式之迭代器模式实例分析【星际争霸游戏案例】

    本文实例讲述了php设计模式之迭代器模式.分享给大家供大家参考,具体如下: 星际的任务关一般会有这样的设定:一开始电脑的农民不采矿,如果战斗打响,或者玩家造出第一个兵,电脑的农民开始采矿. 我们自然会 ...

  10. 星际争霸游戏中的操作心得

    出于对星际的热爱,我在网上找了很多次有关微操技巧的文章.但是让我很失望的是,除了一些关于基本的龙骑舞,克隆等基本的现在大家都已经熟悉的操作介绍之外,几乎找不到一些更详细的文章(不过有几篇关于追尾,还有 ...

最新文章

  1. java中optionnull_用 option 代替 null
  2. Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)
  3. Spring5 版本新特性简述
  4. 从ReadImage到ML- 一个不错的博客
  5. SPL - 写着简单跑得又快的数据库语言
  6. jquery对json 键值对或数组的增加、删除、遍历操作
  7. 面试题24 二叉搜索树的后序遍历序列
  8. UI设计摘要背景素材|简单分层PSD格式化模板,为项目增加背景
  9. 不再设立 Flag,马克·扎克伯格的新年寄语!
  10. Linux内核入门(二)——用户态向内核态切换
  11. html音乐播放器代码大全,关于HTML 音乐播放器代码|音乐播放器网页代码大全(转)...
  12. Matlab数值计算差商与插值
  13. android 免 root修改位置打卡
  14. 设计模式笔记 ------ 建造者模式
  15. pycharm报错: with exit code -1073740791 (0xC0000409)
  16. [Matlab科学计算] 四阶Runge-Kutta法解常微分方程
  17. 里氏替换原则——举例说明Java设计模式中的里氏替换原则
  18. 我,在日本开密室逃脱,钱还没赚,人进“橘子”了……
  19. 程序员上班第一天必用工具,git速查表
  20. gk的树---dfs+贪心

热门文章

  1. amazeui学习笔记--css(常用组件2)--面包屑导航Breadcrumb
  2. 程序中使用log4J打印信息的两种方式
  3. django-xadmin隐藏菜单不显示
  4. 拦截JQuery的ajax
  5. 【版本控制】如何从github 上删除项目
  6. 基于改进蜂群算法和灰色模型的管道腐蚀预测 - 附代码
  7. 【已经解决】TypeError: read_img() missing 1 required positional argument: ‘filename‘
  8. ArcGISEngine二次开发(1):系统基本功能
  9. 使用XUtils进行文件的断点下载
  10. Linux下常用组的权限特点,Linux中的用户与用户组