5

我是编程新手,正在使用 JavaScript 编写一个带有三个随机掷骰子的简单扑克骰子游戏。最好的一手牌是顺子,即 3、4、5。我遇到的问题是对决定三个骰子是否连续的方法进行编码。目前我想到的最好的是:

if ((die3 === die2 + 1 && die2 === die1 + 1) || 
    (die3 === die1 + 1 && die1 === die2 + 1) || 
    (die2 === die3 + 1 && die3 === die1 + 1) || 
    (die2 === die1 + 1 && die1 === die3 + 1) || 
    (die1 === die3 + 1 && die3 === die2 + 1) || 
    (die1 === die2 + 1 && die2 === die3 + 1))

这行得通,但似乎很不雅,如果我尝试使用三个以上的骰子,扩大规模将是一场噩梦。

任何有关替代方法的帮助将不胜感激。谢谢。

4

3 回答 3

2

对数组进行排序的想法接近于人们正在做的事情。但是,他们忘记了该数组中不应有任何重复项。 您应该首先对它们进行排序,然后查找重复项。 假设dice是您的骰子值的数组。

// Assumes at least two dice
function isStraight(dice) {
  dice.sort();
  var duplicates = false;
  for(var index = 0; index < dice.length - 1; index++) {
    if(dice[index] == dice[index + 1]) {
      duplicates = true;
      break;
    }
  }
  return !duplicates && (dice[dice.length - 1] - dice[0] == dice.length - 1);
}

这是一个带有三个简单测试(非详尽)的 jsFiddle。

如果您实际使用此方法,则应在对dice数组进行排序之前对其进行复制。除非您不在乎骰子阵列是否已更改。

于 2012-12-16T15:20:49.220 回答
2

如果使用数组会更容易。重新排列您的代码以使用die[0]而不是die1, die[1]fordie2等。

一旦你有了一个数组,你就可以做类似的.sort()事情,并反复搜索它以找到你正在寻找的数字。

例如,排序后数字将按顺序排列,因此您只需要测试:

if( die[1] == die[0]+1 && die[2] == die[1]+1)
于 2012-12-16T15:14:44.067 回答
0

A generic solution for 2 or more numbers:

    var ar = [dice1, dice2, dice3, dice4, dice5 and so on];  
    ar.sort();  

    var i = 1, first = ar[0];
    while (ar[i] === (first + i)) i++;

    if (i === ar.length) // consecutive

test it here!

于 2012-12-16T15:22:09.953 回答