注意:**请阅读所有其他相关问题:**
这是我第一次和第二次尝试提出这个问题:
- 确定测试矩阵结果的有效方法
- 笛卡尔积是最好的方法吗
问题是这样的:
- 我有几个(比如 20 个)布尔验证( true / false )
- 所有布尔验证作为一个整体也有一个验证结果
我正在尝试找到测试所有验证以及验证结果的最佳解决方案。我正在研究一个矩阵来保存所有可能的组合,但这可能有点矫枉过正。
下面是一个示例 (1 - 20):
- test_1 = 有 30 次击杀
- test_2 = 已找到地图 1
- test_3 = 已掌握 1 级
- test_4 = 已达到 Grunt 状态
- test_5 = 有攻击武器
- test_6 = 有刀
- test_7 = 有手榴弹
- test_x = 等等...
因此,当玩家将所有这些验证都设为 TRUE 时,我就可以给出关卡结果
- 如果 test_1、test_2、test_3(三者的任意组合):级别 = 绿色
所有组合为 ( 15 ):
- test_1
- test_2
- test_3
- 测试_1、测试_2
- 测试_1、测试_3
- test_2、test_1(重复的可以跳过此)
- 测试_2、测试_3
- test_3、test_1(重复的可以跳过此)
- test_3、test_2(重复的可以跳过此)
- 测试_1、测试_2、测试_3
- test_1、test_3、test_2(重复的可以跳过此)
- test_2、test_1、test_3(重复的可以跳过此)
- test_2、test_3、test_1(重复的可以跳过此)
- test_3、test_1、test_2(重复的可以跳过此)
- test_3、test_2、test_1(重复的可以跳过此)
所以独特的组合是( 7 而不是 15 ):
- test_1
- test_2
- test_3
- 测试_1、测试_2
- 测试_1、测试_3
- 测试_2、测试_3
- 测试_1、测试_2、测试_3
现在,我正在尝试寻找最佳解决方案,为所有 20 个验证找到独特的组合,并从该矩阵中得出级别验证。
UPDATE:
另外,我只需要找到真正的组合,这样您就可以像这样阅读独特的组合:
- test_1
- test_2
- test_3
- 测试_1、测试_2
- 测试_1、测试_3
- 测试_2、测试_3
- 测试_1、测试_2、测试_3
验证测试的布尔值结果
- 真,假,假
- 假、真、假
- 假,假,真
- 对,对,错
- 对,错,对
- 假、真、真
- 真实,真实,真实
因此,任何这些组合都将是绿色级别。
我还需要知道测试验证的顺序以及用于比较级别分配的矩阵顺序。因此,对于 GREEN 级别,我只需要测试 1、2 和 3 的验证结果组合矩阵。因此我可以忽略测试 4 - 20
更新#2:
我知道这看起来像一个简单的 OR 条件,但我想取出组合逻辑来将级别设置为矩阵。我可以使用组合矩阵来确定级别逻辑,而无需编写额外的代码或修改代码本身中的当前逻辑。我只想比较给定测试集的验证结果,并为这些结果分配一个级别。验证组合的不同排列将导致不同的级别分配。
我知道我可以在代码本身中添加组合逻辑,但由于此逻辑看起来非常不稳定,并且认为这可能提供更灵活的解决方案。
建议?
(为了清楚起见,删除了我之前的两个答案)
在您上次编辑后,我不想直接回答,而是首先确保 100% 理解“电平检测算法“ 你要。
如果我理解得很好,您希望定义/维护一个简单的配置结构,告诉哪些测试给出哪个级别。
例如使用关联数组:
array(
'green' => array('test1', 'test2', 'test3'),
'orange' => array('test2', 'test3', 'test5')
...
);
其含义是:如果满足列表中的一项或多项测试,则将该级别(数组键)分配给玩家。这样的逻辑可以很容易地涵盖相当多的组合,并且可以避免处理巨大的矩阵。
也许您想扩展逻辑来告诉,例如,测试列表中至少有 N 个测试得到满足。
array(
'green' => array(
'tests' => array('test1', 'test2', 'test3'),
'nb_required' => 2
),
...
);
那是你要的吗?
顺便说一句,你为什么不使用经典的 XP/升级系统呢? :-p
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)