魔法エリアの確定問題

out of memoryとエラーが出てしまう PICO-8
out of memoryとエラーが出てしまう

タイトル未定(仮タイトル project005)の新しいゲームを制作しています。

前回の続きですが、主人公が移動して引いた線が囲まれると、その囲まれた場所に魔法が発動して敵を倒すアイディアなのですが、囲まれたエリアを確定するアルゴリズムを考えています。

囲まれた部分を(座標として)抽出して、その部分を上から左から右へ線の座標を解析していけば、魔法が発動する部分を確定していけると思って実装してみたのですが、これだとある線の引き方に対応していなくて(ずっと囲まれた部分だということで、延々に右へ伸びていって、アウトオブメモリーとなる)、やり直し。

「囲まれた部分の確定」のアルゴリズムは、ペイントソフトなどで自由な線を書いて囲んだ所を塗り潰す考え方から応用できると思い調べてみると、再帰処理を使えば可能だということがわかりました。

また、1ピクセル毎に調べるようにすると、処理が重くなってしまうと思い、タイルの大きさの8ピクセル毎にしようと考えましたが、これだと線が隣り合うとその間が埋まってしまい、先にいけないことがわかりました。

その間を取って、4ピクセル毎なら処理を軽くしつつ、線が隣り合うところも通り抜けられるので、その感覚て再帰処理を実装してみます。

この様に線で囲んだ場合
この様に線で囲んだ場合
緑の部分が魔法のエリアとなる
緑の部分が魔法のエリアとなる
4ピクセル毎にエリア部分を座標化する
4ピクセル毎にエリア部分を座標化する

また、「そのスタートの位置はどの様に選べば良いか?」と悩みましたが、囲んだ時の主人公のいちからはじめ、再帰処理でステージの隅(予定だと0か124)に到達したらfalseを返して塗るのをやめ、すべて線に到達して帰って来たら、再び座標を確定していく再帰処理を行えば良いと考えています。

これで上手くいくかどうか、チャレンジしてみます。

コメント

タイトルとURLをコピーしました