このページでは、一応プログラムの勉強も兼ねてゲームを作りたい方向けに解説をしています。
「とにかくゲームが作れればいい!」という方は、吉里吉里, NScripterなどの利用を考えたほうがいいです。
また、「AIRNovel」というものも参考にどうぞ。
このノベルゲーム制作のページでは、基本的に、管理人本人にとって必要そうな機能のみ取り扱います。いわゆる手抜きです(笑)
なので、ノベルゲームにはあまり必要無さそうだと思った部分の情報は書いてない可能性もあるので、適宜自分自身で調べてください。出来るだけ参考になりそうなページやキーワードは書いておくようにします。
さて、ノベルゲームのプログラムとは、どんな部品で構成されているでしょうか?
少し考えてみたところ、最低限4つほどあると思います。
この他に、スクリプトの解析器をつけることもよくあるでしょう。
商用の独自ゲームエンジン, 吉里吉里, NScripterなどでも、シナリオや演出命令の記述を楽にする目的でスクリプト解析器を使っています。
ちなみに、今挙げたようなプログラムを部品ごとに分けて考える方法と関連して、「オブジェクト指向」というものがあります。
プログラム開発の際、この考え方を知っておくと役に立つこともあると思います。
ここでも少しだけ説明すると、オブジェクト指向プログラミングでは「オブジェクト」という、ある特定の処理を行なうために必要な変数(プロパティ), 関数(メソッド)をひとまとめにしたものをプログラムの構成単位として扱っています。
オブジェクトの内部には変数を含むことが出来るため、オブジェクトは時間, クリック回数などと言った状態を保存することができます。
そのため、規模の大きめなソフトウェアの開発が行ないやすくなる、具体的にはプログラムの再利用がオブジェクト単位で行ないやすくなる, グローバル変数をなくせることなどによるコーディング時の安全性の向上という利点があると“自分”は理解しています。
まあ、ちゃんと設計しなければオブジェクト指向プログラミングを使う意味はないですが。
ちなみに、どんなプログラムを作るときでもオブジェクト指向にすればよい、と考えるのは誤りです。
そこらへんはプログラムについてのコラムにそのうち書こうと思いますが、1つ、個人的に大事だと思うことを。
プログラム = 数学の問題(とくに文章問題)の解法
プログラムを使ってやりたい事 = 数学の問題の答え
オブジェクト指向とは問題の解き方の1つであり、問題によっては別の解き方(考え方)を使ったほうがいい場合も当然ある、という事は頭の片隅に入れておいた方がいいと思います。
話が横道に逸れたので元に戻りましょう。
ともかく、このページを見ている方はノベルゲームを作りたいと思っている人だと思います。…そうですよね?
そして、大半の人は、今までコマンドライン上で動くプログラムしか作ったことがないと思います。
ですので、まずは CUI アプリケーションと GUI アプリケーションの違いを、プログラマからの視点で説明します。
CUI アプリケーションは、基本的に処理だけを考えればよいです。書くプログラムにもよりますが、楽といえば楽です。
それに対し、GUI アプリケーションは「どういう条件でこの処理が実行されるか?」「アプリケーションの見た目はどうするのか?」を自分で書く必要があります。
GUI で動かせるようにするためにやらなければいけないことが増えるので、大変といえば大変です。
上に挙げた図のように、処理 + 見た目のデザイン + ある条件が満たされた時に行なわれる処理の定義(イベント)の3セットが、GUI アプリケーションの場合は必要, CUI アプリケーションなら処理の部分だけで OK と思ってください。
もっと詳しく知りたい方は「イベント駆動型プログラミング」, 「MVC」などのキーワードで調べてみてください。
上の方でしつこく、「プログラムはいくつかの部品が集まってできたものだ」「GUI アプリケーションはうんぬん」と言い続けていましたが、ノベルゲームの話題なんて最初にちょろっと出ただけですね……。
でも重要なので書かせてもらいました。
見やすいようにと、デザインを考えたり図を使ったりと少しは工夫はしているつもりなので、どうか見逃してやってください(笑)
というわけでようやく、ノベルゲームプログラム本体の話を始めます。
というより、プログラムを組むのに使用するライブラリについてです。今回は次のライブラリを使用します。
大雑把にはこんなところでしょうか。
細かいところは各講義の最初で説明するので省きますが、Mac (OS X), Windows, Linux で動かせるプログラムであること, そしてライブラリの使用条件も含めて考えてみた結果、“自分”はこの選択になりました。
もし使用するツールが気に入らないという方がいられましたら、すみませんが別のページをお探しください……。そこは仕様です。(今は開発途中だけど、吉里吉里もそのうちクロスプラットフォーム対応するしね……)
(参考) SDL, Allegro, Irricht……Windows のみでいいなら DirectX, DX ライブラリとか。
使用するライブラリの説明も終わったので、後はライブラリをインストールすれば、もうプログラミングに移れます。
ちなみに、プログラムの構造の設計(GUI 部分)と処理の部分、どちらを先に作るかは自由です。
このサイトでは画面描画処理(OpenGL), GUI 全体のデザイン(wxWidgets)の順番に説明していきます。
0. ライブラリの導入とか(OpenGL 編)
または、
0. ライブラリの導入とか(wxWidgets 編)