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初学者头痛的十四个问题
Jul 12 PHP
如何在WIN2K下安装PHP4.04
Oct 09 PHP
PHP基础之运算符的使用方法
Apr 28 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
深入理解PHP中的global
Aug 19 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
PHP数组函数知识汇总
May 12 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
php实现映射操作实例详解
Oct 02 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
E路文章系统PHP
2006/12/11 PHP
谈谈新手如何学习PHP
2006/12/23 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
python实现备份目录的方法
2015/08/03 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Python实现的knn算法示例
2018/06/14 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
大学生校园创业计划书
2014/02/08 职场文书
软件项目实施计划书
2014/05/02 职场文书
商铺消防安全责任书
2014/07/29 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python