2017-08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ゲーム製作ネタ「乱数論」

今回は、現在製作しているゲームのネタも交えつつ、乱数について自分なりに考察してみたいと思います。
まず、ゲームで乱数と言えば命中率、アイテム発見確率、物欲センサー、羅針盤…
運が良いと嬉しく、運が悪いとゲーム機を叩き割りたくなるほどの業の深さをもった要素です。確率に踊らされる…なんだかパチンカーのようだ
(俺もテイルズオブレディアントマイソロジー2で何百分の1の確率で手に入るユニーク装備のために、いったい何時間宝箱マラソンをしたか…)

特に、戦闘に運の要素が絡む場合(ポケモンが最たる例)下手すりゃ運ゲーじゃねえか!!なんだこのク○ゲー!っていう人も居ると思います。でも自分は逆です。将棋みたいに対人戦ならともかく(将棋くらいシンプルで相手の考えを読む要素のあるゲームなら自分は大いにありです。フリーゲームだと不思議の城のヘレンかな。あれも若干成長要素がありますが。)、勝負には運で番狂わせが生じる要素がないと面白くないと思っているので、運の要素があるのは対抗策があるならむしろ来いよ!って感じです。良いじゃないですか、レベル上げで運の要素を超克する達成感とかあっても。

ですがまあ、例え運の要素があっても今の私の考えのようにそれを考慮したり、対抗できる要素はつけるべきだと思います。
そこで、乱数や確率の要素を扱う、出くわしたときの工夫みたいなものをまとめてみましたので興味があったらご覧ください。


1.乱数種を0にしたらどうなる
これはプログラミングが分かる人なら分かると思いますが、乱数のパターンをきめる乱数種(乱数シードと呼ばれるものです。)というものを0にして乱数を発生させる実験を私がよく使うゲーム製作用エンジンで行ってみました。

 ・ホットスーププロセッサver3.3(以下HSP) … 一定の法則の値を返す   38 19 38 37 55 97 65 85 ...
  HSPの場合、randomize命令をかけないと乱数種が変わらず、パターンが一定になってしまうようです。
  また、randomizeの引数を固定値にしても、パターンが一定になってしまうようです。

 ・RGSS(RPGツクールXP) … 一定の法則の値を返す   55 59 72 85 60 86 55 85 ...
  RGSSの場合、randが呼ばれた際に、乱数種を決定するsrandが一度も呼ばれてない場合、srandを自動で行うので意識する必要はないようです。

 ・ウディタ  … 0を返す!?   0 0 0 0 0 0 0 0 0 ...
  因みに乱数種が1の場合 … 41 65 31 41 19 15 72 11 78 37 ...
 ウディタの場合、起動時に自動的に乱数種を決定するので意識する必要はありませんが、0を代入した場合だけ0を返し続けるようになるのでその点のみ注意が必要です。

 共通していることは乱数種を一定の数字で初期化すると、同じパターンが発生するということです。
 0なら0の乱数パターンがあり、1なら1の乱数パターンがあります。
 これが何を意味しているかというと、乱数パターンは再現できるということです。つまり、ランダムな要素をもったゲームでもリプレイ機能が作れるということです。例えば、昔の風来のシレンには回想という1フロアの行動を思い出す機能がありますが、あれがまさしくランダムな要素を持ったゲームのリプレイ機能です。これを乱数種を固定することで実装できるわけですからリプレイ機能を作る際には覚えておいて損はないでしょう。

 ですが、乱数種を固定すると同じパターンがとれる → リセットしても同じ結果がでるぞ!!ということになってしまいます。場合によっては嫌な感じです。特にウディタの場合、乱数種も保存しますので、ロード直後に乱数種を変更するか常時乱数を発生させてパターンをずらすのがベターでしょう。
 ですが、肝心の乱数種を変更するときに…。
 乱数種をどうやって変えるんだよ!乱数種を変えるために乱数使ったら堂々巡りで結局一緒じゃねえか!っていう話になります。
 大丈夫です!こういう時に、時間とともに変わる数値があります。それは時間そのものです。
 具体的には、乱数種を変更する際に時間をもとにした数値を代入すればいいだけです。ですが、通常は意識する必要はありません。HSPの場合、randomizeをただ実行すればいいだけですし、ウディタツクールでは最初に自動的にやってくれます。ただ、先述の通り、ウディタは乱数種を保存しますので、その際に時間を基にした数値を代入する必要はあります。まあ、常時乱数を発生させてパターンをずらすのが一番楽なんですけどね。


2.乱数の偏りとどう向き合うか
 
乱数というのはどうしても偏りが生じます。ですので確率が90%でも10回連続で外れることもあるし、10回連続で当たることもあります。乱数っていうのはそういうもんです。
 でもこれって、確率が初めから予想されていれば納得できませんか?そうすれば「まあ、外すこともあるか…」ということもあるし、「0%か100%しか信じない(キリッ」という判断も出来るはずです。

そこで、私の現在作っているゲームでは、乱数が絡む命中率の要素が登場しますが、攻撃時の命中率は選択時に予想命中率として確認できるようにしています。(ついでに予想ダメージも表示されます。)

ErrySS.jpg
(ああああ~!!製作中のゲームのSSとか超恥ずかしい!恥ずかしいよ!しかも自作イラスト!超恥ずかしい!)

予想と言っているのは、相手の行動によって命中率が変化する可能性を考慮していないからです。
また、プレイヤーが使える技に、全ての技能の命中率を100%にする(ただし相手の状態異常耐性は無視できない)技能もあるため、命中率によって行動の取捨選択ができるゲームデザインになっています(いる筈です)。
もっともこれは、スキルが豊富にあり、戦い方に複数のバリエーションがあるゲームデザインだからできるものだと思います。

 そして、先述の乱数種を時間から取得する方法ですが… 恐らくどのゲーム、プログラムでも行っています。それがミリ秒のみを取得するか完全に時刻、分、秒から取得する違いはあるでしょうけど。
 俗に物欲センサーと言われているものはこの時刻によって取得してる乱数種が関係してるかもしれません。朝なら朝、昼なら昼プレイしたら全然上手くいかない…。そんな時は、プレイする時間帯を変えれば上手くいくかも…?ということがあるかも知れませんよ。


3.メルセンヌツイスタと呼ばれる乱数生成アルゴリズム

乱数についていろいろ調べたら面白いものを見つけました。
Mersenne Twister: A random number generator (since 1997/10)

これの詳細は深く調べたわけではないのですが、今までの乱数生成アルゴリズムの欠点を考慮しており、処理が高速であることと、理論値に近い統計が得られる高品質な乱数が生成できるそうです。上手く使えば乱数特有の思ったよりあたらねーぞ!!っていうのが解消できるかも知れません。
ただ私としては深い興味はないので、興味があるかたはメルセンヌツイスタで色々調べてみてください。

(7/26 追記)
 どうやらツクールXP以降で使われているRGSSには標準でメルセンヌツイスタが採用されているようです。(というより、RGSSのベースとなっているRuby自体に元々搭載されている。)つまり、特にツクールでゲーム製作中は、意識しなくても高品質な乱数が使えるってことです。いやー、RGSSもといRubyは意外と侮れませんね。

4.最後に
いかがでしたでしょうか。乱数を使うゲーム作りにおいて、少しは参考になったかなあと思います。
最後に、乱数に関する書籍をいくつか紹介して終わりにしたいと思います。


数学ガール 乱択アルゴリズム (数学ガールシリーズ 4)数学ガール 乱択アルゴリズム (数学ガールシリーズ 4)
(2011/03/02)
結城 浩

商品詳細を見る



真の乱数列は存在できない!真の乱数列は存在できない!
(2014/01/09)
滝上敏明

商品詳細を見る

 こちらはKindle版です。androidでも見れますし、無料サンプルもあります。


爆裂台が一瞬でわかるパチンコ台新乱数 (ギャンブル財テクブックス)爆裂台が一瞬でわかるパチンコ台新乱数 (ギャンブル財テクブックス)
(2006/02)
香田 賢勝

商品詳細を見る

 パチンコ台の乱数に関する本のようです。ですが、発売時期的に古いデータかも…
スポンサーサイト

テーマ:ゲーム製作 関連 - ジャンル:ゲーム

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

http://vagabondym.blog.fc2.com/tb.php/43-4392379e
この記事にトラックバックする(FC2ブログユーザー)

«  | ホーム |  »

わたしのこと///

風来のやまやん

Author:風来のやまやん
メール:
huurai_ymyn@yahoo.co.jp

ツクールなどでゲームを作る20代。
ホームページはこちら
風来人・やまやんの大冒険

カテゴリ

雑記 (7)
【ゲーム】ボンバーミステリータワー (3)
【ゲーム】闘え!魔法戦士エリー (2)
【ゲーム】宝探し -Starring Treasure- (3)
【ゲーム】ダンジョンロード (3)
【ゲーム】ダンジョンロード2 (1)
【ゲーム】ダンジョンロード zero (1)
【ゲーム】アニメーター粛正の戦い (1)
【ゲーム】ウォッシュ・ザ・ストリート (3)
ダンジョンロードシリーズ世界観設定 (4)
過去記事 (4)
アニメ関係 (7)
ゲーム製作テクニック (6)
ゲーム製作 (14)
ゲーム製作用素材 (2)
ゲーム考察 (5)

最新記事

記事の検索

累計アクセス数

RSSリンクの表示

つぶやき四郎

ブロとも申請

この人とブロともになる

当ブログについて

やまやんのゲーム製作・創作ブログ(vagabondym.blog.fc2.com)はamazon.co.jpを宣伝しリンクすることによって サイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。