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 相关文章推荐
数据库相关问题
Oct 09 PHP
php 什么是PEAR?(第二篇)
Mar 19 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
php连接数据库代码应用分析
May 29 PHP
php 团购折扣计算公式
Nov 24 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
Aug 14 PHP
php使用sql server验证连接数据库的方法
Dec 25 PHP
浅谈php7的重大新特性
Oct 23 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 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显示MySQL数据的三种方法
2008/06/05 PHP
php设计模式 State (状态模式)
2011/06/26 PHP
PHP使用数组实现队列
2012/02/05 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
双击滚屏-常用推荐
2006/11/29 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
python3.0 字典key排序
2008/12/24 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
生日宴会祝酒词
2015/08/10 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
正确使用MySQL update语句
2021/05/26 MySQL