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下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
PHP运行时强制显示出错信息的代码
Apr 20 PHP
PHP写杨辉三角实例代码
Jul 17 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
ThinkPHP模板自定义标签使用方法
Jun 26 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
Yii中srbac权限扩展模块工作原理与用法分析
Jul 14 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
php判断/计算闰年的方法小结【三种方法】
Jul 06 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 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
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
php生成静态页面的简单示例
2014/04/17 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
使用js 设置url参数
2013/07/08 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
在Django框架中设置语言偏好的教程
2015/07/27 Python
Python切片工具pillow用法示例
2018/03/30 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
Python实现EM算法实例代码
2020/10/04 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
浅析HTML5 Landmark
2020/09/11 HTML / CSS
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
食品安全检查制度
2014/02/03 职场文书
2014年乡镇植树节活动方案
2014/02/28 职场文书
诚信考试承诺书
2014/03/27 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
Python中requests做接口测试的方法
2021/05/30 Python
mysql如何配置白名单访问
2021/06/30 MySQL
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA