2005-05-18

どうでもいいこと どうでもいいこと - Nao_uの日記 を含むブックマーク はてなブックマーク - どうでもいいこと - Nao_uの日記 どうでもいいこと - Nao_uの日記 のブックマークコメント

なんとなく思いついた何の役にも立たない与太話。

高校の頃は授業中にポケコンでゲームを作るのが日課だった。

その頃使っていたポケコンでは、任意の絵を出すためには縦8*横6ドットの文字画像を書き換える必要があり、それを指定するのに縦の8ドットを1バイトとみなした16進数12桁のデータを与える仕組みになっていた。具体的な例を挙げると、「A」という文字をドット絵で描いたときには下記のような16進数表現としてあらわせる。

××××××
××○×××
×○×○××
○×××○×
○○○○○×
○×××○×
○×××○×
○×××○×
  ↓
1F2848281F00

いろいろな文字や形を表示するために紙や机の上にドット絵を描き、それを頭の中で16進数に変換する手順を繰り返し行っているうちに、ふと気づいたことがある。今自分のやっている行為は絵を描いているのではなく、あらかじめ存在する 0x000000000000 から 0xFFFFFFFFFFFF までの約280兆通りの膨大ではあるがあらかじめ存在する有限のパターンの中から自分の表示したい絵を一つ選び出しているに過ぎない。

Windowsのスライダバーのようなものを使って数値を指定するとその数値に相当する絵を表示してくれるツールがあったとしたら、そのスライダを0から最大値まで動かしていけばそのあいだのどこかに自分が欲しい絵が最初から存在しているはずだから、わざわざドット絵を描くまでもなくそのリストの中から自分の欲しい画像を探してくるだけでいい。

ちょうど当時のPCでゲームを作るための32*32ドット16色のドット絵を描くツールも作っていたけれど、そのツールで作成した、誰が見てもちゃんとした絵として認識できる色つきのドット絵であったとしても結果的には同じ事になる。どれだけ解像度や色数が増えようが、それがデジタルデータである限り本質的には「最初から存在する有限の組み合わせの中から一つを選ぶ」という行為であることは変わらない。

このようなことは、音符の並びで構成されている音楽や、テキストデータに落とせる小説、究極的には実行ファイルのバイト列でしかないプログラムなどに対しても、同じことが言える。この理屈からすると、絵、音楽、プログラムを含むありとあらゆりデジタルデータを作るという行為は、あらかじめ存在する有限の集合の中から希望のものに最も近い一つを選び出す、というあまり創造的ではない行為のように解釈することもできる。

可能性は無限ではなく、自分の作ろうとしているプログラムと同じ並びのバイト列はすでに観念上の世界のどこかには存在している。この世で考えうる全てのプログラムは特定の集合の中に納まっているため、結果としてプログラミングという行為はその中から自分の求める結果を出力してくれる特定のバイナリ列を探索している作業に近い。エディタやコンパイラなどはその探索を効率化してくれるツールに過ぎないのかもしれない。

コンピュータゲームはプログラムで記述することができるので、プログラムが有限集合である以上、コンピュータゲームはその集合の一部のさらに少ない部分に存在する。「ゲームを作る」という行為は、プログラムという集合のさらに小さい領域にあるゲームという有限の部分集合の中からまだしも面白く遊べそうなものを探索する、という行為に等しい。