人生

やっていきましょう

849日目

前回ワープ床の基本的な構造を設計したが、作る過程でやはり処理が膨大になりすぎてしまい管理が難しいという結論になった。最も面倒なのは岩A、岩B、岩Cのそれぞれのx座標とy座標が、ワープ床のx座標、y座標と一致するかをいちいち別々に取得しなければならないという点であり、のちのちバグが発生した際にこの量の処理を確認しなおさなければならないというのはかなりの苦行だと思った。そのため何か簡略化する方法はないかと考えた。

数時間考えてもまったく思いつかなかったが、ふと変数操作+の項目を目にしたときにマップの指定の座標にあるマスが通行可能か不可能かを判別してくれる操作があることに気づき、これは利用できると考えた。

初めから岩A、岩B、岩Cのx座標、y座標と、8つのワープ床がそれぞれ一致するかを調べるという途方もない判定を行わずとも、ワープ床の座標が通行可能かどうかの判定を行いさえすればよかったのである。そうすることにより、岩A、岩B、岩Cだろうと関係なく、座標のマスに障害物があるかどうかだけで判別できるようになったので、かなり簡略化されたと思う。

以上を踏まえた上で先日の処理を書き換えた。倉庫番の部分まで書き込むと長くなるので、省略してワープ関連の部分だけ記載する。

 

 

>>8つのワープ地点が通行可能であるかどうかを判定

・それぞれのワープ地点の座標が通行可能であるかどうかの判定を行い、通行可能であれば0を、通行不可であれば1を何かしらのイベントのセルフ変数00~07に各々代入する

・何かしらのイベントのセルフ変数00~07の結果に基づいて、セルフ変数00と01は管理変数Ⅰ、セルフ変数02と03は管理変数Ⅱ、セルフ変数04と05は管理変数Ⅲ、セルフ変数06と07は管理変数Ⅳに1か0を代入する。セルフ変数の値が1の場合は管理変数に1を代入し、そうでない場合は0を代入する

 

>>岩を押す

・押した後の岩の座標(x,y)を岩自身のセルフ変数01、02に取得

 

>>押した岩の判定
●【条件】押した岩が8つのワープ地点のいずれかの座標と一致するか?
│この場合、岩Aがワープ地点の座標と一致するか各々判定

●一致する場合、更につぎの条件を判定する
【条件】一致した座標と対応するワープ経路の管理変数に1が代入されているか?
  │
  │
 ●1が代入されている場合、処理はそこで終わり岩はワープしない
 ●1が代入されていない場合、対応するワープ地点に岩を飛ばし管理変数に1を代入する

 

「置いてある岩」の判定を「押した岩」を含めたすべての岩がワープ床の上にあるかどうかの判定に置き換えた。そのため「押した岩」が8つのワープ床のいずれかの座標と一致しなかった場合の以下の判定を一括して削除した。

 

●一致しない場合、次の条件を判定する
 【条件】押される前の岩の座標が8つのワープ地点のいずれかと一致するか
  │
  │
  ●一致する場合、対応するワープ経路の管理変数に0を代入する
  ●一致しない場合、処理はそこで終わり何もしない

 

これでかなり簡略化できた。唯一面倒なのが「押した」岩がワープ地点の座標と一致しているかどうかの判定だが、それ以外の面倒な部分は一切なくなり管理がしやすくなった。これらを実際に入力してテストプレーを行ったところ、岩がワープ床に乗ると狙った場所にワープし、ワープ床で飛んだ先に岩が邪魔しているとワープ床が使えなくなっていた。これをもってワープ床のギミックは完成したといえるだろう。

基礎的な構造は完成した。次はこれらを用いてパズルを敷かなければならない。また岩がまだ1つしかないので、岩を3つにして問題なく機能するかどうかを確認する必要がある。ともかくオブジェクトを別の位置にワープさせ、更にその先に障害物がある場合はワープしない床を完成させたことはここ数か月で一番の成果であると言える。不可能であると思われていたものをどうにか可能にしたことに自分は満足を覚えた。