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源码之 ext/mysql扩展部分
Jul 17 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
PHP可逆加密/解密函数分享
Sep 25 PHP
php数据类型判断函数有哪些
Sep 23 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
composer.lock文件的作用
Feb 03 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
Laravel实现表单提交
May 07 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
Dec 28 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 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
WHOIS类的修改版
2006/10/09 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
vue路由插件之vue-route
2019/06/13 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
python属于软件吗
2020/06/18 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
最新计算机专业自荐信
2013/10/16 职场文书
车间主管岗位职责
2013/11/14 职场文书
二年级评语大全
2014/04/23 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书