現在制作中のゲーム「Magic Line」、昨年の秋に行われた、MI68での試遊で見つかったバグ。
線で囲んでも、囲んだ所に魔法アニメーションが表示されない時があるのです。
しばらく放置していて、今年になってから本格的にデバッグにかかりました。
そして 原因がわかり、修正することが出来ました。

上のGIFアニメの様に、囲んだ所に魔法アニメーションが表示されず、線の場所だけ表示されているのがわかります。
128×128ドットの画面を4×4のドット位置にした、マトリックステーブルを使って処理しています(31×31の2次元配列)。
そこに
0:何もなし
1:線
3:魔法
という情報を代入します。
魔法アニメーションは、8×8ドットのグラフィックを 線と魔法の位置に表示させます。
ところが、囲んでも線の所だけ魔法アニメーションが表示されることがあるのです(先程のGIFアニメ)。
原因は、線で囲んだ時に、魔法使いの位置から斜め4方向の一番近いグリッド位置から何もない所を魔法の所と印をつけていく再帰関数を呼び出しているのですが、その斜め4方向の一番近いグリッド位置が、線だった場合をチェックして処理していなかったのが原因でした。
4つの条件文(はじめのマトリックス位置が、0であることをチェック)を書き足して、無事にバグが取れました。

print文とコンソールに表示するprinth文を使って、トレースしてわかりました。
次は、線を引いて囲まずにボタンを離すと、マジックミサイルが撃てるようにします。
コメント