- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我现在正在做的一件事与游戏有一些相似之处。出于说明的目的,我将使用从虚构的假设游戏中提取的示例来解释我的问题。
我们称之为 DeathBlaster 4: The Deathening。在 DB4 中,您有许多 Ship
周期性和随机遇到的物体 Phenomena
当他们旅行时。给定 Phenomenon
可能有零个、一个或多个 Effects
在 Ship
遇到它。例如,我们可能有四种 Ships
和三种Phenomena
.
现象
==========================================
船舶 GravityWell BlackHole NebulaField
------------ -------------------------------------- ----
RedShip +20% 速度 -50% 力量 -50% 护盾
BlueShip 无效果 无懈可击的死亡效果 各种
GreenShip -20% 速度死亡 +50% 护盾 船上现象
YellowShip 死亡 +50% 威力无效果
此外,Effects
可以互相交流。例如,GreenShip
即在 GravityWell
中和一个 NebulaField
可能会在生成的 SpeedEffect
之间产生某种协同作用和 ShieldEffect
.在这种情况下,协同效应本身就是一个 Effect
-- 例如,可能有 PowerLevelSynergyEffect
这是这种相互作用的结果。除了Effects
的集合外没有其他信息作用于 Ship
需要解决最终结果应该是什么。
您可能会开始看到这里出现了一个问题。作为一种幼稚的第一种方法,要么每 Ship
必须知道如何处理每个Phenomenon
,或每个 Phenomenon
将不得不知道每个 Ship
.这显然是 Not Acceptable ,因此我们希望将这些责任转移到其他地方。显然这里至少有一个外部类,可能是 Mediator
或 Visitor
某种。
但最好的方法是什么?理想的解决方案可能具有以下属性:
Ship
也很容易因为它是添加一个新的 Phenomenon
. Effects
彼此互动,并能够管理这些互动以决定最终结果。 Effects
相对于可能的数量
Phenomena
似乎很小×
Ships
相互作用。也就是说,虽然交互的可能组合有很多,但这些交互的结果的种类数量较少。
InteractionResolver
, 以确定交互作用的结果。它包含一个映射字典
Ship-Phenomenon
配对到
Effects
(它们基本上是执行效果和一些元数据的委托(delegate))。每个
Ship
递给
EffectStack
对应于
Effects
当计算交互的结果完成时,它正在经历。
Ships
然后使用
EffectStack
确定
Effects
的实际结果在它们的现有属性和属性中添加修饰符。
Ship
永远不需要知道 Phenomena
. Ship
的复杂性- Phenomena
关系被抽象为 InteractionResolver
. InteractionResolver
抽象出了如何解决多个可能复杂的影响的细节。 .船舶只需在必要时应用效果。 EffectProcessorStrategy
来区分船舶处理效果的方式。 .默认可能是处理所有效果,但是,比如 BossShip
可能会通过不同的 EffectProcessorStrategy
忽略次要影响. 最佳答案
一个有趣的潜在选择是使用 Visitor Pattern 的变体。 .
Judith Bishop 和 R. Nigel Horspool 写了一篇关于 design pattern efficiency 的论文他们在其中使用 C# 3 功能解释了经典访问者模式的各种变体。
特别是,我将看看他们如何与委托(delegate)一起处理访问者模式。使用委托(delegate)列表或堆栈可能会为您提供一种有趣的方式来处理来自多个对象的多种效果,并且可以更轻松地扩展类层次结构的任一侧(添加船舶或添加效果),而无需进行大量破坏性代码更改。
关于c# - 解决交互组合爆炸的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/684000/
在 python 交互中,有没有办法在每次输入命令后自动从 python 文件执行方法? 例如:如果我有一个打印文件信息的方法,但我不想不断调用该方法,我怎样才能让它在 python 交互中的每个命令
当你使用Edge等浏览器或系统软件播放媒体时,Windows控制中心就会出现相应的媒体信息以及控制播放的功能,如图。 SMTC (SystemMedia
我在主菜单上使用标准的剪切,复制,粘贴操作。它们具有快捷键Ctrl-X,Ctrl-C和Ctrl-V。 当我打开模态表单时FindFilesForm.ShowModal,然后所有快捷方式都可以从表单中使
这是我想要实现的目标:打开一个 shell(korn 或 bash,没关系),从那个 shell,我想打开一个 ssh 连接(ssh user@host)。在某些时候,可能会提示我输入密码,或者可能会
我正在测试在C / C++程序中嵌入Python,但是我缺乏理解。 测试程序很简单: 初始化解释器; 从启动Timer的文件中执行python脚本(每0.1秒增加一个变量); 等待5秒(C++); 从
我正在尝试用java创建Excel文件。现在,我正在使用 Apache POI 库创建文件并将其保存到本地驱动器。有没有办法启动 Excel 并填充数据而不将其保存到硬盘驱动器? 最佳答案 考虑 Do
我有一个黑盒函数,它接受大约 10 个整数输入。该函数返回一个 pandas 数据框,我想捕获输出窗口(通过使用 bbwidget.children)并显示在布局中的其他地方。到目前为止,交互/交互似
我正在体验新的 QQuickWidget。我如何在 QQuickWidget 和 C++ 之间进行交互? C++ QQuickWidget *view = new QQuickWidget(); vi
我正在尝试设置一个使用 TWAIN 的 C# 应用程序 example from code project 除了我需要将 Form 转换为 IMessageFilter 和调用 IMessageFil
我想在使用 redis 的 python 中编写应用程序。我用谷歌搜索,但找不到我的问题的任何结果。通常,我这样做: import redis rs = redis.Redis('localhost'
最近做一个小项目,网页中嵌入google maps,输入经纬度坐标可以定位地图位置并加注标记,点击标记获取远端摄像头数据并在视频窗口实现播放。在实际操作过程中,由于经纬度数据和视频登录的用户名密码数
我需要在这里澄清一些事情: 我有一个网站,每次在浏览器中重新加载网站时都会更新两个变量的值。这个页面显然是一个 HTML 页面,但变量是由 javascript 函数更新的。此页面在我的服务器上运行。
我注意到,auto忽略双条件。这是一个简化的示例: Parameter A B : Prop. Parameter A_iff_B : A B. Theorem foo1: A -> B. Proo
使用 interactive使用多个小部件相当简单,例如: interactive(foo, w1=widget1, w2=widget2, ...) 但是,我想使用 VBox 和 HBox 的组合以
我们提供类似于 imagemagick 的浏览器页面 JavaScript,可帮助人们将图像转换为不同大小和格式。但是,它需要网页交互。 是否可以让人们自动进行这种交互——无需将图像发送到我们的服务器
大家好,我正在尝试制作一个具有大量动画和效果的交互式 UI。 但我不知道是否: 核心图形可以支持用户交互(触摸、拖动等) 核心图形支持对象旋转 核心图形可以以任何方式与 UIKit 和核心动画交互 谢
这是获取维基百科上一篇关于高盛的文章的介绍的链接。 http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Goldma
我正在尝试编写一个 AppleScript 来查询 iCal 并在任何日历中查找给定日期的所有事件。 我首先编写了一个简单的脚本,它对给定日历中的每个事件执行一些简单的操作: tell applica
我在我的 hudson 服务器上使用 jira 插件。将代码提交到 svn 时,我的提交注释包含在我的 jira 问题中,但有什么办法可以将注释归因于执行提交的实际人员,而不是让一个全局 jira 用
我正在播放一段视频来装饰我的用户界面。我隐藏了 AV 播放器控件,但用户仍然可以控制视频。例如,他们可以使用滑动手势快进或快退。 这让我特别惊讶,因为 AVPlayerView 上面有一个覆盖 Vie
我是一名优秀的程序员,十分优秀!