数々の3Dゲームで利用されるゲームエンジン
ゲーム開発の世界では、他のプログラミング分野に比べて、ごく初期の段階からプラットフォームを正しく特定しておくことが特に重要です。Windows、Linux、およびOS Xをすべてサポートしたいとお考えですか?
実際、ゲームプラットフォームの草分けとして、1996年にOpenGL向けに開発された革命的なゲーム「Quake」を引き合いに出す人も多いでしょう。しかし、Quake並みのゲームプレイ水準に達するためには、第一級のオーディオサポート、ネットワーク接続、ユーザー入力デバイスサポート、リアルタイム管理機能なども必要になります。
この2つの課題、つまりクロスプラットフォームサポートとゲームの面白さの両方を追及するために役立つソリューションがSimple DirectMedia Layer(SDL)です。これは、オーディオ、キーボード、マウス、ジョイスティック、OpenGL、および2Dビデオフレームバッファに対する低レベルのアクセスを可能にする、クロスプラットフォームのマルチメディアライブラリです。
SDLは、Linux、Windows、各種のMacOS、WinCE、Dreamcastなど、およそ考え得るほぼすべてのプラットフォームをサポートしています。SDLはGNU LGPL v2で配布されているため、提供されるDLLにリンクしさえすれば、商用プログラムでも自由に利用できます。SDLはMPEGプレイヤーやハードウェアエミュレータのほか、数多くの人気ゲームでも利用されています(有名なLinux用の「Civilization: Call To Power」もその1つです)。
SDLはCで書かれていますが、C++でもネイティブに動作し、他の言語にも対応しています(Ada、Eiffel、Java、Lua、ML、Perl、PHP、Pike、Python、Rubyなど)。
SDLの活躍範囲は幅広く、私の大好きなオープンソースのフライトシミュレータ「GL-117」でも、SDLがエンジンとして使われています。現在、SDLのホームページには、SDLエンジンを利用しているゲームが568本も登録されています(うち450本はWin32実行可能ファイルをビルドできます)。
簡単なサンプル:エイリアン来襲!
ゲームエンジンのことを知るには、サンプルコードを見るのが一番です。今回は、Sam Lantingaが1980年代の「スペースインベーダー」を模して作成したゲームを取り上げたいと思います。その名もシンプルに「aliens(エイリアン)」です。
なんと、このゲームのソースコードは全体で560行しかありません。すべてのコードを紹介したいのはやまやまですが、少々長くなりすぎるので、最も重要な部分だけに(それこそレーザービーム級の密度で!)焦点を当て、それ以外の部分は割愛します。本稿のコードリストではaliens.cでの行番号を併記しますので、Visual Studioで実際にコードを見るときの目安にしてください。
最初に説明しておくと、このゲームでは、全体の動作を実現するためにSDL_mixerとSDL_imageという別々の2つのSDLプロジェクトのコードを利用しています。
SDL_mixerは、SDLアプリケーション用の、プラットフォーム非依存のサウンドミキシングライブラリプラグインです。このプラグインを利用すると、ミキシングアルゴリズムを書かなくても、音楽と一緒に複数のサンプルを再生できます。たとえば、砲撃音をBGMにシームレスにミックスすることができます。また、さまざまなファイル形式のサンプルや音楽の読み込み、および再生を容易に行うことができます。
SDL_imageは、SDLアプリケーション用のプラットフォーム非依存のグラフィック読み込みプラグインです。これにより、BMP、PNM(PPM/PGM/PBM)、XPM、LBM、PCX、GIF、JPEG、PNG、TGA、およびTIFFファイル形式をアプリケーションに読み込むことができます。
以降で紹介するコードを実際に試してみたい場合は、この2つのパッケージをダウンロードしておいてください。