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 相关文章推荐
如何实现给定日期的若干天以后的日期
Oct 09 PHP
main.php
Dec 09 PHP
实用函数9
Nov 08 PHP
php empty函数 使用说明
Aug 10 PHP
探讨php中header的用法详解
Jun 07 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
Nov 14 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 PHP
详解php框架Yaf路由重写
Jun 20 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
Sep 29 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 PHP
laravel添加前台跳转成功页面示例
Oct 22 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
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
python 写一个文件分发小程序
2020/12/05 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
如何整合JQuery和Prototype
2014/01/31 面试题
求职信怎么写范文
2014/05/26 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
文案策划岗位职责
2015/02/11 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL
python图片灰度化处理的几种方法
2021/06/23 Python
学习nginx基础知识
2021/09/04 Servers
Python MNIST手写体识别详解与试练
2021/11/07 Python
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
Golang 字符串的常见操作
2022/04/19 Golang
MySQL 数据表操作
2022/05/04 MySQL