知能機械工学科 4年 宵 勇樹
このハナシは講義ではなく、あくまで随想です(※1)。でも実験レポート並に纏めようかと思います(※2)。ちなみに昨年の泰統総蒔氏の会誌と読み比べていただけると面白いかも知れません。ほら、だって機械科の人間だし。それではハナシをしていきたいと思います。
ゲームを作れるようになるためには、何も情報工学科に行かなくてはならないわけではありません。いきなりサークルの人間の大半を敵に回しそうな発言ですが(※3)。まあでもほとんどの部員(※4)は納得してくれると思います。
それは、講義で習ったり実験で行うことが、直接ゲームつくりに役立つわけではないからです。言語の扱うのには役立つのですが。例えば講義でCPUの最適な処理をする方法やOSの効率よい制御方法を習いますが、その部分は既にあるものを使えばいいわけで、むしろその上の層にある、ゲームの面白さを追求したほうがいいゲームは作れると思うのです。ただ単にプログラムに精通していても生み出せないのです。さらに、プログラムにある程度詳しくなると、自らゲームつくりにおける可能性を封じてしまうのではないかとも考えています。
ゲームをつくるには、プログラミング言語で記述したり、支援ツール(ASCII社の○○ツクール系や、簡単な記述で製作できるツール等)で作ります。結構このサークル内(特に上級生)では後者をよくない様に思っている傾向がありますが、私はそうは思いません。
結局プログラミング言語と支援ツールのどちらも、ゲームを作る上では一つの道具という意味で同じであり、双方に長所と短所を持ち合わせているだけに過ぎないのです。ちなみにプログラミング言語は主に高速か、もしくは細かいところまで手が届いたりする長所があり、支援ツール系は比較的短いステップで作成することができたりします。ちなみに細かいとこまで手が届く、比較的短いステップで作成することができるとかって、どこかで聞いたことありませんか?WindowsとLinux(BSD/UNIX)の話とか。
先ほどの結論からもいえますが、ここでは「ここがいい」って言うのを話すだけで、順位付けや点数付けは致しません。興味を持ったらとにかく触ってみるのが一番よいかと思います。
Unixの中核を記述している言語です。最近ではJAVAやC#におされ気味ですが、かなり多くのシェアを持っています。速度は比較的高速ですが、バグが出易かったりします(とくにポインタを使い出すとすごい)。
Windowsでプログラムを書くときは、少々特殊な書き方をしなければなりません。
C言語に、主にオブジェクト指向の要素を取り込んだものでCの上位互換です。速度も多少落ちるくらいで、あまり変わらないかと。
Cよりもコードの再利用がしやすいように考慮されて作られています。しかし、Cになれた人間にとっては多少気持ちわるいコードもあったりします。個人的には()が二つくっつくタイプはあまり好きになれません。
主な製品(C,C++):Visual C++(Microsoft),C++ Builder(Borland),C++ Compiler(Borland),GNU C++ Compiler(GNU)
サンマイクロシステムズがCを拡張して作ったオブジェクト指向型プログラミング言語です。C++と違い、結構Cに対してオリジナルの要素が含まれています(ファイル名が制限されたり)。またJAVAの趣向が、「一度書いたコードはどこでも実行できる」というもの(※5)であり、同じソースコードでWindowsでもUnixでも動かすことができます(CのウィンドウプログラミングはUnixとWindowsで異なる)。
ただ、結構動作が重く、WindowsではDirectX(これは後述)が使用できないため、速さを要求されないゲームを作るのに向いていると思います。
主な製品:J Builder(Borland)
パチモンつくってSUNに訴えられてふてくされた某Microsoft社が、腹いせに作った言語です。・・って書くと近所のMicrosoft調布センターから秘密工作員がやってきそうな感じですな。訂正します。Microsoft社がC++を発展させて作った言語です。JAVAに結構似ています。ただ、DirectXが使えたり、結構早かったりするらしく、さらにCやC++言語に比べWindowプログラムがしやすいので、意外と顧客側の受けは良くシェアは多いです。
主な製品:Visual C#.net(Microsoft)
他のが最近でも良く使われてるのに対し、これはあんまり使われてないです。背景が真っ黒な世代です。”How many files(0-15)?”とか、”FILES”とか覚えている世代って、もう若者じゃないんだよなぁ。
Cに比べ深刻なエラーはずっとおきにくいです。あと英語そのままに近いので普通の人間がとっつきやすいです。
後述するVisualBasicは別物と見たほうがいいです。
主な製品:N88-Basic(NEC),F-Basic(富士通)
文法はBasicで、構造はC++なものです。深刻なエラーはCよりおきにくく、またWindowプログラムを作るのが楽ですが、速度は落ちます。
主な製品:Visual Basic(Microsoft)
教育用に作られた言語ですが、これを拡張させてObjectPascalとした、DelphiというものがBorland社から市販されています。
ソースは、Cに似ていますがCよりも読みやすく、Basicに比べ大分早いそうです。ちなみにUnixなどでは、PascalのソースをCに変換したりしています。
主な製品:Delphi(Borland),Kylix(Borland)
プログラミング言語でなく、ゲームを作るソフト。プログラミングに関する専門知識は必要なく、RPGのデータを記述するのみでOK。ある程度の形式に沿ったRPG作るなら、プログラミング言語で書くよりも数分の1以下で作れるでしょう。
ただ同じバージョンだと、戦闘画面が背景以外固定だったりして、「ああこれはRPGツクールでできてるな」ってすぐに判別されてしまいます。灰色のウィンドウに黒の文字とか、緑のグラデーションのウィンドウとか。で、手軽に作れるぶん、作りこみが甘く見られたり、実際に作りこみが甘かったりします(そこらへん、プログラミング言語にくらべ作業時間が少ないということもあるかもしれませんが・・)。ツクールでも仕様書くらいは書けと。
で、悲しいことに、やってて面白いなと感じたゲームは、RPGツクール2000なのに擬似リアルタイムバトルだったりと、元からあるシステムを破棄して・・って、普通にプログラムしても変わらないんじゃないか?って、そういう疑問もあったりなかったり。
これはプログラミング言語の一つに入るのかな?まあプログラムを書くのですが。割合簡単な記述でゲームなりWindowsアプリケーションなり作れます。うちのサークル内にも何人か使い手がいるようです。
えっと、これでグラフィカルなゲームって作れるのかなぁ? プログラミング言語です。あんまりゲーム作るのには関わりなさげですが、書いておきました。だって情報工学科の必修だし。
どうでもいいがAmusementMakersのLispRPGってLisp言語で記述されているのであろうか。
ちなみにこの言語は関数型といわれる言語で、CとかBasicとかPascalなど手続き型言語とは多少毛色が違います。関数型言語は手続き型言語に比べ、わかる人にはわかりやすくて、わからない人にはよりわかりづらい感が強まっています。
これは言語じゃなくてライブラリと呼ばれる類のもので、Windowsでハードウェアを直接制御するために用いられます。バージョン7までは2D処理が中心でしたが、8以降は2D描画が3D描画の一部となりました。
これを使って作らないとWindowsで高速な描画ができませんが、3D支援機能がつんでいないノートでは、X8以降でまともに動作する速度を得ることができないわけで。
あとはっきり言って記述する箇所多いです。最初からC++言語とDirectXを用いてプログラミングするのは、無謀行為といえます(※6)。記述を省くライブラリを用いたり、ツールを使ったほうがいいです。
ちなみに私はC++言語+DirectX8.1で現在開発を行っています(いずれX9.0に移る予定)。
上記の理由により、DirectXを隠蔽して記述を省いたライブラリが使った方がいいわけで。そのためのライブラリその1となります。筆者は大学入りたての頃このライブラリを使っていましたが、シェアウェアだったので他のライブラリに変えました。結構昔からあるライブラリなんですが、最近更新はされないのかな?
これもDirectXを隠蔽したライブラリです。こちらはフリーソフトです。大学入ってからサークルの先輩から知ったやつです。ほとんど#define文だったりしてデバッグがちょっとつらかったですが、作者のページにサンプルが大量にあったりして参考になったりします。
これもDirectXを隠蔽したライブラリです。実はこれは私がメインで使っていた言語ではないのですが、サンプルのあまりの短さに驚きを隠せなかったりして、これな最も人に教えやすいかなということで、同じサークルのTIMA氏がこのライブラリでゲームを作って調布祭で公開しました。
難点は3D面が弱いのと、開発が終了してしまったことでしょうか。
で、人に教えやすくて、かつ3Dも使えるようなDirectX8(だけでなく、OpenGLなど他のプラットフォームでの描画ライブラリも取り込めると望ましいが・・)ベースのライブラリを、サークル内で使えるようにしようと企んでいたりします。すでに2Dのみで最低限の機能を実装した版がサークル内でも公開されていたりします。「されています」ってのは、私がコード書いているわけではないからでありまして、企画者って感じですね。この会誌の咎人氏のSGLibの原稿も私が校正加えたりしています。SGLibにつきましてはそちらのページに概要がありますんでご参照ください。ちなみにSGLibっていうのはSuperGreatLibrarySimple Game Libraryの略です、たぶん。
ほかにもDxLibとかYaneuraoGameScripterといったライブラリがありますが、筆者が使ったこと無いので紹介程度にとどめておきます。
さて、ここまでいくつかツールを紹介したわけなのですが、ここでツールを選ぶ基準をメモ程度(いやだってほとんどの人が知ってそうな内容ですし)に書いておきます。
いろいろ触ってみて、その中で自分にあってるものを選ぶとよいでしょう。
なおゲームに限らずプログラムをするうえでは、一番大事なのは速度でも安定性でもなく(いやこれらも重視すべき内容ですが)、やる気の維持と作業内容の計画立てだったりします。(※7)
さて、ここまで、延々と書いてきたわけですが、実はこれ、
今年ゲームが展示できなかった
言い訳であったりします。
もうゲームの基盤は出来上がっているんですよ。スクリプターとか3D表示エンジンとか、敵が出てキャラが動いたり。でもそれは敵が出てキャラが動かせる、背景のあるプログラムであって、ゲームじゃないんです〜。というわけで今からゲームの内容を考えようかと思うのですが・・
え、卒研大分遅れているから急がないと間に合わないって?がーん。
もし調布祭に私の作った作品が展示されて遊べるようになっていたら、「ああ最後の命のろうそくを引き換えにして作ったんだなぁ(※8)」とでも思って黙祷をささげてください。
ゲームは強制提出になりました。南無南無チーン(-人-)。ゲームに関しては「オダタダンシング」のページを参照ください。
日本ブレイク工業 http://www.nbk.gr.jp