[ メニューへもどる ]

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

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

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

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

 応用例としてトランプ用の処理を書いてみます。

 できるだけ処理を短くする書き方をしていますが、やっていることは先の解説での例と同じです。



 トランプの場合、 4 種 × 13 枚なので、数字を 52 個用意します。

 ※ジョーカーを含まない場合です。

  ; KAG の場合

  @eval exp="f.suji = [], f.c = 0"
  *suji_set
  @eval exp="f.suji[f.c] = f.c + 1, f.c++"
  @jump cond="f.c < 52" target="*suji_set"

  ; TJS の場合

  @iscript
  f.suji = [];
  for ( var i = 0; i < 52; i++ ) f.suji[i] = i + 1;
  @endscript



  1 から 52 までの数字をシャッフルします。

 何回も遊べるゲームにする場合は、毎回数字を代入し直してからシャッフルをする必要はないので、

 シャッフルの部分だけをサブルーチンにしておき、必要なときに呼び出すようにすればよろしいかと。

  ; KAG の場合

  @eval exp="f.c = 0"
  *rnd_set1
  @eval exp="f.i = intrandom ( f.c + 1, f.suji.count - 1 )"
  @eval exp="f.suji[f.c] <-> f.suji[f.i], f.c++"
  @jump target="*rnd_set1" cond="f.c < f.suji.count - 1"
  *rnd_set2
  @eval exp="f.i = intrandom ( 0, f.c - 1 )"
  @eval exp="f.suji[f.c] <-> f.suji[f.i], f.c--"
  @jump target="*rnd_set2" cond="f.c > 0"

  ; TJS の場合

  @iscript
  for ( var i = 0; i < f.suji.count - 1; i++ )
  {
   var u = intrandom ( i + 1, f.suji.count - 1 );
   f.suji[i] <-> f.suji[u];
  }
  for ( var i = f.suji.count - 1; i > 0; i-- )
  {
   var u = intrandom ( 0, i - 1 );
   f.suji[i] <-> f.suji[u];
  }
  @endscript



 実際に使うときは 52 個の数字を 13 個ずつにわけて判定します。

 たとえば 1 〜 13 をスペード、 14 〜 26 をハート、 27 〜 39 をクラブ、 40 〜 52 をダイヤと決めておき、

 条件分岐でカード画像の表示などをすればいいわけです。

 ちなみにジョーカーを含ませたい場合は、シャッフルする数字を増やして 53 以上をジョーカーにすれば

 よいかと。

 以上、シャッフル処理でした。


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

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

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

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

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

[ メニューへもどる ]