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


Posted in PHP onMarch 24, 2020

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

星际里面的战斗都是在地图上进行的,只要我们可以编辑地图,就可以创造一些新的战役。可是,星际里面的地图绘制相关的代码如果开放出来,估计大多数万家都看不懂,更不要说自己编辑地图了。

待解决的问题:在不了解地图代码的结构下,我们要让玩家自己编辑地图。

思路:对于玩家而言,他熟悉的是水晶矿,高地这些形状,他和系统通过鼠标交互。我们可以设计一个地图编辑器让玩家使用,而无需让他研究绘制地图的细节代码。
(实际上暴雪公司就是这样做的,很多玩家甚至暴雪内部人员都是用星际中的地图编辑器制作地图)

正面模式(Facade)示例:

<?php
  //玩家的鼠标对象,记录鼠标在编辑其中的状态
  class mouse 
  {
    //鼠标所处的X轴坐标
    public static $X;

    //鼠标当前能绘制的对象,比如水晶矿,河流等
    public static $object;

    //鼠标所处的Y轴坐标
    public static $Y;
  }

  //地图编辑器
  class mapEdit 
  {
    //绘制方法
    public static function draw()
    {
      //根据鼠标对象的状态在地图上绘制各种东西

      //如果是水晶矿
      if(mouse::$object == "ore")
      {
        //调用水晶矿类的绘制方法,这个类定义在下面,这是真正的绘制,但玩家不必学习他的细节
        ore::draw();        
      }
      //如果是河流
      elseif(mouse::$object == "river")
      {
        //调用河流类的绘制方法,这个类定义在下面,这是真正的绘制,但玩家不必学习他的细节
        river::draw();
      }
    }
  }

  //水晶矿类
  class ore 
  {
    //剩余的矿,以及其他属性,这里略过
    public $remain;

    //绘制水晶矿
    public static function draw()
    {
      //实际的绘制水晶矿的底层细节代码
    }
  }

  //河流类
  class river 
  {
    //绘制河流
    public static function draw()
    {
      //实际的绘制河流的底层细节代码
    }
  }

  //玩家在地图编辑器上点击绘制对象列表上的水晶矿对象
  mouse::$object = "ore";

  //玩家移动鼠标
  mouse::$X = 311;
  mouse::$Y = 126;

  //在地图上点击,表示绘制当前对象,也就是一个水晶矿
  mapEdit::draw();

?>

用途总结:正面模式让使用者集中于他所要进行的工作,而不必知道全部细节,或者说提供了一个容易使用的工具,同时屏蔽了底层细节,不必让使用者重新学习。

实现总结:需要一个类似上面地图编辑器的代码类,帮助玩家方便的进行操作。

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

PHP 相关文章推荐
第五章 php数组操作
Dec 30 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
php实现删除空目录的方法
Mar 16 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 PHP
详解PHP中的8个魔术常量
Jul 06 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 #PHP
PDO实现学生管理系统
Mar 21 #PHP
You might like
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
总结一些js自定义的函数
2006/08/05 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
Python爬取读者并制作成PDF
2015/03/10 Python
基于Python实现文件大小输出
2016/01/11 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
美国羊皮公司:Overland
2018/01/15 全球购物
会计电算化专业毕业生自荐信
2013/12/20 职场文书
扬尘污染防治方案
2014/06/15 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
创业计划书之甜品店
2019/09/18 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis