php设计模式之正面模式实例分析【星际争霸游戏案例】
作者:DavidHHuan 时间:2023-11-14 10:54:04
本文实例讲述了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程序设计有所帮助。
来源:https://www.cnblogs.com/davidhhuan/p/4248195.html
标签:php,设计模式,正面模式
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Django中外键ForeignKey介绍使用
2023-05-18 01:26:30
Vue 中使用 CSS Modules优雅方法
2024-04-30 10:23:39
通过创建SQLServer 2005到 Oracle10g 的链接服务器实现异构数据库数据转换方案
2024-01-28 00:05:46
![](https://img.aspxhome.com/file/2023/3/106263_0s.png)
在Win 2003中配置ASP.net环境
2007-10-14 12:02:00
![](https://img.aspxhome.com/file/UploadPic/200710/14/2007101412855924s.jpg)
Python教程按照字典的键或值进行排序方法解析
2023-01-12 09:10:26
Golang中channel的原理解读(推荐)
2024-02-08 15:41:38
![](https://img.aspxhome.com/file/2023/9/108079_0s.jpg)
Python requests模块用法详解
2022-02-09 23:00:13
ASP中取得图片宽度和高度
2009-11-08 18:39:00
JS简单动画封装浅析
2024-04-22 13:24:24
Python Type Hints 学习之从入门到实践
2022-10-05 15:53:54
![](https://img.aspxhome.com/file/2023/3/94143_0s.jpg)
Windows 64位重装MySQL的教程(Zip版、解压版MySQL安装)
2024-01-26 23:24:32
![](https://img.aspxhome.com/file/2023/4/102364_0s.jpg)
PHP5中使用DOM控制XML实现代码
2023-09-30 09:00:07
javascript中caller和callee详解
2024-04-29 13:38:05
Python Pygame实现俄罗斯方块
2023-03-17 07:18:03
![](https://img.aspxhome.com/file/2023/8/77898_0s.jpg)
XML入门精解之文件格式定义
2008-02-25 13:57:00
精细讲述SQL Server数据库备份多种方法
2009-01-13 13:33:00
关于vue2使用element UI中Descriptions组件的遍历问题详解
2024-05-09 15:15:42
![](https://img.aspxhome.com/file/2023/3/126513_0s.png)
Eclipse 格式化代码时不换行与自动换行的实现方法
2023-04-05 03:52:55
SpringBoot配置连接两个或多个数据库的实现
2024-01-14 14:40:36
MySQL 创建索引(Create Index)的方法和语法结构及例子
2024-01-25 22:57:19