2

我需要知道制作决策表或 if-else 语句是否更适合我。如果决策表更适合以下规则,请告诉我我需要制作的基本代码是什么。我尝试过使用 if-else 语句来制作它,但输出不是我想要的。这个问题是针对百家乐游戏的,规则如下:

  • 首先,如果任一玩家的手牌为 8 或 9(称为“自然”),则游戏结束且不会再抽到第三张牌
  • 其次,如果没有自然牌,玩家会收到第三张牌(“平局”或“击球”),或者不会(“站拍”),根据以下规则: - 玩家必须抽一张手牌值的牌5个或更少,并与6个或更多站立拍拍。-第三,如果没有自然,庄家按以下规则抓牌或站拍 - 如果玩家没有抽牌,则庄家遵循与玩家相同的规则:庄家必须用手抓牌5个或更少,并与6个或更多站立拍拍。

  • - 如果玩家确实抓到了第三张牌,则决定仅基于该牌的价值(称为 C3)和庄家手牌的价值。庄家必须抽一张手牌值小于或等于某个限制 L 的牌,其中 L 的计算如下:

  • 如果 C3 大于等于 8,则令 Y = C3-10,否则令 Y = C3。所以 Y 将从 -2 到 7。

  • o 要获得 L,请将 Y 除以 2,截断结果,然后加 3。L 将从 2 到 6。 o 庄家必须用 L 或
    更少的手牌抽牌。

4

3 回答 3

2

In principle, you should use a decision table / switch etc. (if you are worried about efficient processing through the cases) once your if-else-if clauses go up to 5 or more (just a value big enough to impact average access times) instances.

Update: 5 is not written any where. I used it to illustrate a concept though i remember having seen some compiler doing it when switch cases were 8 or more, but that was a long time ago

The rationale is that going through each of the if clause manually would cause linear over head where as for decision table, the access would be constant time.

In practice, your code is already optimized by every decent compiler into a decision table / hash table as soon as number of cases become significant so this is irrelevant.

Following would help. Note that choice of switch or decision table or if else also depends upon how your test clause is structured. Switch works on integer values only. If you cannot relate your test condition to be accessed randomly some how, you might not have another choice but to use if-else only.

于 2013-10-09T09:34:03.880 回答
1

从您的评论中,您提到使用决策表更好,因为有很多规则。

这在一定程度上是对的,但不是真的。

根据您的描述,有很多用于不同目的的规则。无论您是编写决策表还是手工制作 if-else,您仍然需要根据其用法和上下文适当地组织规则,并分离“业务流程”以使用这些规则。

如果你没有这样做,使用决策表就更难编码,也更难阅读。

当您考虑使用决策表时,这意味着您要使用规则引擎,可读性可能不是最重要的因素。使用规则引擎的主要原因是为了方便将来更改规则。如果您没有预见到这种需求,我强烈建议您使用结构合理的代码“手工制作”逻辑。

于 2013-10-10T03:48:07.200 回答
1

选择最具可读性和可维护性的解决方案。在您可以实际展示性能问题之前,不要担心优化。

于 2013-10-09T09:46:03.997 回答