あ、へるばれモバイル

あ、へるばれモバイル by 無頼寿あさむ

主にゲーム関連の仕事をしているフリーライターの日記。企画、ゲームシナリオ、その他文章の仕事募集中。

◆ メニュー ◆

HOME | 最新日記(10件) | プロフィール | リンク
*** PCサイト(大きい画面)はこちら ***

乱れて交わる俺と姫」 WAFFLE
祝WAFFLE様10周年のファンタジーもの。AVG+エロエロH

ノベルゲームのシナリオ作成奥義」 秀和システム
シナリオの書き方に留まらず、ライターが担当するさまざまな作業を解説。企画・プロットに始まり各種資料やフローの書き方、台本の書き方、etc。プランナーを目指す人にもお勧め

◆ 置いてけぼり日記 ◆

2005/9/28 : コンピュータはキチガイになれない


完全にランダムなシャッフル再生は可能か(上)
はっはっは。
ある程度技術を習得したプログラマならこの内容を面白く読めると思うんだけども、この文章での笑い所ってちょっと説明が難しかったりする。

Cでいうと、

// MusicCount = 曲合計
// PlayNo = 演奏する局番号
PlayNo = rand() * MusicCount / RAND_MAX;

──という部分の話である。

「PlayNo = rand() * MusicCount / RAND_MAX;」というたった一文だけのために、上下篇でもってあれこれ語られるものなのだけど、この文法における「rand()関数」のプログラム原理をあらかじめ知る必要があるからだ。
これは、「ランダムはランダムじゃない(でたらめはでたらめじゃない)」という、鋼の錬金術師でいうと「ありえないはありえない」というセリフに匹敵する、プログラムにおける原理みたいなものである。
ぶっちゃけた話、コンピュータにおける基本的なランダム数値とは、6,8,2,9,3,5,7,0,4,1,6,8,2,9,3,5,7,0,4,1,6,8,2,9,3,5,7,0,4,1,6,8,2,9,3,5,7,0,4,1,,.... と、ある計算式でもって順番に出力される循環数値なのだ。
もちろん、これを破る方法はある。
コンピュータに最初の数値(上記でいうと、最初の「6」)を選ばせなければいいのだ。
そんな方法はあるのか?
これがあるのだ。それは「人間というキチガイの介入」である。
なんのこっちゃいって思った?
具体的にはこういうことである。
「人間がプログラムの実行を行った時間(秒でも、ミリ秒でも何でもいい)を、最初の数値とする」
Cでいうsrand()、VBでいうとRandomizeである。
これで少なくとも毎回起動するごとにまったく異なるランダム値が出てくるようになるのだ。
しかし、これでもまだランダムには成りきれていない。なぜなら、単に最初の数を設定しただけで、出現する数の順序は変わっていないのだから。

だったら、ことあるごとに時間を計測するか?
いや、そうもいかないだろう。
コンピュータの処理は、それがある一定時間で処理できるという行儀の良いものほど、時間計測というものが仇になるのだ。下手したら、1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,....と計測した時間を辿るだけのものになってしまうのだから。たとえピコ秒単位で計測ができたとしても、飛び飛びに値を拾うだけである。
アクションゲームのように常に人間の入力が期待できるものであるなら、その都度マイクロ秒単位で計測するだけでも、結構面白いランダム値が引っ張り出せるかもしれないけどね。

解説おしまい。

関連タグ: PC


◆ バックナンバー ◆

2009年09月 2009年08月 2009年07月 2009年06月 2009年05月 2009年04月 2009年03月 2009年02月 2009年01月 2008年12月 2008年11月 2008年10月 2008年09月 2008年08月 2008年07月 2008年06月 2008年05月 2008年04月 2008年03月 2008年02月


Copyright (c) 無頼寿あさむ/Powerd by Digital Cottage.Net
ご意見ご感想ネタの提供は、assem-blage@digital-cottage.netにどうぞ