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中与数组相关的函数
Mar 22 PHP
基于PHP开发中的安全防范知识详解
Jun 06 PHP
关于php循环跳出的问题
Jul 01 PHP
php获取域名的google收录示例
Mar 24 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
10款PHP开源商城系统汇总介绍
Jul 23 PHP
基于PHP制作验证码
Oct 12 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
php实现的生成排列算法示例
Jul 25 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 验证码制作(网树注释思想)
2009/07/20 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
jQuery实现跨域
2015/02/03 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
Python数据可视化库seaborn的使用总结
2019/01/15 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
在pycharm中实现删除bookmark
2020/02/14 Python
Pygame的程序开始示例代码
2020/05/07 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
个人思想理论学习的自我鉴定
2013/11/30 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
python获取对象信息的实例详解
2021/07/07 Python
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏