Visual C++ / DXライブラリでローグライク(ダンジョンRPG)を制作中です。
ダンジョン自動生成の改良で発生した、モンスターの自律移動の誤動作を修正しました。
元々柔軟な仕様で実装してあったため、大規模な変更は必要ありませんでした。
ただ、従来からの仕様上、部屋内で斜め移動を伴う最短ルートを通らないケースがあります。
でも、他のキャラ(主人公など)を追っている場合は最短で動くので、モンスターから逃げる際に距離が開く、といった問題は起こりません。
それに、今の余裕を持たせた移動ルートの方が、モンスター同士が部屋内ですれ違う際にスムーズです。
却って良い仕様になったのかもしれません。
が、修正したはずの自律移動が、まれにおかしな動きをする現象が発生しました。
何もない壁に直進して、壁の前で動かなくなります。
これはただの凡ミスで、ループの条件を間違えて、中身が空の部屋をひとつ作ってしまっていただけでした。
存在しない部屋に移動しようとしていたんですね。
しかし、そんな単純なミスをしているとは思わず、アルゴリズムの欠陥まで疑って、デバッグ用のミニマップ表示を拡張したりと、無駄な苦戦をしました。
苦労の記念に、デバッグ用ミニマップ表示のスクリーンショットを貼っておきます。
表示用に角扱いになっているマスや、部屋の出入り口の方向/数を表示しています。