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 相关文章推荐
Smarty+QUICKFORM小小演示
Feb 25 PHP
php 无极分类(递归)实现代码
Jan 05 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php strftime函数的详细用法
Jun 21 PHP
PHP的PDO事务与自动提交
Jan 24 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 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常用hash加密函数
2014/11/22 PHP
PHP生成plist数据的方法
2015/06/16 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
jquery插件开发方法(初学者)
2012/02/03 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
python连接MySQL数据库实例分析
2015/05/12 Python
python图像处理之反色实现方法
2015/05/30 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
英国在线药房:Express Chemist
2019/03/28 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
九年级物理教学反思
2014/01/29 职场文书
班级旅游计划书
2014/05/03 职场文书
中学生运动会口号
2014/06/07 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
白银帝国观后感
2015/06/17 职场文书
MySQL创建高性能索引的全步骤
2021/05/02 MySQL
PYTHON InceptionV3模型的复现详解
2022/05/06 Python