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 相关文章推荐
模仿OSO的论坛(二)
Oct 09 PHP
PHP动态变静态原理
Nov 25 PHP
php 正则匹配函数体
Aug 25 PHP
PHP如何抛出异常处理错误
Mar 02 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
Oct 30 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
php通过文件头判断格式的方法
May 28 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
PHP设计模式之工厂模式定义与用法详解
Apr 03 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 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后门URL的防范
2013/11/12 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
js 页面传参数时 参数值含特殊字符的问题
2009/12/13 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
《再别康桥》教学反思
2014/02/12 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
学生保证书
2015/01/16 职场文书
人生遥控器观后感
2015/06/11 职场文书
投诉信回复范文
2015/07/03 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers