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 相关文章推荐
基于文本的留言簿
Oct 09 PHP
PHP如何得到当前页和上一页的地址?
Nov 27 PHP
php实现的在线人员函数库
Apr 09 PHP
PHP面向对象法则
Feb 23 PHP
php设计模式小结
Feb 15 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 PHP
smarty实现多级分类的方法
Dec 05 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP实现的简单sha1加密功能示例
Aug 27 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 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的库,结果发现很多东西
2006/12/31 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
Python遍历指定文件及文件夹的方法
2015/05/09 Python
详解python中的文件与目录操作
2017/07/11 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
PyCharm代码格式调整方法
2018/05/23 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
Python如何获取文件指定行的内容
2020/05/27 Python
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
电信专业毕业生推荐信
2013/11/18 职场文书
应届毕业生个人自荐信范文
2013/11/30 职场文书
临时用工协议书范本
2014/10/29 职场文书
试用期辞职信范文
2015/03/02 职场文书
二审答辩状格式
2015/05/22 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电