5

私はプログラミングが初めてで、JavaScript を使用して、ランダムに 3 つのサイコロを振るシンプルなポーカー サイコロ ゲームをプログラミングしています。私が抱えている問題は、3 つのサイコロが連続しているかどうかを判断する方法をコーディングすることです。現時点で私が思いついた最高のものは次のとおりです。

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))

これは機能しますが、非常に洗練されていないように見え、3 つ以上のサイコロを使用しようとするとスケールアップするのは悪夢になります。

別の方法で助けていただければ幸いです。ありがとう。

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

これは、3つの簡単なテスト(網羅的ではない)を備えたjsFiddleです。

実際にこのメソッドを使用する場合は、dice並べ替える前に配列のコピーを作成する必要があります。サイコロの配列が変更されてもかまわない場合を除きます。

于 2012-12-16T15:20:49.220 に答える
2

配列で作業すると簡単です。、forなどdie[0]の代わりに使用するようにコードを再配置します。die1die[1]die2

配列を取得したら、そのような.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 に答える