ゲームライブラリを作ろう。

  
Text By TIMA(しまむら@書記さん)
mailto:tima@the-second.club.ne.jp
http://timasoft.ddo.jp

注:この文章はある程度「ネタ」として割り引いて読むことをお勧めします。

1:まず、ゲームライブラリとはどんなもんよ?

 ゲームライブラリとは「ゲームを作成するにあたって、便利なルーチン※注1-1をまとめて置く」ものです。 ゲームを単品で作るならともかく、何作も作ろうと野望を抱いている連中※注1-2にとっては、 毎回同じようなルーチンを書くのはかなり面倒なのです。絶対バグが混入※注1-3するし。 統一しておけば、ゲームのメインルーチンの作成※注1-4に集中できるし、思いついたときに機能の追加が容易です。 また、モジュール化しているので、ライブラリにバグが無いと仮定※注1-5すれば、メインルーチンのバグの発見が簡単です。 (まあ、そこではまる事も多いんですけどね。)

※注1-1:ルーチン→C言語で言う「関数」。プログラム内で呼び出すサブプログラム。
※注1-2:野望を抱いている連中→当然我々のことですが何か?
※注1-3:バグが混入→しなかったら神だよそいつは。
※注1-4:メインルーチンの作成→これがゲームを作るメインの作業ですけど。
※注1-5:バグが無いと仮定→できるって幸せですね(爆)。

2:もしかしてそれって既に既成の物ってあるんじゃねーの?

 なに間違った日本語※注2-1かましているんですか(ワラ)※注2-2。 とりあえず、答えとしては、あります。 「EasyLinkLibrary」※注2-3とか「SimpleX」※注2-4とかそりゃもういろいろ。 正直言って既製品は山のようにあります。 広義の意味では「ツクールシリーズ」※注2-5もライブラリの一種ですね。広義の意味では。 もしこれを読んでいる貴方がプログラミング初心者ならば正直いって、この文章は役に立ちません。 これらの既製品を使ってゲーム作る方が絶対形になるのは速い※注2-6し、 デバッグもちゃんとなされているので、ライブラリにバグは多分ありません。 既製品でもセンスさえあれば面白いゲームは作れるものです。 逆に、センスが無ければクソゲーしか作れません。これ真実。

 むしろ、ライブラリの何たるかが分かってないのに作ろうとしないで下さい。 ゲームを一度も作ったことの無い人はライブラリ使ってゲームを作ってから以下の文章を読みましょう。 あなたがもし茨の道を進みたいマ○ヒストさんなら止めませんが。※注2-7 ・・・まあ、茨の道を進む覚悟が無きゃプログラマさんなんてやってられませんが。

※注2-1:間違った日本語→馬から落馬、筋肉痛が痛いなど。俗称リアルリアリティ。
※注2-2:(ワラ)→(笑)の嘲笑バージョン。同類に"(藁)","(w" など。
※注2-3:EasyLinkLibrary→通称EL。使用者の多い有名なライブラリ。有名な某同人ゲームもこいつを使っている。
※注2-4:SimpleX→私が使っているライブラリ。初心者にお勧め。
※注2-5:ツクールシリーズ→プログラマの裾野を広げたはいいが、「ツクール厨(ツクール狂)」という電波な奴らを生んだ。
※注2-6:形になるのは速い→出来る人が本気になれば2日でまともなゲームになります。.Shotとか。
※注2-7:茨の道を進みたい…→Macプログラマはそういう人種です。と、かの真紀敏男さんも仰ってます。

3:じゃあ、なんで作るのさ。既製品使ってりゃいいんじゃねーの?

 そりゃ、自分が「ゲームだけ作れりゃOK」なんて考えてるならそれでもいいんですけど、 そんな人は「ツクール」でもやってて下さい。止めませんから。 まあ、そんなこと言って甘えてるようでは、どっかのPCサークル※注3-1と同類だと思いますけど。 プログラマたるもの内部構造に興味を持ちませんか?そうでもない?ふーん。 とりあえず、プログラマとして生きているからにはライブラリに頼っていては成長はありません。※注3-2 ライブラリべったりなヤツが「DirectX使ってプログラミングするぞー」なんて言っているのは絶対虚言です。 どーせ、その「既製品ライブラリ」がDirectX使っているだけでしょ? 正直「GetDC()でデバイスコンテキスト取得してそのメモリ空間にBlt()で転送」※注3-3とか使える奴らの方がよっぽどマシです。 「LPDirectDrawSurface」とかバリバリに使っている人達はかなり尊敬。(私は無理です。) ライブラリを作るには、そのOSでの基本的なプログラミングができなければいけない※注3-4ので、かなり勉強になります。

結論として、自らのレベルアップを図るプログラマならライブラリは作って当然です。 無茶か?

※注3-1:どっかの…→ツクール厨の溜まっている某コンピューター(伸ばしているのがミソ)サークル。
※注3-2:ライブラリに頼っていては…→逆にライブラリをまったく使えない人も困りものです。
※注3-3:GetDC()…Blt()→ウィンドウに絵を描画するときの基本的な手法ですね。
※注3-4:OSでの基本的な…→ライブラリ作りながらそれを勉強する人もいるんですが。私とか。

4:で、ゲームライブラリを作るにはどうすればいいのさ?

 まずゲームライブラリを設計しなければいけません。※注4-1 どこまで低レベル※注4-2な機能を 用意するかは知ったこっちゃありませんが(プログラマさんにお任せですが)、代表的に用意されている機能として、

  • システム関連:時間を測る、乱数を用意する、etc.
  • 描画:線を描く、四角や円を描く、画像を読み込み画面に転送する、スプライト機能を持たせる、etc.
  • サウンド:WAVEファイルを鳴らす、MIDIを鳴らす、MODを鳴らす、CD-DAを鳴らす、etc.
  • etc.:etc.

  • 機能を挙げていったらキリがありません。 まあ、そこんとこは自分がどこまで必要とするかで決めて下さい。

     で、実際コードを書いてください。 main()からシステム系、描画系、サウンド系とやって行くのがいいと思います。 当然、それぞれの系統が仕上がったら、テストをしてみるのは基本です。 ここでバグっていたら、出来上がったライブラリ、引いては作成したゲームにまでバグが入ってしまいます。

     正直、抽象的にしか※注4-3語りませんでしたが、具体的に語れません(細かいところは作る人次第である)ので勘弁してください。

    ※注4-1:設計→ちゃんとできればそんなに苦労しない。
    ※注4-2:低レベル→ここでは簡単という意味ではなく、よりOS寄り、ハードウェア寄りという意味での低レベルです。
    ※注4-3:抽象的→具体的に語れる人はかなり高レベルのプログラマに違いありません。たとえ怪しい文体で語っていても。誰とは言いませんが。

    5:そんだけエラソーなこといってんだから、てめぇはライブラリ作ってるんですか?

     ゴメンナサイ作ってません(爆)。 でも、とりあえず、Windows用ゲームライブラリ「SimpleX」をMac用※注5-1に移植しましたよ。根性で。 殆ど一から書き直してるので、まあ、自分で作ったといえなくも無いですよ。うん。 まあ、「pugoGL」※注5-2のソース参考にさせてもらったりとかしたけど。

     また、自分でWindows,Mac,Linux兼用の可能なライブラリ※注5-3を作ろうという野望もあったり。 機能的にはMOD再生なんかサポートしてみたりして。まあ、まだ野望の段階なので、細かいことは突っ込まないで下さい。

    ※注5-1:SimpleXのMac用→拙作「SimpleMac」のこと。WindowsAPIに頼らずにSimpleXで書かれた2Dのゲームがそのままコンパイルできる。いろんな意味で便利。
    ※注5-2:pugoGL→やねうらお氏による「yaneSDK」のpugo氏によるMac移植版。オープンソースっていいよね。
    ※注5-3:兼用の可能な…→ソースレベルでって事ですよ。バイナリレベルでの互換性なんか取るだけ無駄だと思う。どこぞのJava用ライブラリのように。

    6:最後に何かあるなら聞いてあげるけどどうよ?

     こんな戯言最後まで読んではいけないね。※注6-1

    ※注6-1:最後まで…→「こんなゲームにマジになってはいけないね。」のパロディ。

    更新履歴。
    第一稿:2002年7月21日。「テスト前の現実逃避。」
    第二稿:同年同月22日。「修正。」
    第三稿:同年同月24日。「注を構造化。文化人類学どうだろう?」
    第四稿:同年10月21日。「提出日一週間前。」