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调用三种数据库的方法(3)
Oct 09 PHP
一个可以删除字符串中HTML标记的PHP函数
Oct 09 PHP
ZF等常用php框架中存在的问题
Jan 10 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
php跨站攻击实例分析
Oct 28 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 PHP
php 多继承的几种常见实现方法示例
Nov 18 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读取RSS feed的代码
2008/08/01 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
php学习之function的用法
2012/07/14 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
php 多文件上传的实现实例
2016/10/23 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
让python json encode datetime类型
2010/12/28 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
python list转置和前后反转的例子
2019/08/26 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
会计专业自荐书
2014/07/08 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
报到证办理个人委托书
2014/10/06 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书