「言語はどれが良いのでしょう?」この質問はゲームプログラミングの FAQ のひとつです。掲示板などで1週間のあいだに何度も聞かれます。この質問はよい質問に分類されますが残念ながら簡単にひとつの答えを与えられるものではありません。

ここではゲーム プログラミングで用いられる主なプログラミング言語を挙げ、その長所と短所を説明します。この記事があなたの迷いを助けてくれることを願います。

C言語

もしも FORTRAN と COBOL が初めのコンパイル型高級言語であるなら C は彼らの孫にあたります。1970年代にデニス リッチーによって ALGOL の後継者として開発されました。ゆえに FORTRAN, COBOL の後継者とも成りました。C は ALGOL よりも小さくて単純なバージョンであるように設計されていて、オペレーティングシステムのようなシステムレベルのプログラムを記述することに適していました。それ以前、オペレーティングシステムはアセンブリでコード化されていて持ち運べるようなものではありませんでした。 C はシステムレベルのコードの携帯性を現実のものにした最初のプログラミング言語でした。

C は構造化プログラミングをサポートする言語です。C のプログラムはモノリシックな大量のコードで GOTO 構文によってプログラムの流れを制御するのではなく、関連性のない関数達を呼び出すコレクションとして書かれます。

システムプログラミングを念頭に開発されたのでアセンブリ言語と C を連携させることも簡単にできます。関数を呼び出すインターフェイスも非常に単純です。また、アセンブリ言語を C のコードに埋め込むことができるのでアセンブリのモジュールを分割してからリンクする必要もありません。

長所
小さくて速いプログラムを書くのに最適。アセンブリ言語のわかりやすいインターフェースでもある。歴史があり標準化が進んでいるのでプラットフォーム間のバージョンの差異も少ない。
短所
オブジェクト指向技術のサポートが容易ではない。構文も難しいことがあり乱用できない - あっという間にコードが読みにくくなる。
移植性
ANSI 関数中心なら移植性は高いが機能が限定される。ANSI 以外の機能は開発プラットフォームに依存する。例えば、Windows と Mac をサポートしようとするならユーザインターフェース部分はシステム特有の機能を呼び出さないといけない。これは、2度もユーザインターフェースのコードを書くことを意味する。しかし、このプロセスを単純化するライブラリは存在する。
C で書かれたゲーム
非常に多い。
情報源
C に関する古典本は プログラミング言語C ANSI規格準拠 です。改定を重ね最初のサイズのおよそ3倍に拡大しているが良い導入書である。

C++

C++ は C に取って代わるオブジェクト指向をサポートする言語です。オブジェクト指向プログラミングは構造化プログラミングを超えるプログラミングです。オブジェクト指向プログラムはオブジェクトによって組み立てられます。オブジェクトとは分離不可分なデータと関数のパッケージです。GUIやデータベースライブラリなどオブジェクトの集まりとして実装されたライブラリを使えば(理屈の上では)ブロックを組み合わせるのと同じくらい簡単にプログラミングできるのがオブジェクト指向プログラミングのすばらしいところです。

実は C でもオブジェクト指向のプログラミングは可能です。もちろん書式は C++ と異なります。このような事実があって、ゲーム開発での C++ の利用はコミュニティーでも議論の的となります。簡単に言うと C よりオーバーヘッドが大きいということで、ゲームには不向きなんじゃないかと。しかし、C++ を気に入っている人達は C で仮想関数のようなことを実現するのなら C も同じようなオーバーヘッドがあるだろうと。

C++ のオーバーヘッドはより良い言語に対する対価だと思ってください。COBOL や FORTRAN のような高級言語がアセンブリ言語に取って代わろうとした時代に同じような議論が起こりました。議論の結果は現代の状況が物語っているでしょう。プログラムのメンテナンスのコストを考えれば"高速でも複雑な言語"より"ちょっと遅い高級言語"に価値があるということです。

長所
大きなプログラムでは C より最適な言語。オブジェクト指向パラダイムをサポートしている。一般的なデータ構造のライブラリは低レベル プログラミングの重圧を開放してくれる。
短所
大きくて複雑。C 同様に構文が乱れやすい。C より遅い時もある。この言語を完璧に実装したコンパイラがそれほど多くない。
移植性
C よりマシだが素晴らしいとは言えない。C と同じ不都合がある一方、移植性のあるユーザインターフェース ライブラリは C++ オブジェクトのコレクションとして実装されている。
C++ で書かれたゲーム
非常に多い。商業的なゲームの大半は C か C++ で書かれている。
情報源
書籍 プログラミング言語C++ 第3版 が素晴らしい。

C++ を習得しないといけないのか?また、C から始めるのが良いのか?

この問いに対する明確な答えはない。多くの大規模な商業ゲームは C++ を使用していません。しかし、それらのプログラムを書いた人が C に精通していたとしても、彼らはオブジェクト指向プログラミングの技術を使っていると主張します。

あなたが C から始めるとしても、オブジェクト指向プログラミングを学ぶ必要があります。オブジェクト指向はシミュレーションのためのパーフェクトな方法論です。オブジェクト指向を学ばなければ 困難な道 に出会うことは明らかです。

アセンブリ

アセンブリは最初のコンピューター言語でした。アセンブリ言語はプロセッサへの命令を表現した言語です。つまりプロセッサへ直接命令できるのです。言語の性質上、他の言語で出来ることは何でもできます。しかしそれは「車で行けるところに徒歩でも行ける」と言っているのと同じです(アセンブリは徒歩にあたります。遅いという意味ではなく、道のりが長いという意味です。)。

ゲーム開発でアセンブリ言語が単独で使用されることはありません。DOOM というゲームは C で書かれていますが1秒間に数千回も呼び出されるルーチンをアセンブリで書くことでパフォーマンスを向上させることに成功しています。

注意
言語の名前が アセンブリ です。アセンブリ言語をマシン語に変換するツールを アセンブラ と呼びます。一般的に言語の名称として「アセンブラ」と呼ばれることもありますがそれは間違いです。
長所
定義上は最速、最小の言語。優れたアセンブリ プログラマは他の言語で実現されるいかなるプログラムよりも速いプログラムを書くことができる。 この言語はプロセッサに直接命令できるので、プロセッサの最新の機能をいちはやく利用することができる。
短所
学ぶのが難しい。謎めいた構文なので効率的なコーディングは難しく、何かをさせるためには非常に多くのコードが必要。
移植性
皆無。特定のプロセッサのために設計された言語なので普通は移植不可能。あるプロセッサの 特定のブランドに特化した機能を使うなら同種のプロセッサへの移植もできない
アセンブリ で書かれたゲーム
アセンブリだけで書かれたゲームの存在は不明。しかし、処理のスピードが重視される部分はアセンブリで書かれるのが普通。
情報源
アセンブリ言語の文書を探すということは通常チップの文書を探すことになります。 IntelAMDMotorola に彼らのプロセッサについての情報があります。書籍は amazon.co.jp で「アセンブリ」「アセンブラ」といった語で探してみてください。

Pascal (Delphi)

長所
学ぶのが簡単。プラットフォーム固有に実装された Delphi は大変良い。
短所
Pascal(Modula, Oberon) の後継言語は成功していない。言語規格はコンパイラ メーカーによって厳守されない。
移植性
無いに等しい。プラットホームによって言語の特徴が変化する。プラットホーム特有の機能を扱うために、移植のためのツールキットは全くない。
Pascal で書かれたゲーム
少し。Delphi 用の DirectX で可能性が拡がった。
情報源
Delphi のサイトを見よ。

Visual Basic

長所
できの良い IDE。学ぶのが簡単。プロトタイピングに適している。
短所
アプリケーションは大きくて、実行時には多くのランタイム DLL を必要とする。フォームやダイアログベースのアプリケーションは作りやすいが、優れたグラフィカル アプリケーションを書くのは難しい。VB のデータ構造が C のデータ構造に適合しないので Windows API を使う魅力がない。オブジェクト指向技術を完全にはサポートしていない。
移植性
Visual Basic は Microsoft が所有するもので、移植は Microsoft が提供するプラットフォームに限定される。つまり選択肢は Windows のみ。しかし VB アプリを Java に変換する少数のツールが存在する。
Visual Basic で書かれたゲーム
少し。シェアウェアのゲームくらい。
情報源
Microsoft の Visual Basic デベロッパー センター

Java

長所
バイナリを他のプラットフォームで実行できる。アプリケーションをウェブページへ埋め込むことも可能。クラスライブラリも標準化が成されていてとても強力。オートマティック アロケーション、ガベージ コレクションはアプリケーションの資源管理をうまくこなす。ウェブでは膨大な数のコードを発見できる。
短所
バーチャルマシンが使用されるので遅い。低レベル(ハードウェアに近い)ところを操作するのは困難。下位互換が問題になるなど、新しい機能の追加は時間がかかる。
移植性
移植性は最高。
Java で書かれたゲーム
たくさんの小さなアプレットがウェブページに存在する。商業ゲームは少しだけ。いくつかの商業ゲームは内部のスクリプト言語として Java を利用している。
情報源
Sun の Java Technology

オーサリング ツール

オーサリング ツールとは HyperCardDirector のことです。 大ヒットした Myst は HyperCard で製作されました。

長所
速いプロトタイピング -- ゲームがツールのモチーフと一致するなら、他のどのような言語よりも素早く作製できる。ゲームの基本的な部分はコードを書かなくても実現できる。
短所
プロプライアタリーな製品なので、製作しようとするゲームにマッチしたツールであるかを評価しなければならない。
移植性
ツールによって異なる。
オーサリング ツール で書かれたゲーム
Myst をはじめとするアドベンチャーゲーム。Shockwave ゲームの全て。
情報源
Director, HyperCard, SuperCard, IconAuthor, Authorware

結論

プログラミング言語を使う という視点からは、全てのアプリケーションに最適な言語はないと言える。言語は「どんなゲームを作りたいか?」という視点から選択するべきなのだ。そのため、ここに挙げた言語を学んだり試してみるのが得策であるという結論になる。

「どの言語から始めれば良いのか?」という疑問がわいてくるのは当然だが、これは現役の開発者にでも聞いてみるのが手っ取り早いだろう(作りたいゲームが決まっているのなら尚さらだ。その道のプロがどのプログラミング言語を使っているか聞き出せば良いのだから)。個人的には 3Dゲームまで手掛けるのであれば C/C++、アセンブリ が必須だと思っている。

言語を習得したからといって作るモノ(アイディア)が無いなら話は別だということを忘れないように。道具を手に入れてその 道具を適用する場面が無いのは虚しい 。くれぐれもプログラミング言語はゲーム開発における手段のひとつであることを肝に銘じておこう。


最終更新日: 2013年09月14日(土) / カテゴリー: プログラミング・ソフトウェア開発


Back to top