※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

アルゴリズムのスケルトン


会話インクルードの一般的なアルゴリズムを紹介したいと思います。
あくまでメッセージ表示のアルゴリズムに焦点を当てて解説していくので、パイロット画像やインターフェース画像の表示については詳しくは触れません。

※以下、「メッセージを一文字ずつ表示する」という動作を「メッセージ流れ表示」と勝手に呼称します

// サブルーチン名は自由に変更してください
// 引数には以下のようなものが指定されていると仮定して
// 処理をトレースしていきます
//   Args(1) : パイロット名
//   Args(2) : メッセージ
TalkInclude:

// メッセージを変数に格納しておく
// わかりやすい名前の変数に入れておいたほうがわかりやすいです
Local mess = Args(2)

// 表示メッセージの文字数を取得
// これをキーにメインとなるループを実行します
Local MessLen = Len(Args(2))

// メッセージポインタを初期化
// 表示メッセージを先頭から順に参照していくに当たって、
// 現在参照している文字が先頭から何番目かを示す
Local ptr = 1

// ポインタがメッセージの文字数を超えるまでループを行います
// 不等号を反対にしてしまうともちろんアウト
Do While (ptr <= MessLen)

  // 参照中の文字によって分岐処理をする
  // if文で条件分岐してもいいが、処理の対象となる文字は決まっているので
  // switch文の方が短く書ける
  Switch Mid(mess, ptr, 1)
  Case "<"
    // タグの開始を示すブラがきたので、タグを読み取る処理を行う
    タグを処理する(工事中)
  Case ";"
    // セミコロンがきたので、改行処理を行う
    改行を処理する(工事中)
  Case ":"
    // コロンがきたので、分割表示処理を行う
    分割表示を処理する(工事中)
  Case Else
    // その他の文字・記号はメッセージとして出力する
    // メッセージ出力処理を行う
    メッセージ出力を処理する(工事中)
  EndSw

  // 参照している文字の処理が終わったので、ポインタをインクリメントします
  // これを忘れたら無限ループの地獄が待っています
  Incr ptr

  // そして参照している文字の処理が終わり、
  // 次の文字を処理するまでのこのスペース
  // 悪夢の「メッセージ流れ表示」機能を付加するには、
  // ここにたった一行命令文を記述するだけでOKです
  // 例:Wait 0.1
  // Waitタイムが0.1でも、目が慣れてくると大分遅く感じます
  // ましてや0.5なんかにしてしまうと、
  // 確かに重厚な感じは出るかもしれませんが、
  // 同時にプレイヤーの気分も重くなります。
  // あまりWaitタイムを小さくしても本末転倒なので、
  // なら最初からWaitをはさまなければいい
  // ご利用は計画的に!
Loop