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 进程锁定问题分析研究
Nov 24 PHP
使用php实现下载生成某链接快捷方式的解决方法
May 07 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 PHP
强制PHP命令行脚本单进程运行的方法
Apr 15 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
php实现的AES加密类定义与用法示例
Jan 29 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
Yii框架连表查询操作示例
Sep 06 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 adodb介绍
2009/03/19 PHP
PHP无敌近乎加密方式!
2010/07/17 PHP
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
Python中操作MySQL入门实例
2015/02/08 Python
分享Python文本生成二维码实例
2016/01/06 Python
Python解析最简单的验证码
2016/01/07 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
python3.4实现邮件发送功能
2018/05/28 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
乡镇食品安全责任书
2014/07/28 职场文书
三严三实心得体会范文
2014/10/13 职场文书
辩护意见书
2015/06/04 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python