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中调用JAVA
Oct 09 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
Aug 05 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
PHP curl模拟登录带验证码的网站
Nov 30 PHP
简单实现PHP留言板功能
Dec 21 PHP
php实现的mysqldb读写分离操作类示例
Feb 07 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 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
MySQL中create table语句的基本语法是
2007/01/15 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
2013/06/26 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
python实现合并两个数组的方法
2015/05/16 Python
python距离测量的方法
2018/03/06 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
python之yield和Generator深入解析
2019/09/18 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
如何理解委托
2012/01/06 面试题
高校教师岗位职责
2014/03/18 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书