
ずっと使っているオートチャージ付きViewSuica定期の便利さといったら在りませんが、 定期を更新し忘れていると、うっかりオートチャージにて毎日無意識にお金を毟り取られるという仕様。 何とかならないのか殆ど詐欺だろコレ!と脳内で叫びまくっているTeamDyquemで御座います。 皆様こんにちは。
自業自得ですけれどね、かつて2~3回やってしまいました…orz
さて、気がつけばもう6月でありますよ。なんという事でしょう。 ビフォー・アフターはもうリフォームじゃなくて新築って言っちゃいなYO! TeamDyquem的には、3月末にリリースさせて頂いた「ネコりす」より早2ヶ月。 新作開発は順調とまでは言えませんが、遅々としていながらも何とか進んできております。 幾つか平行制作しておりますが、もう間もなくプロトタイプに辿り着きそう子が一つ。 この一つは例によってパズル系なのですが、意外性を目指す余り何とも謎のゲームになってきています。 ネコが出てこない久しぶりのアプリなので開発に彩りが足りない気もするのですが これからも頑張って参りたいと思います。
そう言えばアレですよ。 ここの所ハマっていた「ヴィーナス&ブレイブス」をクリアしました。 これまでに体験したゲームの中でも群を抜いてスタッフロールの素敵なゲームでありました。 これを見るだけで報われたというものです。
さて。
 乱数よもやま話
ゲームを始めとする娯楽系アプリ開発においては特に、 又、異なる系統においてもある種意外性やエフェクト等を取り入れようとする場合など、 各種色々な場面にて所謂「乱数」の組み込みが必要となるケースもあるでしょう。
読んで字の如しと言いたいところで在りますが、プログラマ的な視点より離れますと、 「乱れた数字」になんの意味があるのだろうと思わなくもありません。 そもそも「変数」という言葉にも疑問を感じていた黎明期が自分にもあった筈なのですが。 乱れる数だの変な数だの、和訳されたプログラミング用語にはよくよく考えると不思議な言葉が多いですよね。
仮想関数、名前空間、値渡し、高級言語、etc etc。 日常的にプログラミングへ接しているといつの間にやら忘れてしまいがちな事ではありますが、 どれも、何となくどことなくシックリと来ない謎めいた不思議な言葉達だとは思いませんか?
まあ、「フレンド関数」を「友愛処理」とか言う習慣が育たなかった点はGJというか、 寧ろ少し寂しい感じもしますが。「例外友愛処理」「友愛DLL」…うん、いける。

暴走列車並の脱線プリではありますが、今回は「乱数」につきまして。
プログラマではない方へ「乱数」を簡単に説明する事は意外にも難しいかと思うのですが、 要するにデタラメな数字を取り出せる箱の様なもの、といった所でしょうか。 ゲーム上にてサイコロを振り何が出るかが判らない状態を設計する、等といったケースも良い例です。
この「何の目が出るか判らない」という状態を設計する事は、厳密に言えば実は結構難しい事であります。 以後の話を展開する為に簡単な例題を設けてみました。解いてみて下さいという事ではありませんが、 正しい乱数を実装又は採用するという意味においては大変重要な概念でありますので、一読頂ければ幸いです。
●問1 サイコロを振り10回連続「1」の目が出た後で、11回目に「1」が出る正しい確率は?
●問2 双六ゲームにてサイコロ10回連続「1」の目が出る事は、確率として問題があるか?
●問3 RPGで高確率にてHPの回復する初心者救済的なマスに乗ったら、偶然敵が現れて死んだ
いずれもおかしな設問ではありますが、1に関しては勿論単純に「6分の1」が正解であり、 2には「問題ない」と答えるのが正しいディレクターです。 この2点に異を唱える事はつまりこの宇宙自体を否定する事と同義であり、 不服ならば多次元へ拠り所を探すしか道はありません。
まあネタはともあれ、「神はサイコロを振らない」という物理法則の大原則に則り、通常確率は一定です。 敢えて問題とするならば、そうした神がかった運の持ち主に相対した場合に、 不公平に対する何らかの均等化ボーナス処理を追加していなかった事が挙げられる場合もありますが、 これも通常強制的ではありません。 運の良い人を運の良いままに、悪い人を悪いままに扱う事も、また大切であるという解釈もありましょう。 同じ理由にて、問3もゲームとしての構成に問題があるかどうかはともあれ、確率は平等であるという例です。

さて、ここまでは「乱数」が正しく機能している事を大前提とした理論でありますが、 そもそも「乱数が正しく機能する」とはどういう事でしょう。
一般にコンピューターが扱う乱数も、ひいては自然界に起こる真にランダムに見える様な事象に至るまで、 本当の意味での「ランダム」という状態は存在しません。 神はサイコロを振らない、つまり、世界は全て素粒子レベル量子レベルにおける微細な運動の積み重ねにより、 マクロの事象全てを突き動かしている連鎖反応の産物であるという話であり、 まあ、そんな大風呂敷広げるつもりはなかったのですが、 要するに相当それっぽい疑似乱数ルーチンを採用出来るかがどうかは、 アプリ開発におきましてとても重要になってきます。
数年前でありますがとある市販ゲームにて、 乱数処理が余りにも稚拙な為に、スゴロク部分が大破綻してしまった例が記事になっています。 「該当記事」
何をどう適当にコーディングしたらこんな事が起こるのかと思う方も居るでしょう。 しかし、上記の例は決して大げさなパターンでは無く、 それこそC言語のrandを使っているだけでも起こりえる事なのです。 まあ上記のゲームにつきましてはコーディング云々というよりも、 デバッグ体制とデバッグ結果のフィードバック機構において、 ゲーム制作会社組織として重篤なシステム的欠陥があったであろう点の方がより大きな問題であると思いますが、 何にせよ簡易乱数が乱数として機能していない、ある種典型的なパターンと言えましょう。
こういった事態を引き起こさない為には正しい乱数処理を実装する事がとても大切なのですが、 「乱数」という高度に数学的な論理モデルを、スクラッチから構築するとなればこれは大変極まりありません。 論文レベルですからね。。
既存の、高度で十分に運用実績があり、高速で軽量、且つライセンス的に問題の無いモジュールがあれば それを有り難く利用させて頂く事が合理的であります。
上記の条件を満たす発表済みの乱数処理は世界に幾つか存在しておりますが、 日本人の手により開発され世界的に有名となったアルゴリズム「Mersenne Twister 」、 TeamDyquem的にはこれを強くお勧め致します。 623次元超立方体に均等分布するとかその攻撃力も抜群。 市販ゲームにも数多く実装されておりその運用方法も実に単純明快な、非常に優れたアルゴリズムです。
「Mersenne Twister Home Page 」
TeamDyquemでは、BSDラインセンスへ準拠しながら感謝しつつ利用させて頂いております。 「ちゃんと使える乱数」について興味をもたれましたら、参考になさっては如何でしょう。
梅雨の季節がやってまいりましたが、皆様良い週末を。 「休み」よりも「明日は休み」の方が好き。TeamDyquemでした。
- 関連記事
-

シリーズ記事まとめ
■Aニュース、ガジェット通信 寄稿記事
「『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」」
「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」」
「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」」
「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」」
「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」」
「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」」
「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」」
「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」」
「『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」」
■ゲーム制作初心者さん向け系
ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」
■「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ
ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた
■個人でも出来る、マルチプラットフォーム開発関連
「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4」
「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3」
「iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ」
「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1」
■リリースしました系
「PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。」
「TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app」
「アプリ新作「ネコりす マカロン」をリリースしました」
「埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app」
「アプリ新作「ひよこガーデン」をリリースしました」
「TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース」
「iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました」
「自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました」
「iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました」
「iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました」
「秋刀魚は関係ないけれど、新作「i-Wishbone」リリース」
「アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた」
「「泡リス 女子部」、販売開始」
「AppBankにまりも紹介記事が!」
「ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app」
□ビジネス系
「ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム」
「ゲームプログラマが語る。秀丸エディタのビジネスモデル」
■SFネタ系
「ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?」
「ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話」
「iPhoneアプリ作者が語る。流れ星に馳せる真実」
「iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意」
「iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?」
Theme:プログラミング
Genre:コンピュータ
|