[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 09/22 11:46 / Filesize : 280 KB / Number-of Response : 902
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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(); // 使用済みならやり直し
}







[ 続きを読む ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<280KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef