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 adodb连接mssql解决乱码问题
Jun 12 PHP
PHP项目开发中最常用的自定义函数整理
Dec 02 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
Oct 13 PHP
页面乱码问题的根源及其分析
Aug 09 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
PHP检测用户语言的方法
Jun 15 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
PHP工程师VIM配置分享
Dec 15 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 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图片验证码实例
2014/03/21 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
网页常用特效代码整理
2006/06/23 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
python模糊图片过滤的方法
2018/12/14 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
Shein英国:女性时尚网上商店
2019/04/10 全球购物
Dr. Martens马汀博士法国官网:马丁靴鼻祖
2020/01/15 全球购物
介绍Java的内部类
2012/10/27 面试题
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
应届生财务管理求职信
2013/11/06 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
党员实事承诺书
2014/03/26 职场文书
医院院务公开实施方案
2014/05/03 职场文书
小组口号大全
2014/06/09 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
浅析python中特殊文件和特殊函数
2022/02/24 Python