用于比较通配符的条件的更有效的布尔代数
本文关键字:有效 布尔代数 条件 通配符 用于 比较 | 更新日期: 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 个小丑也将满足条件。