CodeZine(コードジン)

特集ページ一覧

さまざまな言語に対応するゲームプラットフォーム「Simple DirectMedia Layer」

スペースインベーダー似のゲームで巡るSDLの世界

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/06/05 00:00

Simple DirectMedia Layer(SDL)は、クロスプラットフォームサポートとゲームの面白さの両方を追及するために役立つソリューションです。 「ゲームエンジンのことを知るには、サンプルコードを見るのが一番」ということで、今回は「スペースインベーダー」を模してつくられた「aliens(エイリアン)」というゲームを、最も重要な部分だけに焦点を当て、レーザービーム級の密度で解説します。

目次

数々の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実行可能ファイルをビルドできます)。

図1 GL-117のプレイ画面
図1 GL-117のプレイ画面

簡単なサンプル:エイリアン来襲!

 ゲームエンジンのことを知るには、サンプルコードを見るのが一番です。今回は、Sam Lantingaが1980年代の「スペースインベーダー」を模して作成したゲームを取り上げたいと思います。その名もシンプルに「aliens(エイリアン)」です。

 なんと、このゲームのソースコードは全体で560行しかありません。すべてのコードを紹介したいのはやまやまですが、少々長くなりすぎるので、最も重要な部分だけに(それこそレーザービーム級の密度で!)焦点を当て、それ以外の部分は割愛します。本稿のコードリストではaliens.cでの行番号を併記しますので、Visual Studioで実際にコードを見るときの目安にしてください。

図2 aliensのゲーム画面
図2 aliensのゲーム画面

 最初に説明しておくと、このゲームでは、全体の動作を実現するためにSDL_mixerSDL_imageという別々の2つのSDLプロジェクトのコードを利用しています。

 SDL_mixerは、SDLアプリケーション用の、プラットフォーム非依存のサウンドミキシングライブラリプラグインです。このプラグインを利用すると、ミキシングアルゴリズムを書かなくても、音楽と一緒に複数のサンプルを再生できます。たとえば、砲撃音をBGMにシームレスにミックスすることができます。また、さまざまなファイル形式のサンプルや音楽の読み込み、および再生を容易に行うことができます。

 SDL_imageは、SDLアプリケーション用のプラットフォーム非依存のグラフィック読み込みプラグインです。これにより、BMP、PNM(PPM/PGM/PBM)、XPM、LBM、PCX、GIF、JPEG、PNG、TGA、およびTIFFファイル形式をアプリケーションに読み込むことができます。

 以降で紹介するコードを実際に試してみたい場合は、この2つのパッケージをダウンロードしておいてください。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • Victor Volkman(Victor Volkman)

    1980年代末から『C/C++ Users Journal』などのプログラミング雑誌に記事を執筆。ミシガン工科大学を卒業し、WashtenawコミュニティカレッジCIS学部の諮問委員会のメンバーを務める。『C/C++ Treasure Chest』など数々の書籍の編集者であり、Loving Heal...

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5