ドゥアイネットのプログラマー、湯川が開発日記を綴ります。

CALENDAR
S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< January 2019 >>
ARCHIVES
CATEGORIES
<< 色について | main | イメージのキャッシュ >>
配列をランダムで入れ替え
設立記念パーティ用のルーレットゲームを作成する時に、
ルーレットの並びをランダムで決めたいと考えていました。
Math.random()を使うと、配列の中身をランダムで入れ替えることができました。
以下は、そのテストプログラムです。

----------------------------------------------------------------
private function onShuffle(event:MouseEvent):void
{
  var ary:Array = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
     
  trace("変更前配列:" + ary);
     
  shuffleArray(ary);
     
  trace("変更後配列:" + ary);
}

// 配列の中身をランダムに入れ替える
private function shuffleArray(ary:Array):void {
  // 配列数を取得
  var iLength:int = ary.length;

  for (var i:int = 0; i < iLength; i++) {
      // ランダム値を取得(i == 0の場合は、0か1が取得できる)
      var iRandom:int = Math.round(Math.random()*(i+1));
      // 変更対象の値を保持
      var iValue:int = ary[i];

      // 変更対象のインデックス値の値と、ランダム値の配列の値を入れ替える
      ary[i] = ary[iRandom];
      ary[iRandom] = iValue;
  }
}
----------------------------------------------------------------

結果は、以下のようになりました。
----------------------------------------------------------------
変更前配列:1,2,3,4,5,6,7,8,9,10
変更後配列:2,3,8,1,6,5,10,9,4,7
----------------------------------------------------------------

本番のルーレットゲームでは、配列の中身が2000以上になったのですが、
うまくランダムにシャッフルできました。


| Flex | 15:04 | comments(0) | - |
コメント
コメントする