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 06 PHP
PHP Document 代码注释规范
Apr 13 PHP
字母顺序颠倒而单词顺序不变的php代码
Aug 08 PHP
20个PHP常用类库小结
Sep 11 PHP
php文本转图片自动换行的方法
Mar 13 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
浅谈php://filter的妙用
Mar 05 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 #PHP
PHP中关于php.ini参数优化详解
Feb 28 #PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 #PHP
php 的多进程操作实践案例分析
Feb 28 #PHP
You might like
php session 错误
2009/05/21 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
vue实现扫码功能
2020/01/17 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
原生js实现分页效果
2020/09/23 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
Python实现微信小程序支付功能
2019/07/25 Python
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
测绘工程系学生的自我评价
2013/11/30 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
争先创优公开承诺书
2014/08/30 职场文书
2014年妇女工作总结
2014/12/06 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python
Mysql文件存储图文详解
2021/06/01 MySQL
PHP获取学生成绩的方法
2021/11/17 PHP
图神经网络GNN算法
2022/05/11 Python