0

在赌场老虎机游戏中,您经常拥有 Wild 游戏。将这个机制包含在与其他 2 个部分进行比较的好方法是什么?例如,给定 3 个游戏棋子 [Cherry][Cherry][Joker] 将是一场比赛。

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

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;
}
4

2 回答 2

2

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

var allRanks = new[]{box1.BoxRank, box2.BoxRank, box3.BoxRank};

var threeOfAKind = allRanks.Where(rank => rank != BoxGameObject.Ranks.Joker)
    .Distinct()
    .Count() < 2;

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

于 2013-10-09T15:34:28.007 回答
1

是的,将 Joker 表示为具有所有二进制 1 的 int,例如 7、15 或 31。用仅单个二进制 1 的 int 表示樱桃和其他人,例如比 Joker 小 1、2、4、8。不使用零。然后,使用按位 AND 您的条件相当于:

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

请注意,3 Jokers 也将满足条件。

于 2013-10-09T15:28:06.027 回答