Unityでインディゲーム道!

プログラム、Unity初心者がインディゲーム制作を目指して日々思うことなどを書き綴ります。

Unityのための打倒C# [番外編] コクのある乱数について。その2

コクのある乱数についての続きの記事です!

こちらの記事では、乱数をひたすら生成し集計して表示するというプログラムを作り、

通常の乱数コクのある乱数が実際どう違うかを自分なりに検証してみました。

コクのある乱数を生み出すアルゴリズムC#で書くと・・・

 

Random rnd = new Random();

int rNum = ( rnd.Next(0,10) + rnd.Next(0,10) + rnd.Next(0,10) 

   + rnd.Next(0,10) + rnd.Next(0,10) ) / 5

 

というものでした。5回乱数作って5で割る! 

前回のプログラムには多少のミスもあったんですが、まぁやること自体に意義があったのでやってみてよかったです。

 

今回はその後日談というわけではないですが、そのプログラムを改良、拡張したので今一度コクのある乱数、というものについて考えてみたいと思います。

 

改良した乱数集計プログラムについて

拡張した内容は、ふたつのListとそれぞれの処理です。 

・numAppearPoints
各々の数字(0から9まで)を抜き出した後、新たに元の集計のListから、その数字が全体のどの場所で出たか?というインデックスを集計する。

・pointIntervals
numAppearPointsから、その間隔、インターヴァルを計算して結果を集計するためのListです。

 最終的に三つの集計結果を各数字ごとに表示します。

  

拡張されたコード

さっそくコードをみてみます。

いつもは125%で表示しているので小さくて見づらいですね。 

f:id:miur-us:20161229011954p:plain

f:id:miur-us:20161229012039p:plain

f:id:miur-us:20161229012100p:plain

f:id:miur-us:20161229012116p:plain

 長いし、かなり見づらいですね、申し訳ない。

プログラムの流れをまとめると、

 

・モードを選択する。(通常かコクのあるモードか)
・キー押しっぱなしで乱数をドンドン作る。カウント、集計もする。
・集計された乱数を数字ごとに分類する。
・各数字がどんな間隔で出てくるかを調べる。(追加した機能)
・結果を表示する。

 

って感じです。

for文の中でfor文を二回使い、それぞれの集計をしています。いわゆるoff by oneエラーに苦しめられました。人間とコンピュータとの数の数え方の違いですね。

 

じゃあプログラム起動します。 

f:id:miur-us:20161229012242p:plain

 ここは同じです。 

f:id:miur-us:20161229012301p:plain

まずは通常モードで。

 

f:id:miur-us:20161229012321p:plain

Cキー以外のキーを押し続ければ、乱数がひたすら生成されていきます。

これも同じです。

 

Cキーを押して結果を表示します。試行数は1000回を目安にしています。 

f:id:miur-us:20161229012427p:plain

f:id:miur-us:20161229012525p:plain

f:id:miur-us:20161229012536p:plain

 ここはだいぶ変わりました。黄色くなっているのは単に見やすくするためだけです。

やはり全体的に散らばっていますね。インターバルは50回を超えることはほとんどないみたいですね。散らばってはいるが極端な間隔にはならない、という感じでしょうか。

  

それでは、コクのある乱数を見てみましょう! 

f:id:miur-us:20161229013039p:plain

 

 

f:id:miur-us:20161229013054p:plain

f:id:miur-us:20161229013102p:plain

f:id:miur-us:20161229013112p:plain

  

再度、考察。

やはり偏ってますね、何度みてもおもしろい!

4を中心にそこから離れるほどに、生成数も減るし

インターヴァルも極端になっていく、という傾向が見てとれますね!

  

これをUnityでのゲーム制作にどう活かせるか?というのは

まだ具体的なことは浮かんできませんが、何かしら役に立ってくれるだろうと思います。こっから更にもう一工夫必要かなぁ?

 

 

というわけでプログラムの改良とコクのある乱数についての再考察でした!!