はやくも倉庫番のバグを見つけた。岩がゴールの座標と一致した際にスイッチとして加算(=+)されるはずだった変数Pが、想定外の場所で加算されてしまっていた。
問題の内容については、イベントがどのように動いているかを理解することが前提となる。自分が倉庫番のイベントを作った際、次のような操作が行われるように設定した。
はじめに岩を主人公が向いている反対方向に1マス動かす。次に岩の(X,Y)座標を取得し、それぞれの数値をセルフ変数01と02に代入する。その後セルフ変数01,02がゴールとなる位置の座標と一致するかどうかの条件判定を行う。もし(X,Y)ともに一致すれば変数Pに1を加算(+=)する。ひとつでも一致しなければ0を代入(=)する。0を代入するのはゴールに乗っているうちは1を維持するが、一度でも離れたら0にするためである。これで完成だ。変数P=正しいゴールに乗っている岩の個数となるため、たとえばゴールが2つあるものを作ろうとしたら、P=2の時にドアが開くイベントを自動で起動させるなどをすればいい。
このとき次のような問題が発生した。たとえば岩とゴールと障害物があり、ゴールの上に岩、その隣に障害物がある場合、自分が障害物に向けて岩を動かした際、岩はゴールの位置から動いていないにもかかわらず変数Pが1加算されてしまっていた。
この問題は岩がゴールの座標と一致した「後」に1を加算してしまっていることにある。そこで自分が考えたのは、岩を押す「前」の(X,Y)座標を新たにセルフ変数03,04に代入させ、岩を押した「後」の(X,Y)座標を代入したセルフ変数01,02との関係において03=01, 04=02が成立する場合に限り変数Pの加算を中断する、というものである。これにより岩が障害物に衝突して同じ座標にとどまり続けたとしても、移動する前と後で座標が変わっていないので変数Pが加算されることはなくなった。
ここまで作ってテストプレーをしてみたが、まだ変数Pが正常に機能していなかった。問題は複数あったのだ。もうひとつの問題はどこにあるのか。明日はそれを詳しく調べてみたい。