« システムブックのロード処理の解説 | メイン | 別々のコミックファイルで同一のセーブデータを使用する »

ランダムに処理を行わせたい・一定確率で処理を行わせたい

ランダムに処理を行わせたり、一定確率で動作を行わせるには
1つの数値変数を使って乱数をmod演算(割り算した余りを算出します)することで実現できます。

たとえば、10通りのランダム処理、1つあたりの発生確率が10% である処理を行わせるには
下の画像のようなコマンドを構成します。(動作処理用の数値変数「ランダム」を用意しています) ランダム動作
(ランダム動作3以降は省略しています)

具体的な処理としては
数値変数の操作「(用意した変数)」 ← 「%@乱数%」 mod 「(ランダム動作の数)」
とします。
たとえば、ランダムに1~20という画像を表示したいとすれば、「%@乱数%」 mod 20となり、
その後のランダム動作において「画像を表示する」コマンドを使用して各々の数字を表示するようにします。
乱数を使用することでほぼ等確率でそれぞれのランダム処理を行うことができます。

mod演算については、式を(ある数) mod Yとすると0~Y-1のY通りの結果が得られます
例:何かの数を3で割ったとすると、余りは0(割り切れる),1,2の3通りになりますよね 

よって、
数値変数の操作「(用意した変数)」 ← 「%@乱数%」 mod 「(ランダム動作の数)」
の後に
「条件分岐 もし・・・ならば」コマンドを使用して、結果の数の分だけ条件分岐させます。
mod YならY通りの条件分岐をさせます。
「(用意した変数)」の値が0~(ランダム動作の数-1)の場合について条件分岐させてください。
注意:0を含むので modでのランダム動作の数から1を引いた数です

条件分岐した先でランダム動作を行わせれば、それぞれのランダム動作を等確率で発生させることが出来ます。
(それぞれのランダム動作の内容が長くなるようであればサブルーチンまたはページ移動を行った方が良いでしょう)


等確率ではない場合


等確率でない場合は、その確率に応じてmod演算を変更します。
例えば、1%単位での発生確率であるのならば、mod 100とします。
例:動作1は27%、動作2は47%、動作3は20%,動作4は6%だとすると、

もしも (用意した変数)<27ならば←0+27=27、1多いので≦ではなく<
動作1の内容
そうでなければ
もしも(用意した変数)<74ならば←27+47=74
動作2の内容
そうでなければ
もしも(用意した変数)<94ならば←27+47+20=94
動作3の内容
そうでなければ←上に全て該当しなければ95以上99以下(つまり6通り)なので
動作4の内容
ここまで
ここまで
ここまで


関連記事

Copyright ©2005-2013 近藤 All Rights Reserved.| 2007年11月15日

トラックバック

このエントリーのトラックバックURL:
http://faq.comicmaker.info/system/mt-tb.cgi/216

質問と回答

お久しぶりです。濃崎です。
内容についてではなく、誤字に気付いたので……。

「確立」ではなく「確率」では?

――それでは。失礼致しました。

Commented by 濃崎 | 2007年11月15日 22:25

ブフッ(爆)・・・スミマセン、IMEに任せてました
(しかも責任転嫁w)
大変失礼しました。

Commented by 近藤 | 2007年11月17日 23:57

この記事についての質問・意見はこちらからどうぞ


質問した直後にはこのページには質問は掲載されません。
近藤(管理人)による回答が完了した時点(1日~3日ほど)で質問と回答が同時掲載されます。
尚、メールアドレスを記入していただいた質問につきましては、
メールアドレス宛に回答させていただき、このページには質問も回答も掲載致しません

(ただし、データ本文を修正するべきと判断した場合は質問の回答に基づき修正いたします)
ので、個人の開発環境に深く関係するような質問はなるべくメールアドレスをご記入下さい。

<<SPAM対策のため、以下の英字は使用しないでください>>
good,great,nice,homepage,find




保存しますか?