初心者プログラマによるゲーム解剖

前回の話は、プログラムを触ったことのない人には意味不明だっただろう。
そこで今回は、ゲーム(ここではもちろんビデオゲーム)がいったいどういう仕組みで動いているのか、素人に毛が生えかけた程度の知識でしゃべってみる。

ただし、これからする話はビデオゲームを概念定義、ソフトウェアの面から少し(サイバイマンの種を植える深さくらい)掘り下げた観点であって、ハードウェアの側については自分は無知の知なのでなるべく触れないことにする。

さて、まずはじめに、ビデオゲーム(以下ゲーム)とはなんだろうか。
ゲームとは「プレイヤー(人)の入力とプログラムの出力のキャッチボール」だとエイバースの中の人は述べている。
プレイヤーはゲームに対して何らかの入力を行い、ゲームはそれを処理して、結果を出力する。もはや一番わかりやすい例だと、コントローラのBボタンを押すと、マ○オがジャンプする(のが画面に映り、ジャンプ音が鳴る)、という感じだろう。
このように、プレイヤーが機械的装置(コントローラ、タッチパネル、マウス、キーボード、マイクなど。これらをユーザーインターフェースってゆうのかな?)を通してゲーム機に命令(電気信号)を送り、ゲーム機はそれを受け取って、組まれたプログラムにしたがってなんらかの演算処理を行い、得られた結果を反映した出力をユーザーインターフェース(今度はディスプレイ、スピーカー、最近はコントローラのバイブレータなんかも)に返す。
この一連の動作を繰り返すのが、ゲームという概念といえる。

ここまでは、ゲームについてちょっと考えたことのある人なら、わかっているかもしれないし、今ちょっと考えてもすぐわかるだろう。
では、この一般論から、ソフトウェアのレベルに少し分け入ってみよう。

まず、ゲーム機の電源を入れる…コンシューマ(家庭用)はよくわかんないからPC用ゲームで考えよう。まず、ゲームの実行ファイルを実行する。すると最初に、マシンの環境の設定やら初期化やらが行われ、続いてメインのゲームプログラムが流れる。ここでウィンドウが出たりフルスクリーンになったりして、プレイヤーは最初の入力(ゲームの実行)に対して最初の出力を受け取るわけだ。さて、ゲームが動作しているとき、実際のプログラムの中ではさまざまな処理がされている。

ゲームが起動するとき、プログラムはゲーム自身のための領域をメモリに確保し、まず「ゲーム」そのものを生成する。それから次に来る場面で使うものをいろいろ用意する。たとえば、最初はオープニング用の絵や音楽、ゲームが開始したら、主人公や敵の絵、音、そしてパラメータ(体力、スコア)などだ。(用意するといっても、もちろん絵や音楽データ自体は作ってあるので、それを読み込み、メモリ上に使えるように置いておくということだ)
そして、ここからはオープニングやゲーム中などみんな共通であるが、メモリ上に用意された絵を画面に配置し、表示する(これが描画)。さらに、時間を計りながら描画するものや位置を変えていくことで、画面が動いて見えるわけだ。またプログラムはプレイヤーがキー入力などをした時にそれを捕らえて、それに応じた処理を行って、画面を描き換えたり(再描画)、音を出したりする。そして次々に画面を描き換え、音を出しながら、プレイヤーのキー入力を待つ。この繰り返しでゲームは進行する。ついでに裏では、場面が移り変わっていくごとに、新しい絵や音のデータをどんどんメモリに読み込んで、使わなくなったデータをメモリから消していく、という動作が並行して行われている。

ああなんと拙い説明であろう。というかそもそもこれは誰に説明してるんだ。まったくゲームの仕組みをよく知らない人にこれで伝わるとは思えないし、正しい知識のある人には逆に(゜д゜)ハァ?って言われそうだ。

まあこれはあくまでまだ自分の現状認識をしている段階だと思おう…。

んで、この一連の動作をプログラム言語で記述することが、ゲームプログラミングだとういうわけだ。(なにを当たり前のことを…つか文章力落ちたなァ)

だめだ…。変な文章書いたから先が続かなくなってしまった…。
ということでまた次回('A`)