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正则
Jul 07 PHP
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
PHP程序员编程注意事项
Apr 10 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
php中 ob_start等函数截取标准输出的方法
Jun 22 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
redis+php实现微博(一)注册与登录功能详解
Sep 23 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 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
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
php封装的page分页类完整实例
2016/10/18 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
传智播客学习之java 反射
2009/11/22 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
python批量提交沙箱问题实例
2014/10/08 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
行政助理的岗位职责
2014/02/18 职场文书
高三励志标语
2014/06/05 职场文书
119消防日活动总结
2014/08/29 职场文书
Python List remove()实例用法详解
2021/08/02 Python
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python