| +++ カードゲームを作ろう +++ |
| ▼ 内容の一括ダウンロード (準備中) | 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 |
|