人生

やっていきましょう

587日目

今日の昼にギミックに関する新たなひらめきがあったので急いで実装した。数か月前に実装が困難で諦めていたものだったが、ふとしたことで解決策が浮かんできたので取り掛かった。

ギミックの内容は次のようなものだ。部屋が2つあり、一方の部屋ではメロディを流す装置が置かれていて、もう一方の部屋ではドレミファソラシの音が鳴る装置が置かれている。メロディ通りにプレイヤーが音を弾ければスイッチが入り、先に進めるという仕様だ。

音の効果音は簡単に素材サイトから引っ張ってこられるが、プレイヤーが入力する音と手順通りのメロディの間の整合性をどのように判定し、管理するかが分からなかった。

例えばメロディが【ド→レ→ミ】であった場合、プレイヤーはドレミファソラシの装置から【ド→レ→ミ】を入力することになるが、プレイヤーは自由にドレミファソラシの音を鳴らせる状態にあり、仮にドドドドミミミドレミミドドドドドレ・・・などと打ち込んでいた場合、プレイヤーにとってはどこからドの判定が始まっているのか、どこで間違ったのかが分かりづらいという問題がある。

他にもプレイヤーがちゃんとメロディを入力したかどうかをどのように判定するのか、プレイヤーがメロディを間違えた場合はどう処理するのか、同じギミックをいくつか配置するならば、どのようにそれらを並列して管理すればいいかという問題がある。

とにかく実現が面倒だったので投げていたが、シンプルに管理できる方法を思いついたので今日はここに書いておく。

簡単に説明すると次のようになる。まずは装置の演奏の起点と終点を予め決めておく。スイッチによって判定装置を起動し、プレイヤーが入力した情報と、メロディが一致しているかどうかの判定を行う。その中でメロディを構成する個々の音と、プレイヤーの入力する個々の音が一致していれば点数を1加算し、一致していなければ点数を管理する変数【点数】に0を代入する(こうすることで、判定装置を起動しない限りはいくらドレミファソラシを連打して遊んでも評価に影響はない上、プレイヤーの側も音の入力の起点と終点を意識することができる)。またこのとき同時にプレイヤーが入力した回数も別個の変数【入力回数】で管理しておく。

【点数】が所定の数値、例えば【ド→レ→ミ】なら3に達した場合、入力のイベントとは別の点数集計イベントを呼び出して実行する。このときプレイヤーの入力した個々の音と個々のメロディの音が一致していれば、【点数】は3になっているはずであり、その場合は成功の判定、それ以外の点数ならば失敗の判定を出す。評価が終わった際には判定装置のスイッチをオフにし、音の評価や入力に関わった変数すべてに0を代入して初期化する(例えばここで失敗した場合は、もう一度装置の起動させて初めからやり直す)。

だがこうした方針を実現するのは言葉以上に難しい。1つのメロディ単体だけであれば実装は簡単だったが、自分はメロディを3つ用意し、それぞれを並列的に管理していた。そのためメロディA、メロディB、メロディCにおけるそれぞれの【起動】【点数】【クリア】が、互いに接触したり混合したりしないようにうまくすみ分け、かつそれらのメロディに対して変数【入力回数】を共有させる必要がある。

他にもどのタイミングで初期化を行うか、どの条件をどのように分岐させるのか、といった問題が大変ややこしく、実力不足もあって実現はかなり困難なものだと思われた。

だが奇妙なことに、作っていけば行くほど作られたギミックに向けられる認識はより明確なものになり、自分が何をすれば問題を解決できるのかが分かってくる。

この感覚は自分の直感に反していた。つまり自分は、自分がいついかなる場合も無力であり、自分の判断や行動には必ず致命的な問題を含んでいると思い込み過ぎていた。だが事実は、ある問題を解決しその種の解決が蓄積されれば、その蓄積は土台となり、否応なしに明確な像を描くのだった。

自分が方針を定めいくつかの個別の問題を解決していく中で不具合が生じると、まずそれは既に解決した個別の問題の中に原因があるものなのか、あるいは想定外の問題なのか、と場合分けして考える智慧が出てくる(自分はこの点を頻繁に混合する)。そして既に解決した問題に原因がなければ、それらは「もう見なくていいもの」になり、自分がまだ検討していないものを中心に検討を行うという明確な目標を立てることができる(大抵この過程で問題が見つかる)。

この検討が増えれば増えるほど、個々のロジックがどう繋がっているかがわかるようになり、またその検討を終えた繋がりは、きわめて安定しているものであるという実感がわいてくる。論理というものはその時の自分の直感や感情とは独立したものである。自分の内面がいかに不安定で自信がなかったとしても、強固なつながりをもつ論理は、自分の見方や精神状態にかかわらず強固である。

このことはブログを始めた当初に見出した、解釈は信じられなくとも機能はただ存在する、という気付きをより明確にしてくれた。自分の内面に反して、論理はいかに力強く存在しているか。この性質の違いをもう少し観察するべきだろう。

今日2章は終わるはずだったが、この調子だと明日にもまだ終わらないかもしれない。やるべきことは明確なので、もう少しスピードを上げていきたい。