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 相关文章推荐
初学者入门:细述PHP4的核心Zend
Sep 05 PHP
以文本方式上传二进制文件的PHP程序
Oct 09 PHP
php 前一天或后一天的日期
Jun 28 PHP
PHP5 面向对象(学习记录)
Dec 02 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
php中chdir()函数用法实例
Nov 13 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
php实现倒计时效果
Dec 19 PHP
php封装好的人民币数值转中文大写类
Dec 20 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
PHP仿微信发红包领红包效果
Oct 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
解析php取整的几种方式
2013/06/25 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
jquery 学习笔记一
2010/04/07 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
js style动态设置table高度
2014/10/21 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
javascript中this关键字详解
2016/12/12 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
python发布模块的步骤分享
2014/02/21 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
详解python3百度指数抓取实例
2016/12/12 Python
python实现飞机大战小游戏
2019/11/08 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
瀑布模型都有哪些优缺点
2014/06/23 面试题
本科毕业生的求职信范文
2013/11/20 职场文书
安踏广告词改编版
2014/03/21 职场文书
党员检讨书
2014/10/13 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
补充协议书
2015/01/28 职场文书
公司租车协议书
2015/01/29 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js