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 相关文章推荐
第十四节 命名空间 [14]
Oct 09 PHP
PHP 彩色文字实现代码
Jun 29 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
PHP闭包(Closure)使用详解
May 02 PHP
简单实用的.net DataTable导出Execl
Oct 28 PHP
CodeIgniter使用phpcms模板引擎
Nov 12 PHP
php版小黄鸡simsimi聊天机器人接口分享
Jan 26 PHP
PHP递归删除目录几个代码实例
Apr 21 PHP
神盾加密解密教程(一)PHP变量可用字符
May 28 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 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
Protoss兵种介绍
2020/03/14 星际争霸
example2.php
2006/10/09 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
javascript实现简单搜索功能
2020/03/26 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
Python中six模块基础用法
2019/12/08 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
倩碧美国官网:Clinique美国
2016/07/20 全球购物
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
函授教育个人学习的自我评价
2013/12/31 职场文书
大学毕业后的十年规划
2014/01/07 职场文书
学校运动会报道稿
2014/09/23 职场文书
校长新学期寄语2016
2015/12/04 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技