注意:**请阅读所有其他相关问题:**
这是我提出这个问题的第一次和第二次尝试:
这是问题所在:
我正在尝试找到测试所有验证和验证结果的最佳解决方案.我正在研究Matrix以保留所有可能的组合,但这可能是一种矫枉过正.
这是一个例子(1 - 20):
因此,当播放器将所有这些验证都设置为TRUE时,我可以给出一个级别结果
所有组合都是(15):
所以独特的组合是(7而不是15):
现在,我正在尝试找到最佳解决方案,以便为所有20个验证找到独特的组合,并从该矩阵中获得级别验证.
更新:
另外,我只需要找到TRUE组合,这样你就可以阅读这样的Unique组合:
验证测试的布尔值结果
所以这些组合中的任何一个都是绿色级别.
此外,我需要知道测试验证的顺序以及比较级别分配的矩阵顺序.所以对于GREEN级别我只需要测试1,2和3的验证结果组合矩阵.所以我可以忽略测试4-20
更新#2:
我知道这看起来像一个简单的OR条件,但我想取出组合逻辑将级别设置为矩阵.我可以使用组合矩阵来确定级别逻辑,而无需在代码本身中编写额外的代码或修改当前逻辑.我想比较一组给定测试的验证结果,并为这些结果分配一个级别.验证组合的不同排列将导致不同的级别分配.
我知道我可以在代码本身中添加组合逻辑,但由于这种逻辑看起来非常不稳定,并认为这可能提供更灵活的解决方案.建议?
(为了清楚起见,删除了我之前的两个答案)
在您上次编辑之后,我不想直接回答,而是首先确保 100% 理解您想要的“级别检测算法”。
如果我理解得很好,您希望定义/维护一个简单的配置结构,告诉哪些测试给出哪个级别。
例如,使用关联数组:
array(
'green' => array('test1', 'test2', 'test3'),
'orange' => array('test2', 'test3', 'test5')
...
);
Run Code Online (Sandbox Code Playgroud)
其含义是:如果满足列表中的一项或多项测试,则将该级别(数组键)分配给玩家。这样的逻辑可以很容易地涵盖相当多的组合,并且可以避免处理巨大的矩阵。
也许您想扩展逻辑来告诉,例如,测试列表中至少有 N 个测试得到满足。
array(
'green' => array(
'tests' => array('test1', 'test2', 'test3'),
'nb_required' => 2
),
...
);
Run Code Online (Sandbox Code Playgroud)
那是你要的吗?
顺便说一句,你为什么不使用经典的 XP/升级系统呢?:-p