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中的超全局变量
Oct 09 PHP
PHP 5.0对象模型深度探索之属性和方法
Mar 27 PHP
一个php Mysql类 可以参考学习熟悉下
Jun 21 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
Apr 23 PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
Jul 10 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 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中的字符串函数
2006/10/09 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
在Python中使用Neo4j数据库的教程
2015/04/16 Python
小小聊天室Python代码实现
2016/08/17 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Python字符串的常见操作实例小结
2019/04/08 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
婴儿地球:Baby Earth
2018/12/25 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
护士演讲稿优秀范文
2014/04/30 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript