[ メニューへもどる ]

+++ カードゲームを作ろう +++

▼ 内容の一括ダウンロード (準備中) 2003/11/15
 ※吉里吉里 2.18 / KAG3.18 にて動作確認しています

 カードゲームに使えそうな処理を解説してみます〜。

 ■ シャッフル処理 ― KAG編 / TJS編 / 応用編

 というわけで TJS で表記した場合です。

 先に KAG 編を見ているのを前提として一部解説を省略してます。

 見てない場合は KAG 編も合わせて見てくださいね。

 今回も 1 から 10 までの数字で考えてます。



  1.配列変数に、使う数字を代入

 手動で書き込む場合は KAG 編に書いてある通りなので、ここでは自動代入方法を。

  @iscript

  // 配列変数を用意します

  f.suji = [];

  // 繰り返し処理を行う for ステートメントを使います
  // こちらではローカル変数 i が f.c の役割です
  // 第1節は配列 [0] から開始させるために 0 を代入します
  // 第2節は対象を表す i が要素の必要数より小さい数ならばこの処理を繰り返させます
  // 今回は 10 個の数字を使うので 10 です ( つまり i = 9 まで繰り返し、 i = 10 になったら終了 )
  // 第3節は i に 1 を加算して対象を次に移します

  for ( var i = 0; i < 10; i++ )

   // 数値を代入します
   // たとえば i が 3 のときは f.suji[3] = 4 という式に置き換わります

   f.suji[i] = i + 1;

  @endscript



  2.数字をランダムに並べ替える

 要素の前からと後ろから、二回シャッフルします。

  @iscript

  // まず前から入れ替えます
  // ローカル変数 i が f.c 、u が f.i の役割です
  // 第1節は配列 [0] から開始させるために 0 を代入します
  // 第2節は対象を表す i が配列の最後より小さい数ならばこの処理を繰り返させます
  // 配列の最後を表す数値は、配列の要素数を表す .count を利用します
  // 今回は [9] までの配列なので i = 8 まで繰り返し、i = 9 になったら終了です
  // 第3節は i に 1 を加算して対象を次に移します

  for ( var i = 0; i < f.suji.count - 1; i++ )
  {

   // 入れ替える相手を現在の対象の次から配列の最後までの間でランダムに選びます

   var u = intrandom ( i + 1, f.suji.count - 1 );

   // 現在の対象と選んだ相手の内容を入れ替えます
   // たとえば i = 2 で u = 4 なら f.suji[2] <-> f.suji[4]; という式に置き換えられます

   f.suji[i] <-> f.suji[u];

  }

  // 次に後ろから入れ替えます
  // 第1節は配列の最後から開始させるために f.suji.count - 1 を代入します
  // 第2節は対象を表す i が 0 になるまではこの処理を繰り返させ、 i = 0 になったら終了します
  // 第3節は i から 1 を減算して対象を次に移します

  for ( var i = f.suji.count - 1; i > 0; i-- )
  {

   // 入れ替える相手を配列の最初から現在の対象の前までの間でランダムに選びます

   var u = intrandom ( 0, i - 1 );

   // 現在の対象と選んだ相手の内容を入れ替えます

   f.suji[i] <-> f.suji[u];

  }

  @endscript



 ステートメントの書き方など TJS の詳しい説明はリファレンスにあるのでそちらを参照。

 KAG で書くより TJS で書いたほうが高速ですし短いですね。

 次は応用編。トランプ用の処理で解説してみます ...


 このサンプル処理の内容に対する質問やご意見は、当サイトの掲示板かメールにてお受け致します。

 サンプルの内容についてを W.Dee 氏に質問するのはご容赦くださいね(^^;

 混乱させてしまうのではないかと思いますので…

 また、動作確認は一通りしましたが、気付いていない不具合とかがあるかもしれません。

 発見した場合は、ぜひご一報頂けますと助かります m(_ _)m

[ メニューへもどる ]