基本機能


まず、サウンドノベル系ゲームに絶対に必要な機能はなんでしょうか。

考えられるのは

  1. 「テキスト表示」
  2. 「選択肢」&「キー入力」
  3. 「画像表示」
  4. 「サウンド」
  5. 「データのセーブとロード」

 くらいでしょうか。でもこの中で絶対に必要なものは何かを考えてみましょう。

 まずは「テキスト表示」。ノベルというくらいですからテキスト表示が無いと話になりません。すべてを音声やアニメーションでするという手もありますが、難しくなりますし、サウンドノベルというテーマなので今回は考えません。 ということは「テキスト表示」は必要になります。

 次に「選択肢」&「キー入力」です。これも必要ということがわかりますね。選択肢が無いとただの一本のストーリーのノベルになってしまいます。さらに選択肢を選ぶためにはユーザー側から何らかのアクションを起こさないといけません。
 アクションはマウスでも音声入力でも超能力でもなんでもいいのですが、キー入力が一番簡単でしょう。

 次に「画像表示」です。サウンドノベルというとだいたい背景画と人物のシルエットが表示されていて、ゲームを盛り上げています。これも必要なような気がするかもしれませんが、今書いたように画像表示は基本的にゲームを盛り上げる演出です。 つまり「あったほうがいいけれども、無くてもゲームは成立する」部類のものです。
「サウンド」についても同じことが言えます。※

 最後に「データのセーブとロード」です。ゲームを途中で止めて後から続きをしたり、一度ゲームをクリアするとストーリーが増えたりということをしようとすると必要になります。
しかし、昔のファミコンにはセーブという概念が無くてもなんとかなったように、絶対必要な機能ではありません。(最近のゲームでセーブが無いとクソゲーといわれるでしょうが)

 以上のことから、絶対に必要なものは「テキスト表示」、「選択肢」&「キー入力」だけですね。それ以外の機能は基本的にゲームをより面白く、便利にするための付けたしです。


 ですからまずはそれ以外の機能は無視して作ってみましょう。これだけでもゲームとしては成り立ちます(面白いかどうかは別)

 さて、どのようにプログラムすればいいのか?
 まずはゲームスタート時のタイトル表示や何やらは面倒なのですっとばして、いきなりゲームスタートということにしましょう。とりあえずゲーム本体を作ることを考えます。
そうするとプログラムの流れは


 以上の繰り返しになります。シナリオの最後だと選択肢が表示されずにそのまま終了します。

 これだけであればプログラムとしては簡単です。あらかじめ準備されたシナリオのテキストを順番に表示して、選択肢の結果で次に表示するシナリオを決めていけばいいのです。そしてシナリオの終わりにきたらゲームオーバーです。

極論すると以下のようなプログラムになります。

#include "stdio.h"
#include "conio.h"

int main(int argc, char* argv[]) { int i; printf("シナリオ1\n"); printf("選択肢1->1 選択肢2->2\n"); i = getche(); printf("\n"); if(i == '1'){ printf("シナリオ2\n"); } else{ printf("シナリオ3\n"); printf("選択肢3->1 選択肢4->2\n"); i = getche(); printf("\n"); if(i == '1'){ printf("シナリオ4\n"); } else{ printf("シナリオ5\n"); } } printf("エンドシナリオ\n"); return 0; }

Cのできる人ならば、このプログラムを解説する必要は無いでしょう。単純に上から処理をしていって、if分で分岐しているだけです。
シナリオの分岐そのままにプログラムも進行しています。

 欠点として、このプログラムではシナリオが進むにつれてif文がどんどん深くなっていきます。しかも木構造的なシナリオ以外は作れません。

 他にもプログラムの中にテキストが直にかかれているのでデバッグが大変だとか、プログラマがテキストを打ち込んでいかないといけないだとかいう欠点もあります。
その前にプログラムとデータが混在しているのは美しくありません。

 せっかくだから、もっと効率よく書きたいものです。
 データをプログラム中に入れずにわけてしまい、プログラムがデータを読み込んで、それを解析して処理をする。というプログラムらしいプログラムに変えましょう。

 さらにこのプログラムをよく見てみると、「テキスト表示→選択肢」という処理が続いているのに気が付くと思います。ということはそこをループ処理にして、うまくデータを放り込んでいけばいいんじゃないかと容易に想像できます。

 「テキスト」「選択肢」「次のシナリオの場所」のデータを一パックにしてうまく処理すればうまくいきそうです。

ではどのようなデータを作っていけばいいでしょうか? 

次はどのようなデータを作ればいいかを考えます。


※画像もサウンドもゲームのデザイン次第でゲームに絶対必要な要素にはできますが、今回はノーマルなサウンドノベルを目指しているので複雑なことはしません。


前ページ トップ
次ページ