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里的JS打印函数
Oct 09 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 PHP
php生成shtml类用法实例
Dec 09 PHP
CI框架数据库查询之join用法分析
May 18 PHP
总结对比php中的多种序列化
Aug 28 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 22 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php数据访问之增删改查操作
2016/05/09 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
2013/07/17 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
vue实现搜索功能
2019/05/28 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
python实现在pandas.DataFrame添加一行
2018/04/04 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
教师节促销方案
2014/03/22 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript