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删除页面记录 同时刷新页面 删除条件用GET方式获得
Jan 10 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
Dec 17 PHP
php实现简单的语法高亮函数实例分析
Apr 27 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
老生常谈文本文件和二进制文件的区别
Feb 27 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 PHP
PHP实现爬虫爬取图片代码实例
Mar 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
php学习笔记 数组遍历实现代码
2011/06/09 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
php导出生成word的方法
2015/12/25 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
JS数据类型分类及常用判断方法
2020/11/19 Javascript
寻找网站后台地址的python脚本
2014/09/01 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python交互模式基础知识点学习
2020/06/18 Python
python算的上脚本语言吗
2020/06/22 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
python3.5的包存放的具体路径
2020/08/16 Python
python如何运行js语句
2020/09/09 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
机械专业应届生求职信
2013/09/21 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
教学质量月活动总结
2015/05/11 职场文书
保护地球的宣传语
2015/07/13 职场文书
小学三年级数学教学反思
2016/02/16 职场文书