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 相关文章推荐
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
php时间不正确的解决方法
Apr 09 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
php中序列化与反序列化详解
Feb 13 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 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
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
php实现的用户查询类实例
2015/06/18 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
python实现识别相似图片小结
2016/02/22 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
python学生信息管理系统(初级版)
2018/10/17 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Python实现某论坛自动签到功能
2019/08/20 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
如何利用python进行时间序列分析
2020/08/04 Python
Python读写锁实现实现代码解析
2020/11/28 Python
智利最大的网上商店:Linio智利
2016/11/24 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
党员公开承诺书内容
2014/05/20 职场文书
助理政工师申报材料
2014/06/03 职场文书
2015党建工作简报
2015/07/21 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS