php创建游戏房间思路,php设计模式之建造器模式分析【星际争霸游戏案例】
本文实例讲述了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设计模式之建造器模式分析【星际争霸游戏案例】相关推荐
- 星际争霸php,php设计模式之建造器模式分析【星际争霸游戏案例】
本文实例讲述了php设计模式之建造器模式.分享给大家供大家参考,具体如下: 星际里面有不少的任务关,也可以自己编辑地图,画面上有各种地形,建筑和部队. 这存在一个问题,初始化画面的流程很乱. 待解决的 ...
- 多智能体强化学习_基于多智能体强化学习主宰星际争霸游戏
大家好,今天我们来介绍基于多智能体强化学习主宰星际争霸游戏这篇论文 Grandmaster level in StarCraft II using multi-agent reinforcement ...
- Java项目:星际争霸游戏(java+swing+awt界面编程+IO输入输出流+socket+udp网络通信)
源码获取:博客首页 "资源" 里下载! 功能简介: 星际争霸游戏项目,该项目实现了单人模式和多人合作模式,可记录游戏进度,新建游戏,载入历史记录等功能,多人模式下可以创建一个区,然 ...
- java手机游戏星际争霸_java Swing实现的星际争霸游戏源码
今天给大家介绍一下由Java swing实现的星际争霸游戏项目,该项目实现了单人模式和多人合作模式,可记录游戏进度,新建游戏,载入历史记录等功能,多人模式下可以创建一个区,然后邀请玩家加入一起玩,主要 ...
- 如何用python语言控制星际争霸游戏
StarCraft II API是由暴雪开发的一个接口,允许研究人员和开发人员通过Python程序访问游戏状态并控制单元.这个API是专为人工智能研究而设计的,不适用于玩游戏. 安装和使用StarCr ...
- php 星际争霸 面向对象,php面向对象基础详解【星际争霸游戏案例】
本文实例讲述了php面向对象基础.分享给大家供大家参考,具体如下: 前言 面向对象博大精深,对于从未接触过得的人,会觉得一头雾水. 学习的资料很多,但大多比较抽象,所以我用经典的游戏-星际争霸来讨论P ...
- 深度 | 人工智能的游戏征途:超级玛丽简直小菜一碟,星际争霸、LOL才是大boss...
人类玩家依然能在类似<星际争霸>这样的游戏中夺冠 AP Photo/David Goldman "深蓝"打败人类距今已有20年,离 AlphaGo和李世石的世纪围棋之战 ...
- 星际争霸php,php设计模式之原型模式分析【星际争霸游戏案例】
本文实例讲述了php设计模式之原型模式.分享给大家供大家参考,具体如下: 我们一般用new来新增对象,不过很多时候新增一个对象需要一些工作.而星际里面往往会新增某些类的大量的对象,比如新增很多机枪兵和 ...
- php迭代器实例,php设计模式之迭代器模式实例分析【星际争霸游戏案例】
本文实例讲述了php设计模式之迭代器模式.分享给大家供大家参考,具体如下: 星际的任务关一般会有这样的设定:一开始电脑的农民不采矿,如果战斗打响,或者玩家造出第一个兵,电脑的农民开始采矿. 我们自然会 ...
- 星际争霸游戏中的操作心得
出于对星际的热爱,我在网上找了很多次有关微操技巧的文章.但是让我很失望的是,除了一些关于基本的龙骑舞,克隆等基本的现在大家都已经熟悉的操作介绍之外,几乎找不到一些更详细的文章(不过有几篇关于追尾,还有 ...
最新文章
- java中optionnull_用 option 代替 null
- Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)
- Spring5 版本新特性简述
- 从ReadImage到ML- 一个不错的博客
- SPL - 写着简单跑得又快的数据库语言
- jquery对json 键值对或数组的增加、删除、遍历操作
- 面试题24 二叉搜索树的后序遍历序列
- UI设计摘要背景素材|简单分层PSD格式化模板,为项目增加背景
- 不再设立 Flag,马克·扎克伯格的新年寄语!
- Linux内核入门(二)——用户态向内核态切换
- html音乐播放器代码大全,关于HTML 音乐播放器代码|音乐播放器网页代码大全(转)...
- Matlab数值计算差商与插值
- android 免 root修改位置打卡
- 设计模式笔记 ------ 建造者模式
- pycharm报错: with exit code -1073740791 (0xC0000409)
- [Matlab科学计算] 四阶Runge-Kutta法解常微分方程
- 里氏替换原则——举例说明Java设计模式中的里氏替换原则
- 我,在日本开密室逃脱,钱还没赚,人进“橘子”了……
- 程序员上班第一天必用工具,git速查表
- gk的树---dfs+贪心
热门文章
- amazeui学习笔记--css(常用组件2)--面包屑导航Breadcrumb
- 程序中使用log4J打印信息的两种方式
- django-xadmin隐藏菜单不显示
- 拦截JQuery的ajax
- 【版本控制】如何从github 上删除项目
- 基于改进蜂群算法和灰色模型的管道腐蚀预测 - 附代码
- 【已经解决】TypeError: read_img() missing 1 required positional argument: ‘filename‘
- ArcGISEngine二次开发(1):系统基本功能
- 使用XUtils进行文件的断点下载
- Linux下常用组的权限特点,Linux中的用户与用户组