前回:
[テキストだけのエロゲーを作るvol.4 - 111のデジ同人感想]
次回:
[テキストだけのエロゲーを作るvol.6 - 111のデジ同人感想]

111先生のお手本



45417787
クリックでゲームに飛びます

zipはここ。

*バズーカを振ってカメと会った直後、いぬに会っても文章が前後しなくなった。
これでそれなりにきちんと、文章が読めるように。

複雑さが爆発しそう所を、紙一重で解決する(図解)


今回は…ほとんど進んでない!

実質、前回の
とりあえずイベントが立て込んだ時のテキスト前後がひどい

を直しただけある。

自分の時間管理の甘さと、集中力の無さから進まない…が主要素な気もするがまぁ、
単純なバグだと思ってたこの辺りが結構ちゃんと処理しないと厄介な事になりそうで、じっくり考えてたってのもある。
(手を動かす前に2日くらい、設計を考えたり)

処理サイクル

まず我がテキストエンジンの基本的な処理サイクルはこうである。

Listに順にA、B、Cとかのイベントを挿入する。
ぐるぐる回ってるループがあるので、それがListを監視していて、中身が追加されたとなれば、先頭からイベントを取り出し、実行していく。

こうしてメッセージが順に表示される。
ではなぜ、メッセージが前後するような事態になってしまっていたのか。

選択肢pushのあやまち

というのも、Aが行うのがメッセージ表示だけなら問題ないのだが、Aの中にまた、”他のイベントを挿入する”という命令が入ってる場合もあるから。
(主に選択肢)

例:
カメと出会う(A)
カメとの選択肢の結果を挿入(Aから挿入される、新しいイベント)

この時、Aの中で作られたイベントは「Listの一番最後に加わる」。
もうBやらCやらが詰まってしまっているので、イベントとしてはDやE、最後尾となる訳だ。

Listに入ってるのがAだけなら、それでも問題ないだろうが、
既にいぬと出会うイベント(B)が入っていた場合、

A.カメと出会う
B.選択肢選ぶ
C.いぬと出会う
D.選択肢の結果が表示される

という、文章の前後が起きる。

これを解決するにはどうしたらいいか、まぁ…色々考えた。
そもそも選択肢=「イベントの中でイベントを呼ぶ」が複雑すぎる仕掛けではないのか…、とか。
(選択肢の中で、更に選択肢が…と重なることも有り得るのだし)

ただJavaScript特有の非同期処理では、順に並ばせ、クリック待ち・選択肢を実現するには、どうしてもこれ以外に実装方法は考えられなかった。
少なくとも現時点では。

正しい挿入

という所で、解決は極めて簡単な方法を取った。
「イベントの中でイベントを挿入する時は、今詰まってるListの前から2番めに入れる」
である。
(1番めには、まさに今実行中のAが並んでる)

自分の中でも、「それで本当にいけるんかい」という処理だったのだけど、
これがドンピタで効いてくれた。

まさに俺々エンジンが複雑さのカオスの淵に立っていて、一歩その複雑さに”付き合って”、難しい機構を入れたら、
一気に”あれ、じゃあこの場合は?””こういう場合はどうするの?”みたいになる、矛盾だらけの渦に呑まれてしまう所であった。

複雑さを複雑さで解決すると、次の問題が溢れ出し、もうその解決には新しい複雑さを宛てるしかなくなる。
こうして破綻は一気に近づく。

複雑さはシンプルにしか解いてはダメなのだ、きっと。(何か達人めいた事をいう111)


ちなみにトイレでふんばりながら

を読んでたら、最新のJavaScriptにはPromiseとゆー、非同期処理を専門にこなす文法・ライブラリがあるそうです。

これを使っていれば、数週間前から今までの苦労は無くても良かったのでは…。
(と言うか、普通にやって苦労するような所は”他の誰かがもう解決すべく、ライブラリを発表している”と疑うべきでは…)

これがエンジニアの世界の弱肉強食、
娯楽作品なら同じようなキャラ・同じようなシチュの作品で被っちゃったとしても「まあそういうのが、もう一つあっても良いんじゃない」で済むけど、
プログラムの実行結果は誰がやっても同じだから…誰々が作ったとか関係ないから…。

既にあるなら、本当にムダにしかならないね。

自力でやったとか、精一杯頑張りましたとかは一切通じず、ただ結果の効率性だけが求められる世界なんだ。つらみ。

次回予告




プログラムにテキストを直に書き込んでる状態に、111は憤慨する。
「もっと使いやすくしよう!」
「この方式なら…、専用のイベントエディターとかも作れるぞ(!)」
しかしそれは新しき問題の種にしか過ぎなかったのだ(またかよ)

さーて次回もサービスサービ(ry




が、amazonアフィから売れていた。…読めということかしら…?