解決済み:被らないランダム変数
Posted: 2016年7月03日(日) 17:23
初めてこちらを使わせて頂くので、なにか不備などありましたらご教授ください。
0~nの乱数を生成して、
前回選択したコマンドと、今回選択したコマンドが同じ場合、
その生成した乱数が、前回の生成した乱数と同じ場合、生成をやり直す。
というのをスクリプトの練習を兼ねて、できるだけグローバル変数を汚さずにやろうとしたのですが、
イマイチスマートにできていない気がします。
var wordsAlt = (function(){
var beforerand;
var beforeCommandId = 0;
return function(randMax,box){
randMax++;
var rand = Math.floor(Math.random() * randMax);
if(beforeCommandId == $gameVariables.value(11)){
for( ; rand == beforerand ; rand = Math.floor(Math.random() * randMax));
}
beforerand = rand;
beforeCommandId = $gameVariables.value(11);
$gameVariables.setValue(box,rand);
}
})();
初めはコモンイベントで実現してしまおうと思ったのですが、コモンイベントでは引数が設定できず、
乱数の最大値が設定できなかった(コモンイベントの前に変数を弄るというのも考えた)為、
こういった感じになってしまいました。
個人的には引数であるboxの部分を設定せずに、
ツクールの変数操作でスクリプトコマンドwordsAlt();で代入できたらよかったのですが、
どうやらこの書き方だと正常に動作しないようで、常に0が代入されてしまいました。
スクリプトを介さずとも出来るだろ!とか、
こうするともっと綺麗になる。とかありましたら、ご教授いただけたらと思います。
よろしくお願いいたします。
0~nの乱数を生成して、
前回選択したコマンドと、今回選択したコマンドが同じ場合、
その生成した乱数が、前回の生成した乱数と同じ場合、生成をやり直す。
というのをスクリプトの練習を兼ねて、できるだけグローバル変数を汚さずにやろうとしたのですが、
イマイチスマートにできていない気がします。
var wordsAlt = (function(){
var beforerand;
var beforeCommandId = 0;
return function(randMax,box){
randMax++;
var rand = Math.floor(Math.random() * randMax);
if(beforeCommandId == $gameVariables.value(11)){
for( ; rand == beforerand ; rand = Math.floor(Math.random() * randMax));
}
beforerand = rand;
beforeCommandId = $gameVariables.value(11);
$gameVariables.setValue(box,rand);
}
})();
初めはコモンイベントで実現してしまおうと思ったのですが、コモンイベントでは引数が設定できず、
乱数の最大値が設定できなかった(コモンイベントの前に変数を弄るというのも考えた)為、
こういった感じになってしまいました。
個人的には引数であるboxの部分を設定せずに、
ツクールの変数操作でスクリプトコマンドwordsAlt();で代入できたらよかったのですが、
どうやらこの書き方だと正常に動作しないようで、常に0が代入されてしまいました。
スクリプトを介さずとも出来るだろ!とか、
こうするともっと綺麗になる。とかありましたら、ご教授いただけたらと思います。
よろしくお願いいたします。