
ゲーム制作をする上でランダム要素は1つのスパイスです。入れ過ぎは禁物ですが適度な運要素は単調なゲームに刺激を与えてくれます。
ランダム要素は乱数を使えば簡単に実装できますが、一方でランダムにするものが多くなった場合この確率を個別に設定していくのは手間になります。敵を倒したときのドロップアイテムやガチャ、ボスの攻撃パターンなどがわかりやすい例かもしれません。
この記事ではその考え方のコツをまとめました。
少ないパターンで考える
まずは少ないパターンから考えていきましょう。
シンプルにくじ引きのようなものをイメージすると考えやすいかもしれません。
シンプルにくじ引きのようなものをイメージすると考えやすいかもしれません。
2パターン

アタリとハズレの2パターンしかなく、アタリの出る確率を20%にしたい場合、分岐に使う条件式は上の図のようになりますね。
今回は見やすいようにScratchの画面を使っていますが、コーディングでも本質は変わりません。
今回は見やすいようにScratchの画面を使っていますが、コーディングでも本質は変わりません。
3パターン

続いて大アタリを追加した3パターンで、こちらも確率を20%に設定したいとします。
基本的には同じ構造で上の図のようになりますね。
4パターン、5パターンになっても同様にプログラムを増やしていけば実装は可能です。
しかしこの調子ではプログラムがどんどん長くなってしまい、途中で追加・消去をしたいときや確率を調整したくなったときの作業量は悲惨で、どこかで入力・計算ミスをしてしまうリスクも大きくなります。
基本的には同じ構造で上の図のようになりますね。
4パターン、5パターンになっても同様にプログラムを増やしていけば実装は可能です。
しかしこの調子ではプログラムがどんどん長くなってしまい、途中で追加・消去をしたいときや確率を調整したくなったときの作業量は悲惨で、どこかで入力・計算ミスをしてしまうリスクも大きくなります。
大雑把に分けてから抽選する
上記のように個別で確率を設定していくのは限界があり、例えば20や30のアイテムを実装するのは現実的ではありません。
そこでまず大雑把に出やすいもの、出にくいものなどでランクをつけてから抽選をすると管理がしやすくなりそうです。
そこでまず大雑把に出やすいもの、出にくいものなどでランクをつけてから抽選をすると管理がしやすくなりそうです。
コモンとレア

上の図はレア10パターン、コモン20パターンでレアの出る確率を20%に絞りたいときのプログラムになります。
一旦20%で抽選をしてアタリが出たらその中で更に10パターンの抽選をしています。
アンコモンやスーパーレア、スペシャルスーパーレア、ウルトラレアなど確率の違う別のランクを追加実装したい場合も大きな手間にはなりせん。
また、レアを30パターンに増やすなどパターン数で逆転が起きても一旦20%で抽選しているので全体の確率に影響を及ぼすこともありません。
こういったまとめて整理・管理するというのもプログラミングのセンスの1つです。
扱う要素の多いプログラムや複雑なものを作りたいときに意識できるといいですね。
一旦20%で抽選をしてアタリが出たらその中で更に10パターンの抽選をしています。
アンコモンやスーパーレア、スペシャルスーパーレア、ウルトラレアなど確率の違う別のランクを追加実装したい場合も大きな手間にはなりせん。
また、レアを30パターンに増やすなどパターン数で逆転が起きても一旦20%で抽選しているので全体の確率に影響を及ぼすこともありません。
こういったまとめて整理・管理するというのもプログラミングのセンスの1つです。
扱う要素の多いプログラムや複雑なものを作りたいときに意識できるといいですね。