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之第七天
Oct 09 PHP
特转载一高手总结PHP学习资源和链接.
Dec 05 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
浅谈php函数serialize()与unserialize()的使用方法
Aug 19 PHP
php验证码实现代码(3种)
Sep 07 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
Mar 21 PHP
详谈php静态方法及普通方法的区别
Oct 04 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
Oct 14 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP信号处理机制的操作代码讲解
Apr 19 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 #PHP
PDO实现学生管理系统
Mar 21 #PHP
You might like
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
js压缩利器
2007/02/20 Javascript
驱动事件的addEvent.js代码
2007/03/27 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
简单介绍Python中的RSS处理
2015/04/13 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
python修改txt文件中的某一项方法
2018/12/29 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
python3 xpath和requests应用详解
2020/03/06 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
妇产科护士自我鉴定
2013/10/15 职场文书
自我鉴定模板
2013/10/29 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript