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 相关文章推荐
cache_lite试用
Feb 14 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
使用PHP批量生成随机用户名
Jul 10 PHP
PHP APC的安装与使用详解
Jun 13 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
关于PHP文件的自动运行方法分析
May 13 PHP
PHP 等比例缩放图片详解及实例代码
Sep 18 PHP
Discuz论坛密码与密保加密规则
Dec 19 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
PHP autoload使用方法及步骤详解
Sep 05 PHP
php png失真的原因及解决办法
Oct 24 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入门学习的几个不错的实例代码
2008/07/13 PHP
laravel安装和配置教程
2014/10/29 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
php实例化一个类的具体方法
2019/09/19 PHP
PHP连接MySQL数据库三种实现方法
2020/12/10 PHP
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
python实现socket客户端和服务端简单示例
2014/02/24 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
Python中协程用法代码详解
2018/02/10 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
咖啡厅创业计划书范本
2014/01/22 职场文书
科研课题实施方案
2014/03/18 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
党小组推荐意见
2015/06/02 职场文书
python单元测试之pytest的使用
2021/06/07 Python
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python
python数字图像处理:图像的绘制
2022/06/28 Python
基于Redission的分布式锁实战
2022/08/14 Redis