【ウディタ】乱数を使っておみくじを作ろう!【前編】

2021-07-13ウディタで作ってみよう

ウディタの「乱数」を使って、ごくごく簡単なおみくじを作ってみましょう。

早速作ってみよう!

今回はシンプルに「大吉」「中吉」「凶」の3種類が引けるようにしましょう。

簡単な選択肢をつくろう

適当な場所にコモンイベントを一つ用意し、以下の選択肢をつくります。

「選択肢」>「キャンセル分岐先」にある「分岐2」のボタンを押してやることで、キャンセルキーを押したときの処理を「しない」を選んだときの処理と同じにすることができます。(デフォルトでは「別分岐」が選択されています)

適当なマップイベントに先程作ったコモンをぶち込んで、正しく表示されるか確認してみます。

無事に表示されましたね。

乱数を使おう

さてさて、本日のテーマでもある乱数を使ってみましょう!
どうやって使うのかといいますと、乱数で作られた値を基におみくじの結果が変わるようにするのです。そうすることでランダム性のあるおみくじが作れますね。

イベント入力で変数操作を選び、画像のように入力してください。

赤枠で囲われている部分の「~」が乱数処理を表しています。
画像では、0~2までの数字のいずれかを左辺(コモンセルフ10番)に代入するという処理をしています。

選択肢で「する」を選んだ場合の処理に挟みます。

選択肢の「する」を選んだ場合のみ乱数を生成するようにしたいので、画像の位置に処理を挟んでください。

乱数を基に、結果を表示しよう。

あとはコモンセルフ10番に代入された値を基におみくじの結果を表示すればいいですね。値が0であれば大吉、1であれば中吉、2であれば凶、としてみましょう。

テストプレイしてみましょう。

おみくじが引けました!

完成……? 実はまだ不完全

これでひとまずおみくじを引くプログラムができました。しかしこの状態ではまだ未完成なのです。
「おみくじちゃんと引けてるよ? なんで?」
と思われるかもしれません。

それでは試しに、一度セーブをしてからもうあと3,4回ほどおみくじを引いてみてください。そのときに必ずおみくじの結果をメモしておいてください。

メモしましたか?
では次に先程セーブしたデータをロードし、先程のメモと照らし合わせながら、もう一度同じ数だけおみくじを引いてみてください。

どうでしょう。

ロード前と全く同じ結果が出ませんでしたか?

乱数の処理を見てみよう

結果が繰り返される……ということは、乱数の処理に何か問題がありそうだ。

試しにデバッグ文を挟んで、コモンセルフ10の値を見てみましょう。デバッグ文は「文章の表示」で「デバッグ文」と書かれたボタンを押すことで挿入できます。
“乱数→\cself[10]"とデバッグ文を打てば、"\cself[10]"の部分にコモンセルフ10番の数値を表示することができます。

次にテストプレイ中に[F3]を押してみてください。すると、ゲーム画面の右側にデバッグウィンドウが開きます。このウィンドウにデバッグ文が表示されます。

デバッグウィンドウを開いた後に一度セーブを挟んでから、おみくじをひいてみましょう。
下の画像はおみくじを5回引いたときのもの。書いてある数字が乱数処理によって生成された数値です。

では先程セーブしたデータをロードし、再度おみくじを引いてみます。

いかがでしょう。
生成される乱数の値が繰り返されているのが分かります。

なぜこのようなことが起きるのか

これには「シード値」が関係しています。
シード値とは「システム変数110番」に格納されている数値のことです。

ウディタにはこの「シード値」を基に乱数を生成するという仕様があります。そして乱数が繰り返される原因はシード値にあるのです。
よりランダム性のあるおみくじを作るには、シード値をいじってやる必要があります。

詳しいやり方は後編で説明していますので、ご覧ください。

おまけ(2021/07/13 追記)

さきほど「~」を使う乱数処理の書き方を説明しましたが、実はもう一つ方法があります。
変数呼び出し値を使う方法です。

右辺に 8000000+X の値を代入することで、0~Xの乱数を形成することができる便利な変数です。
今回の場合は0~2の乱数を作りたいので8000000+2、すなわち8000002を右辺に代入しております。

ただしこの方法で求められるのは0から始まる乱数(0~)のみです。
マイナスの数値や、0より大きい数字から始まる乱数は作れないので、そういったものを作りたい場合は初めに説明した方法で記述して下さい。


当ブログの記事がお役に立ちましたら、
ボタンをクリックしていただけますと励みになります(^^)v
(1日1回まで有効)
にほんブログ村 ゲームブログ ゲーム制作へ

どちらも押してくれると嬉しいな……。