1 名前:名前は開発中のものです。 [2008/07/24(木) 11:16:40 ID:w0/6Uk+/] ノベルゲーム製作ツール吉里吉里/KAGのユーザーが雑談・質問をするスレです。 自作ゲームの進行状況や製作ツールについての話、TJS等の話題もどうぞ。 マルチポストはやめましょう。個人叩きも禁止です。 ※スレで質問をするときは、ドキュメント、スレの過去ログ、公式掲示板のログ、 FAQ、Google等で調べてからにしましょう。 前スレ:■吉里吉里/KAG/TJS雑談質問スレ■その14 ttp://pc11.2ch.net/test/read.cgi/gamedev/1204006714/ 吉里吉里2/KAG3雑談質問スレ_過去ログ ttp://www.geocities.jp/kirikiri_log/ 吉里吉里ダウンロードページ ttp://kikyou.info/tvp/ 詳しくは>>2-5 辺りを参照のこと。
69 名前:名前は開発中のものです。 mailto:sage [2008/07/30(水) 12:27:04 ID:2jNszI/v] こんな感じ…かな。 1-10までの例でのサンプルです。 最初に1-10までの数の入った配列を作り、その配列をランダムにシャッフルして、配列の先頭から順番に数を取り出しています。 1-100までの対応は適当に書き換えるべし。 [iscript] f.rand = []; for (var i = 0; i < 10; i++) f.rand.add(i + 1); for (var i = 0; i < 10; i++) { var n = intrandom(10 - i - 1) + i; var t = f.rand[n]; f.rand[n] = f.rand[i]; f.rand[i] = t; } [endscript] [eval exp="f.count=10"] *loop [eval exp="f.num = f.rand[0], f.rand.erase(0)"] [emb exp="f.num"][l][r] [eval exp="f.count = f.count - 1"] [jump target=*loop cond="f.count > 0"]
70 名前:名前は開発中のものです。 mailto:sage [2008/07/30(水) 13:20:14 ID:48LQTP+F] 自分とこで使ってる関数 minが最低値、maxが最高値、numberが数値を取る回数で minからmaxまでの連番の値の中からnumber回値を取得、結果は配列で返ってくる // 重複の無い複数の値をランダムで取る function random_nums(min = 0, max, number) { var rndnum = []; var resultnum = []; var tmp = 0; for (var i=0; min+i<=max; i++) { rndnum[i] = min + i; } for (var j=0; j<number; j++) { tmp = intrandom(0, rndnum.count-1); resultnum[j] = rndnum[tmp]; rndnum.erase(tmp); } return resultnum; }
71 名前:名前は開発中のものです。 mailto:sage [2008/07/30(水) 18:25:04 ID:V+0eXBMW] パフォーマンス悪いな。どうでも良い程度だが
72 名前:名前は開発中のものです。 mailto:sage [2008/07/30(水) 20:40:41 ID:7cKTQNo/] // 初期化 var max = 100; var size = max-1; // 配列上の有効な最後の要素の添え字 var array = []; for(var i = max; i; i--) array[i-1] = i; // 取り出す(これを繰り返す) var i = intrandom(0, size); array[i] <-> array[size]; var result = array[size--]; こんな感じとか? テストしてないけど アルゴリズム的で使うときは手を加えないかんけど
73 名前:名前は開発中のものです。 mailto:sage [2008/07/30(水) 20:58:27 ID:fEXL1RGh] >>68 手っ取り早い方法を教えてしまうと、逆引きマニュアルに関数shuffleのTJSスクリプトが 記述されてあるので、それを利用して配列を入れ替えた後に、順に取り出していけばいい。
74 名前:名前は開発中のものです。 mailto:sage [2008/07/30(水) 23:18:16 ID:TpOVECJ3] こういうイメージで使用済みフラグを使う方針もあるね var isUsed = new Array(100); // その番号を使用したかどうか var countLeft = 100; // 残っている数字の個数 function getUnusedNumber(){ var x; // 乱数 if (countLeft == 0) throw new Exception("残り数字なし"); x = Math.floor( Math.random() * 100 ); // 0から99までの整数をとってくる if (!isUsed[x]){ // それが未使用なら isUsed[x] = true; // 使用済みフラグを立てて countLeft --; // 残り個数を減らして return x; // 値を返す } else return getUnusedNumber(); // 使用済みならやり直し }