矩阵组合逻辑

Phi*_*ord 5 php logic matrix

注意:**请阅读所有其他相关问题:**

这是我提出这个问题的第一次和第二次尝试:

这是问题所在:

  • 我有几个(如20)布尔验证(真/假)
  • 所有布尔验证作为一个整体也具有验证结果

我正在尝试找到测试所有验证和验证结果的最佳解决方案.我正在研究Matrix以保留所有可能的组合,但这可能是一种矫枉过正.

这是一个例子(1 - 20):

  • test_1 =有30个杀戮
  • test_2 =找到地图1
  • test_3 =已掌握等级1
  • test_4 =已达到咕噜状态
  • test_5 =有突击武器
  • test_6 =有刀
  • test_7 =有手榴弹
  • test_x =等...

因此,当播放器将所有这些验证都设置为TRUE时,我可以给出一个级别结果

  • 如果test_1,test_2,test_3(三者的任意组合):level = green

所有组合都是(15):

  • TEST_1
  • test_2
  • test_3
  • test_1,test_2
  • test_1,test_3
  • test_2,test_1(重复可以跳过这个)
  • test_2,test_3
  • test_3,test_1(重复可以跳过这个)
  • test_3,test_2(重复可以跳过这个)
  • test_1,test_2,test_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
  • test_1,test_2
  • test_1,test_3
  • test_2,test_3
  • test_1,test_2,test_3

现在,我正在尝试找到最佳解决方案,以便为所有20个验证找到独特的组合,并从该矩阵中获得级别验证.

更新:

另外,我只需要找到TRUE组合,这样你就可以阅读这样的Unique组合:

  • TEST_1
  • test_2
  • test_3
  • test_1,test_2
  • test_1,test_3
  • test_2,test_3
  • test_1,test_2,test_3

验证测试的布尔值结果

  • 是的,错误的,错误的
  • 假,正确,错误
  • 是的,错误的,正确的
  • 是,正确,错误
  • 是的,错的,正确的
  • FALSE,TRUE,TRUE
  • TRUE,TRUE,TRUE

所以这些组合中的任何一个都是绿色级别.

此外,我需要知道测试验证的顺序以及比较级别分配的矩阵顺序.所以对于GREEN级别我只需要测试1,2和3的验证结果组合矩阵.所以我可以忽略测试4-20

更新#2:

我知道这看起来像一个简单的OR条件,但我想取出组合逻辑将级别设置为矩阵.我可以使用组合矩阵来确定级别逻辑,而无需在代码本身中编写额外的代码或修改当前逻辑.我想比较一组给定测试的验证结果,并为这些结果分配一个级别.验证组合的不同排列将导致不同的级别分配.

我知道我可以在代码本身中添加组合逻辑,但由于这种逻辑看起来非常不稳定,并认为这可能提供更灵活的解决方案.建议?

Fro*_*y Z 1

(为了清楚起见,删除了我之前的两个答案)

在您上次编辑之后,我不想直接回答,而是首先确保 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