用于比较通配符的条件的更有效的布尔代数

本文关键字:有效 布尔代数 条件 通配符 用于 比较 | 更新日期: 2023-09-27 18:34:31

在赌场老虎机游戏中,您通常会有一个野生游戏片段。将这个机制与其他 2 个零件进行比较的好方法是什么?例如,给定 3 个游戏棋子 [樱桃][樱桃][小丑] 将是匹配的。

我现在使用的代码似乎真的很重,有什么可以做的(想想按位运算符?(来使其更容易使用吗?

if ((box1.BoxRank == box2.BoxRank || 
      box1.BoxRank == BoxGameObject.Ranks.Joker ||
      box2.BoxRank == BoxGameObject.Ranks.Joker) &&
    (box1.BoxRank == box3.BoxRank || 
      box1.BoxRank == BoxGameObject.Ranks.Joker ||
      box3.BoxRank == BoxGameObject.Ranks.Joker) &&
    (box2.BoxRank == box3.BoxRank || 
      box2.BoxRank == BoxGameObject.Ranks.Joker ||
      box3.BoxRank == BoxGameObject.Ranks.Joker))
{
  // has 3 of a kind, or 1 joker and 2 of a kind, or 2 jokers and 1 other
  return true;
}

用于比较通配符的条件的更有效的布尔代数

如果您根据

所有框的值集来考虑操作,则这更容易。 只需从该集合中删除所有小丑,然后验证所有值是否相同:

var allRanks = new[]{box1.BoxRank, box2.BoxRank, box3.BoxRank};
var threeOfAKind = allRanks.Where(rank => rank != BoxGameObject.Ranks.Joker)
    .Distinct()
    .Count() < 2;

首先只是删除所有的小丑。 如果在这样做之后,有两个或多个不同的值,那么我们就没有一个类型的三个。

是的,将小丑表示为包含所有二进制 1 的整数,例如 7、15 或 31。用一个 int 表示樱桃和其他,只有单二进制 1,比如比小丑小 1,2,4,8。将零未使用。然后,使用按位 AND 您的条件等效于:

(box1.BoxRank & box2.BoxRank & box3.BoxRank) > 0

请注意,3 个小丑也将满足条件。