トップページgamedev
1001コメント399KB

■吉里吉里/KAG/TJS雑談質問スレ■その15

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/07/24(木) 11:16:40ID: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辺りを参照のこと。
0069名前は開発中のものです。2008/07/30(水) 12:27:04ID: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"]

0070名前は開発中のものです。2008/07/30(水) 13:20:14ID: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;
}
0071名前は開発中のものです。2008/07/30(水) 18:25:04ID:V+0eXBMW
パフォーマンス悪いな。どうでも良い程度だが
0072名前は開発中のものです。2008/07/30(水) 20:40:41ID: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--];

こんな感じとか? テストしてないけど
アルゴリズム的で使うときは手を加えないかんけど
0073名前は開発中のものです。2008/07/30(水) 20:58:27ID:fEXL1RGh
>>68
手っ取り早い方法を教えてしまうと、逆引きマニュアルに関数shuffleのTJSスクリプトが
記述されてあるので、それを利用して配列を入れ替えた後に、順に取り出していけばいい。
0074名前は開発中のものです。2008/07/30(水) 23:18:16ID: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(); // 使用済みならやり直し
}
■ このスレッドは過去ログ倉庫に格納されています