■ 新・ゲーム開発講座




■ へっぽこプログラミング入門♪


■第7夜:ゲームらしい仕様を決めよう

前回までで、窓が開いて、絵が出て文字が出せる環境は整いました。ここから、いよいよノベルらしいプログラムを作って行きますが、行き当たりばったりにプログラミングを始めると破綻しそうですので、まず仕様を決めることに致しましょう。

仕様とは「こんなゲームが作りたい」という漠然とした要求を、実現可能な機能の組み合わせに分解して明確にしたもの(作文でも、概略図でも何でも良い)のことです。業務としてプログラミングを行っている場合は、この仕様決めの部分に時間をかけてきっちりとしたものを作るそうですが・・・・まあ、趣味の延長線上のプログラミングでは、そんなに本格的なものを作る必要はないので、適当にいきます(爆 ^^;)。それでも大雑把だろうが何だろうが、これから作り込まねばならない機能を一覧にするだけでも随分先の見通しが良くなります。余談ですが、多人数でゲームを作っていて破綻するケースでは、仕様決めがいい加減で、途中で「あれも入れよう」「これも入れよう」とどんどん希有壮大な方向に話が進んでいって結局崩壊・・・というパターンがよくありますので注意したいところです♪ これは自戒を込めて言わせていただくことですが、未完の超大作より、小なりといえど完成品を作る方が100万倍も価値があります(^^)

■ノベルに求められる機能

さて、そこでこれから作ろうと思うノベルものの定義・・・と言いますか、仕様について概観してみましょう。本講座で作ろうとしているのは、テキスト表示主体のストーリー作品(のプレーヤー部分)です。この分野では聖典?とも呼ばれるリーフの「雫」「痕」にあやかって、背景にBMP画像を表示しつつ、画面全体にテキスト(文章)を重ねて表示する形式に致しましょう。



こんなカンジです(キャラがいないと地味だなぁ T_T)


テキストは、ここでは一般的なテキストファイル形式で扱うことにします。Windowsに付属のメモ帳でも簡単に編集ができますし、スクリプト(文章の合間に埋め込む制御用のコマンドの羅列と思ってください)のデバッグにもその方が便利です。

また前回までのサンプルでは、文字表示は一列全部を瞬間表示していましたが、やはり
1文字ずつ順々に表示して行く方がカッコイイですよね。テキスト表示はプレーヤーの鑑賞時間も考慮して、キリの良いところまで表示したら点滅カーソルを表示して、マウスのクリックを待つようにすることも必要でしょう。さらに表示したテキストが画面いっぱいになったら、改ページ処理もきちんと行わなければなりませんし、ページ一杯にならなくても、キリの良いところで自由に改ページ、改行などが出来た方が便利です。・・・・うーん、考えるといろいろ出てきますね(^^)。

基本的なテキスト表示以外にも、作り込まなければならない機能はたくさんあります。背景画像の読み込み→表示がコマンドによる指示で自由に出来ないと不便ですし、BGM効果音も付けないとゲームとしては片手落ちになりそうです。また1本道のストーリーだけでは単なる小説と変わらないので、選択肢を表示して処理を振り分ける機能は必須です。さらに、テキストの長さによってはロード/セーブも出来た方が良いでしょう(5分で終る短辺しか作らないぞ、という方には不要でしょうけど・・・・ ^0^)。

■具体的に

いろいろ考えると際限がありませんので、ここでは説明の都合上以下のような仕様で作っていきたいと思います。あくまで「入門用」ですので凝った機能は省きます。

【概要】
テキストベースのスクリプトファイルを読み込んで適宜実行していくインタプリタ型プレーヤソフト。画面は原則として表ウィンドウとバックサーフェイス、カーソルパターン用、および背景保持画面1枚のみ使用する。入力はマウス入力主体で、キー入力は終了用にESCキー、またキー入力待ち用にCR(リターンキー)のみスキャンする(スゴイ手抜き ^^)。またマウス右クリックでサブメニューが開き、ロード/セーブ/終了処理を選択できる。

【スクリプトコマンド】
テキストの途中に挿入する制御コマンドです。通常のテキストと区別するために、原則として先頭に「#」をつけることにします(こういう文字を"識別子"などと呼ぶことがあります)。ここで作るのはあくまでサンプルなので、基本的なコマンドのみ実装します。(作っているうちに多少の増減はあるかもしれません ^0^;)

#halt
終了

#delay
遅延

#wait
カーソルブリンクを伴うキー入力待ち

#page
改ページ

;
改行

#jump
ラベルジャンプ

#change_file
スクリプトファイル間のジャンプ

#flag_on
イベントフラグON

#flag_off
イベントフラグOFF

#g_change
場面切り替え効果

#if_flag
イベントフラグによる分岐

#select3
選択肢(3択)による分岐

#play_midi
MIDIファイルを演奏する

#stop_midi
MIDIファイルの演奏を停止する

#play_wav
WAVファイルを再生する

#stop_wav
WAVファイルの再生を停止する

【右クリックメニュー】
WindowsAPIを使ったダイアログではなく、ゲームらしくグラフィカルに開く自前のメニューを作ります(理由は、単に見栄えがしてかっこいいから:笑)。これもその気になればいろいろメニューを盛り込めますが、基本的なものに厳選します。

LOAD
SAVE
終了

うーん・・・・ざっと、こんなものでしょうか。仕様決めとしては大甘な感じもしますが、いきなり難しく考えても仕方がありませんので「漂流開発」にならない程度の指針になれば良い、と割り切りましょう。

簡単なノベルでも、いざ機能を分解していくと結構なボリュームになってきます。複数人数でゲーム作りなどをしていると、ときどきプログラミングを知らないメンバーから「実現不可能なトンデモ仕様」の要求が出たりしますが、プログラミング担当者は夢を壊さないように細心の注意を払いつつも、現実との橋渡しに留意していただきたいところです(^^)。